Diyetisyenler ve klinikler için geliştirilmiş kapsamlı bir sağlık yönetim platformu. Randevu takvimi, yemek günlüğü, VKI takibi, besin kütüphanesi ve abonelik sistemiyle tam işlevli bir SaaS ürünü.
%85 uygulama ilerlemesi
Diyetisyenler sık kullandıkları öğünleri şablon olarak kaydedip tek tıkla danışan planlarına uyguluyor; tekrar eden veri girişini ortadan kaldırır.
Admin, diyetisyen, klinik yöneticisi ve danışan için ayrı erişim katmanları; rate limiting ile korunan REST API.
Sürükle-bırak randevu yönetimi ve takvim senkronizasyonu.
Auth
JWT Extended
Deploy
Vercel+Render+Neon
Arka Uç
Flask REST API
Ön Yüz
React 19 SPA
Veritabanı
PostgreSQL
Karsilama trafigini dashboard'a tasi (recharts grafik) ve icerik sayfasini dayanikli yap
Karsilama trafigini dashboard'a tasi (recharts grafik) ve icerik sayfasini dayanikli yap - AdminDashboard: karsilama sayfasi trafigi bolumu + recharts cizgi grafik (goruntulenme/tekil/inceleme, son 30 gun); bagimsiz yuklenir, hata dashboard'i bozmaz - AdminIcerikYonetimi: trafik cikarildi (artik dashboard'da), sadece icerik yonetimi; yukleme hatasinda sayfa kirilmiyor, 'Tekrar Dene' ile yeniden denenebiliyor
Yeni DT logosu ve marka gorselleri
Yeni DT logosu ve marka gorselleri - favicon.svg: yeni DT monogrami (D + filiz bicimli T, yesil gradyan) - logo192.png / logo512.png: PWA/manifest ikonlari (onceden eksikti) + manifest'e eklendi - og-image.png: link paylasim karti (WhatsApp/Instagram/LinkedIn onizlemesi) yeni logoyla
Karsilama sayfasi yenileme, admin icerik/trafik paneli ve SEO iyilestirmeleri
Karsilama sayfasi yenileme, admin icerik/trafik paneli ve SEO iyilestirmeleri Karsilama sayfasi: - Yeni deger odakli baslik ve 'Ucretsiz Basla' CTA'lari, guven seridi - Ozellik kartlari fayda odakli yeniden yazildi (+ Besin Kutuphanesi, Klinik Yonetimi) - Spotlight bolumu (sablonla hizli plan, logolu cikti, gelisim takibi) - Urun gorselleri/video ve danisan yorumlari bolumleri (icerik boskken gizli) - Istatistik rozetleri ve SSS guncellemesi Admin paneli: - Yeni 'Karsilama Sayfasi' sekmesi: trafik paneli (goruntulenme, tekil ziyaretci, inceleyen, son 30 gun) + landing icerik yonetimi (gorsel/video/yorum/istatistik) Backend (yeni tablo yok, SistemAyar kullanildi): - Public GET /landing-icerik, admin GET/PUT /admin/ayarlar/landing - Public POST /ziyaret (giris yapmislar sayilmaz), admin GET /admin/ziyaret-istatistik SEO: - lang=tr, anahtar kelimeli title/description/keywords, Open Graph + Twitter Card, canonical/og:url (diyet-takip.com), manifest.json marka bilgileri
randevu olusturma tarih+saat secicisini Apple tarzi yenile
style: randevu olusturma tarih+saat secicisini Apple tarzi yenile - react-calendar secili gun: kaba dolu dikdortgen -> dolu daire (radial-gradient). - Bugun: dairesel ince halka. Hover: dairesel yumusak arka plan. - Saat butonlari -> modern pill 'time-chip' (secili=accent dolu, dolu/musait degil=soluk+ustu cizik). Tamamen gorsel, akis ayni.
sablon-ogunler N+1 sorgusunu eager-load ile gider
perf: sablon-ogunler N+1 sorgusunu eager-load ile gider Her randevu detay acilisinda cagrilan /sablon-ogunler, her sablon icin icerikler + her icerik icin besin & olcu_birimi + kategori'yi ayri ayri lazy-load ediyordu (yuzlerce sorgu). joinedload/selectinload ile ~2 sorguya indirildi. JSON ciktisi ve davranis birebir ayni.
haftalik plan tablosu - gorsel modernizasyon + sabit ilk sutun + kalori alt toplamlari
feat: haftalik plan tablosu - gorsel modernizasyon + sabit ilk sutun + kalori alt toplamlari Option 2 (yapisal/davranis degisikligi YOK, filtre ve tum islevler korundu): - Ilk sutun (ogun adlari) yatay kaydirmada sabit kalir (position: sticky). - Her hucrede (gun x ogun) kalori alt toplami gosterilir. - tfoot'ta gun basina toplam kalori satiri eklendi. - Tablo basliklari/kenarliklar tema degiskenlerine baglandi.
'günü kopyala' - beslenme plani gununu diger gunlere kopyala
feat: 'günü kopyala' - beslenme plani gununu diger gunlere kopyala Backend: POST /randevular/<id>/yemekgunlugu/gun-kopyala {kaynak_gun, hedef_gunler[]} -> kaynak gunun tum ogun/besin kayitlarini hedef gunlere cogaltir. ogun_adi 'Gun::Ogun' formatinda; sadece gun oneki degisir. Hedef gunde ayni (ogun+detay) kayit varsa atlanir. Frontend: gun basliklarina kopyala butonu + hedef gun secme modali (btn-modern chip'leri, 'tum gunleri sec'). Mevcut plan/filtre mantigina dokunulmadi; tamamen additive.
modern & mobil-dostu UI katmani; besin ekrani ve paylasilan tablo yenilendi
feat: modern & mobil-dostu UI katmani; besin ekrani ve paylasilan tablo yenilendi - modern.css: tema-degiskenli yeniden kullanilabilir tasarim dili (ui-card, card-grid, makro pill/oran cubugu, .data-table, btn-modern). - .data-table mobilde otomatik karta donusuyor (data-label ile). - Eski 'glass-card text-white + Table variant=dark' desenini JS'e dokunmadan her iki temada okunur/modern yapan global uyumluluk katmani. - BesinYonetimi: bastan yazildi -> kart izgarasi, renkli makrolar, arama, mobil dostu (en kotu ekrandi). - AdminDiyetisyenler: paylasilan tablo .data-table'a tasindi (sablon). - Olu BesinEkleFormu.js silindi (kullanilmiyordu + localhost:5000 bug). - Dashboard sabit izgaralari mobilde tek kolona iniyor.
Merge: güvenlik sertleştirmesi + şifre sıfırlama, doküman, logo/çıktı, hazır besinler, KVKK, yükleme göstergesi
Merge: güvenlik sertleştirmesi + şifre sıfırlama, doküman, logo/çıktı, hazır besinler, KVKK, yükleme göstergesi
global yükleme göstergesi + Render soğuk başlatma UX'i
feat: global yükleme göstergesi + Render soğuk başlatma UX'i - api.js: uçuştaki istek sayacı (istekBasladi/istekBitti) — CustomEvent ile yayınlanır - YuklemeGostergesi: 300ms'den uzun isteklerde üstte akan ilerleme çubuğu; 4 sn'yi aşan isteklerde "Sunucu uyandırılıyor… 30-60 sn sürebilir" bilgi kartı (Render ücretsiz sunucusu uykudan kalkarken site donmuş gibi görünüyordu) - Login: buton spinner + disable ("Giriş yapılıyor…") - Landing + Login açılışında sessiz /health ısındırma ping'i — ziyaretçi sayfayı okurken backend uyanır, giriş/demo anında bekleme yaşanmaz
şifre sıfırlama, doküman yönetimi, logo/çıktı şablonu, hazır besinler, KVKK
feat: şifre sıfırlama, doküman yönetimi, logo/çıktı şablonu, hazır besinler, KVKK Şifre sıfırlama (güvenli): - PasswordResetToken modeli — token DB'de SHA-256 hash olarak tutulur, 30 dk geçerli, tek kullanımlık; e-posta enumeration'a karşı her durumda aynı yanıt; rate limit (3/dk talep, 5/dk sıfırlama) - SMTP e-posta helper'ı (MAIL_* env ile yapılandırılır, app/email_utils.py) - Frontend: /sifremi-unuttum + /sifre-sifirla sayfaları, Login'de link Doküman yönetimi (yarım kalan özellik tamamlandı): - dokuman_bp route'ları: randevuya yükle/listele/indir/sil; uzantı whitelist, 5MB limit, sahiplik kontrolü; içerik DB'de (Render diski kalıcı değil) - RandevuDetay'a Dokümanlar kartı Diyetisyen logosu + yazdırma şablonu: - kullanici.logo_data (base64), PUT/DELETE /diyetisyen/logo (mime+boyut doğrulama) - Profil'de logo yükleme kartı (client-side küçültme), dashboard başlığında logo - Haftalık beslenme planı çıktısı yeniden tasarlandı: logolu başlık, danışan/tarih/VKİ bilgi şeridi, yeşil temalı okunaklı tablo, kişisel footer Hazır besin kütüphanesi: - 84 yaygın besin (makrolarıyla) + /besinler/hazir-yukle endpoint'i (idempotent) - Besin listesinde "Hazır Kütüphaneyi Yükle" butonu KVKK: - /kvkk aydınlatma metni + /gizlilik-politikasi sayfaları, footer linkleri - Demo talep formunda zorunlu KVKK onay kutusu Ayrıca: Profil şifre değiştirme min 8 karaktere eşitlendi; start.sh'a yeni kolon migration'ları eklendi (logo_data, dokuman.mime_type/boyut/icerik).
add AdminTicketDetay component for detailed ticket management and messaging
feat: add AdminTicketDetay component for detailed ticket management and messaging feat: create DestekSayfasi component for user support ticket overview and creation feat: implement TicketDetay component for individual ticket messaging and status display
enhance tracking and appointment details with date handling and UI style updates
feat: enhance tracking and appointment details with date handling and UI style updates
enhance DanisanDetay component with form handling and editing capabilities
feat: enhance DanisanDetay component with form handling and editing capabilities
Multi-rol JWT auth sistemi
Flask-JWT-Extended ile Admin, Diyetisyen, Klinik Yöneticisi ve Danışan rollerini destekleyen tam auth sistemi kuruldu. Token blocklist ve refresh token akışı eklendi.
implement modular package system with database schema updates and admin routing</div>
feat: implement modular package system with database schema updates and admin routing</div>
implement core backend API routes and administrative management interfaces for users, clinics, and packages
feat: implement core backend API routes and administrative management interfaces for users, clinics, and packages
initialize full-stack clinic management system with dashboard, appointment scheduling, and patient tracking modules
feat: initialize full-stack clinic management system with dashboard, appointment scheduling, and patient tracking modules
implement client detail, addition, and appointment scheduling components with calendar integration
feat: implement client detail, addition, and appointment scheduling components with calendar integration
implement admin API routes for user and package management with role-based access control
feat: implement admin API routes for user and package management with role-based access control
security: fix vulns, bugs, prepare Railway+Supabase deployment
security: fix vulns, bugs, prepare Railway+Supabase deployment - config.py: remove hardcoded fallback secrets, add postgres:// URL fix - __init__.py: CORS from env var, health check endpoint, rate limiting - extensions.py: remove duplicate jwt/cors instances - routes.py: fix incomplete update_randevu, remove duplicate routes, fix paket reference, add auth to randevu notlari, remove debug prints - Login.js: fix JSX syntax error - Dockerfile: use , FLASK_CONFIG=production - start.sh: auto migration + gunicorn startup script - Procfile: fixed to use start.sh - wsgi.py: default to production config - railway.json: health check, watch patterns, restart policy - .gitignore: comprehensive exclusions (venv, pycache, node_modules) - .gitattributes: ensure LF for shell scripts in Docker - requirements.txt: pinned versions, added flask-limiter - init_live_db.py: admin password from ADMIN_PASSWORD env var - Delete broken set_admin.py