Değişiklik günlüğü
Özellik, düzeltme, iyileştirme ve yeniden düzenleme kayıtlarıyla ürünün nasıl geliştiğini gösterir.
Y4 (3/3): siparis boy/opsiyon secim diyalogu - Urun kutusu ana fiyattan ekler; kosedeki ... boy+opsiyon diyalogunu acar - Diyalog: boy (standart/varyant) + opsiyon gruplari (tekli/coklu) + canli fiyat - Ana fiyattan da eklenebilir (onceki: sadece boy fiyati) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Y4 (2/3): menu opsiyon yonetimi UI - Opsiyon/Ekstra Gruplari yoneticisi: grup + secenek (ad/fiyat), tekli/zorunlu - Urun panelinde "Opsiyonlar" ile gruplari urune bagla Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Y4 (1/3): opsiyon/modifier backend - ModifierGroup/Option/MenuItemModifier semasi + migration - Menu: grup/secenek CRUD, urune grup baglama, fullMenu urun modifierGroups doner - Siparis addItem: modifierOptionIds -> ad+fiyat snapshot (urune bagli gruplardan dogrula) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Y1: kalem bazli bolunmus odeme (adet dusurerek) - OrderItem.odenenAdet (sema+migration); pay-items endpoint (secilen kalemlerden N adet ode) - Odenen adetler tekrar secilemez; hepsi odenince adisyon otomatik kapanir - Odenmis kalem silinemez/adedi azaltilamaz - Adisyonda kaleme dokun -> adet sec; secim yoksa tumu odenir Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Y2: Isletme ayarlari sekmesi + acilis/kapanis saati - Cafe.acilisSaat/kapanisSaat (sema+migration); /settings (MASTER) get/update - Dashboard is-gunune gore: acilis saatinden itibaren; gece satislari ayni gune - Yeni "Isletme Ayarlari" sekmesi: isletme bilgileri + saatler + kullanicilar (Kullanicilar buraya tasindi) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Y3+Y5: dashboard anlik guncelleme + adisyon panel duzeni - Realtime AppShell'e tasindi; her islemde dashboard+rapor invalidate (anlik ciro/grafik) - Adisyon paneli: menu buyuk (flex-1, 2-4 sutun), adisyon dar sabit sutun, panel buyutuldu (max-w-6xl) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
UX-F: stok ozel birim/tur (#7) - StockItem.tur enum -> String (guvenli cast migration, veri korunur); ozel turler eklenebilir - Kalemler formunda tur ve birim combobox (datalist): varsayilanlari oner + ozel deger yaz - turLabel/turTone fallback (ozel turler kendi adiyla, notr renk) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
UX-E: urun boylari/varyant (#3) - MenuItemVariant modeli + migration (boy sadece fiyati degistirir, maliyet urun recetesiyle ayni) - Menu: urun ici boy editoru + "N boy" rozeti - Siparis: boy secimi (adisyon menu seciciden), OrderItem ad "Urun (Boy)" snapshot - Public menu: boylar + fiyatlari Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
UX-C: raporlar ozel tarih araligi (#9) + sayim siralama (#8) - Raporlarda "Ozel" secenegi + iki tarih arasi date picker (backend from/to hazir) - Yeni sayimda kalemleri Ture/Miktara/Ada gore siralama secici Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
UX-B: sidebar acilir/kapanir + mobil uyumluluk (#5,#6) - Mobilde hamburger + kayan drawer + backdrop; masaustunde daralt/ac - Dokunmatik hedefler buyutuldu, mobil ust bar - Sidebar disi tum icerik zaten responsive (grid/overflow-x tablolar) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
UX-A: admin geri link, masa yan-yana + isim duzenleme, menu form 70/30 + isim duzenleme - Admin login'de "Kafe girisine don" linki (#1) - Masa ekleyince izgara duzeninde yan yana konumlanir, ust uste binmez (#2) - Duzenle modunda masa ismi satir-ici duzenlenebilir (#2.1) - Menu urun ekleme formu isim %70 / fiyat %30 (#4) - Menu urun ismi satir-ici duzenlenebilir (#10) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
M10: Sertlestirme - Rate limit (@nestjs/throttler): global 120/dk, login 10/dk (brute-force) - Global exception filter (tek bicim hata, 500'de stack sizmaz) - Maliyet cekirdegi testleri (vitest, 8/8): birim cevrimi + Latte §4 + Ikram kenar durumu - EINVOICE_PROVIDER env notu Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
M7: PWA / offline-first (kismi) - vite-plugin-pwa: installable, service worker, app shell cache - API GET'leri NetworkFirst runtime cache (offline'da son veri gorunur) - Cevrimdisi bant gostergesi (useOnline) - NOT: offline siparis-yazma kuyrugu (Dexie) ayrica ele alinacak (mutasyon idempotency) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
M9: e-Adisyon & OKC iskeleti - EInvoiceProvider/OkcProvider arayuzleri + Mock + entegrator yer tutucu - Adisyon kapaninca idempotent iletim (orderId unique), kuyruk 60sn'de yeniden dener - Durum takibi (BEKLIYOR/ILETILDI/HATA) + tekrar dene; Raporlar > e-Adisyon sekmesi Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
M8: Raporlar & dashboard (M6 gelir/COGS dahil) - Dashboard: KPI'lar, saatlik satis (bar), odeme dagilimi (pie), gunun ozeti icgoruler - Urun karliligi: urun bazli adet/ciro/maliyet/kar/marj + Ciro/COGS/Brut Kar ozeti - Nakit akisi: gelir (Ikram haric) vs gider/COGS, net kar/marj, gider CRUD - Malzeme sarfi: satislardan teorik tuketim + maliyet - Tarih araligi (hafta/ay/yil), CSV export Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
README: M4/M5 tamamlandi olarak isaretle Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
M5: Siparis & masa haritasi + realtime - Masa CRUD + surukle-birak konumlandirma, duzenle modu - Adisyon: kalem ekle/adet/sil (birimMaliyet snapshot ekleme aninda), tasima, iptal - Parcali odeme (Kalan/½/⅓/¼, Nakit/Kart/Ikram), bakiye 0'da otomatik kapanis - Socket.io gateway: kafe odasina anlik yayin (tables/orders changed) - 3 gorunum: masa haritasi, aktif, kapatilan Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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 - 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: - 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
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.
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.
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.
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
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).
Grup sürüşü ekle: 2'li/çoklu, realtime + pil koruma modu Şu ana kadar rides tamamen bireyseldi; arkadaşlığın sürüşle tek ilgisi rota paylaşımıydı. Artık arkadaşlarını canlı bir sürüşe davet edebilirsin — herkesin GPS izi kendi hesabında ayrı kaydediliyor (mimari değişmedi), ama sürüş sırasında birbirinizin anlık konumunu haritada görüyorsunuz. - migrations/006_ride_sessions.sql: ride_sessions + ride_session_participants + RLS, profiles.is_premium (varsayılan false). 2'den fazla katılımcı şimdilik ücretsiz — kullanıcı kararıyla premium kapısı henüz uygulanmadı, önce özellik tam inşa edildi. Kaç oturumun hangi modda / kaç kişiyle geçtiği bu iki tablodan direkt sorgulanabilir. - hooks/useRideSessionChannel.ts: Supabase Realtime Broadcast ile DB'ye yazmadan (ephemeral) canlı konum yayını. realtime modda ~2.5sn, battery_saver'da ~60sn'de bir yayın (GPS örnekleme sıklığı değişmez, sadece paylaşım sıklığı). - hooks/useRideSessions.ts: oturum kur/davet et/katıl/reddet/ayrıl/sonlandır. - components/LiveRideModal.tsx: opsiyonel session prop — diğer katılımcıları renkli marker olarak gösterir, mod/katılımcı rozeti, kurucu sonlandırınca banner. Kaydet/Sil ile bitirince otomatik oturumdan ayrılır. lib/liveRide.tsx → startGroupRide(). - rides.tsx: "grup sürüşü kur" düğmesi (arkadaş + mod seç), bekleyen davetler banner'ı (Katıl/Reddet), Sürüş sekmesinde davet rozeti. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DND62cDv8gZq6jCMDkFS8K
Faz 4 tamamla: gider tarihi, rota noktası notu, sürüşü rota olarak kaydet Son bir şema taraması üç eksik daha buldu: - expenses.occurred_at hiç ayarlanamıyordu (hep now()). ExpenseForm'a DateTimePicker eklendi. - route_points.note şemada vardı, hiç yazılıp okunmuyordu. Harita ekranındaki nokta düzenleme modalı artık tip seçimi + opsiyonel not alanını birlikte, ayrı bir "Kaydet" butonuyla uyguluyor (önceden tipe dokununca direkt kapanıyordu, not girme imkanı yoktu). Not, marker callout'larında gösteriliyor. - routes.source='freeroam' hiç yazılmıyordu — GPS'li bir sürüşü rotaya çevirecek yol yoktu. hooks/useRoutes.ts → useSaveRideAsRoute(): izi en fazla 30 noktaya indirger (ham iz binlerce nokta olup haritada onlarca Marker render ederek performans sorunu yaratabilirdi), yeni rota + rota noktası yazar. rides.tsx'te GPS izi olan sürüş kartlarına "Rota yap" butonu + ad/açıklama/görünürlük formu eklendi. Faz 4'te bilinen tek eksik: gerçek push bildirimi (Firebase + Supabase CLI kimlik bilgisi gerektiriyor, bu ortamda yok). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DND62cDv8gZq6jCMDkFS8K
feat: proje detayinda "One Cikan Ozellikler" bolumu - Project.highlights (Json?) — proje basina zengin ozellik vitrini ([{title, description, icon}]); admin formunda JSON alani - Detay sayfasinda Problem/Cozum sonrasi, ikonlu cyan-vurgulu kartlar - 8 ikon secenegi: automation/data/security/speed/calendar/code/ai/template - Highlight title/description DeepL ile cevriliyor (localizeProject) - Ornek highlights: Diyet Takip (sablon ogun, JWT, randevu) + canberktamyigit (GitHub otomasyonu, TR/EN ceviri, OG image) - projectDetail.highlights dict (TR/EN) Not: highlights kolonu Supabase'de gerekir (ALTER TABLE "Project" ADD COLUMN IF NOT EXISTS "highlights" jsonb;). Kolon yoksa getProjectBySlug fallback'e duser; eklenince admin'den veya SQL ile doldurulur. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CFjkEEa1o49pdxPDM4CqSp
feat: hero gorsel alani + net hero metni + nötr veri gorsellestime - Hero sag sutuna admin'den yonetilen urun ekran goruntusu alani: SiteConfig.heroImageUrl + ayarlar formunda alan. URL girilince tarayici cercevesinde gercek gorsel, bossa mevcut tasarim gorunur. (Kolon yoksa getSiteConfig fallback'e duser, site kirilmaz.) - hero basligi sadelestirildi: karisik "istatistik altyapim" ifadesi kaldirildi; kimlik badge'de, somut urun alt baslikta - DataViz kalori/BMI'dan aritildi -> notr ornek veri seti gorsellestime (regresyon + dagilim, "gercek kisi/kullanici verisi icermez" etiketi). Diyet Takip detay sayfasindan kaldirildi; sadece About'ta skill vitrini Not: hero gorseli icin SiteConfig'e heroImageUrl kolonu gerekir (Supabase: ALTER TABLE "SiteConfig" ADD COLUMN IF NOT EXISTS "heroImageUrl" text;). Kolon olmadan da site calisir, alan gizli kalir. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CFjkEEa1o49pdxPDM4CqSp
perf+feat: ceviri onbellegi + hero revizyonu + header markasi - i18n: translateMany artik unstable_cache ile sarmali (Next veri onbellegi). EN sayfalar ilk yuklemeden sonra DB/DeepL'e gitmeden gelir; DEEPL_API_KEY yoksa hic is yapmadan kaynak metne duser (no-op) - hero: kimlik + farklilastirici (Istatistik × CS) + canli urun odakli yeni kopya; birincil CTA artik flagship canli urun detayina gidiyor - header markasi: "C / Canberk.dev" -> "CT / Canberk Tamyigit" (mobil nav ve footer tagline dahil) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CFjkEEa1o49pdxPDM4CqSp
feat: guvenlik sertlestirmesi — header'lar, CSP, rate-limit, honeypot - next.config: HSTS, X-Frame-Options DENY, X-Content-Type-Options nosniff, Referrer-Policy, Permissions-Policy + poweredByHeader kapatildi - middleware: per-request nonce ile enforcing Content-Security-Policy (strict-dynamic; script/style/img/connect/frame-src allowlist'leri Cloudinary, umami, demo-video iframe icin ayarlandi) - layout: umami Script'ine nonce gecirildi - Upstash Redis rate-limit: admin login (5/10dk) + iletisim formu (3/10dk) — env yoksa guvenle devre disi (no-op) - iletisim formuna honeypot alani (bot spam'i sessizce yok sayar) - iletisim bildirimi email'inde HTML-escape (injection'a karsi) - .env.example: ADMIN_PASSWORD_HASH tutarsizligi duzeltildi (kod bcrypt hash okuyor, ornek duz sifre yaziyordu) + Upstash degiskenleri eklendi Test notu: CSP enforcing modda — deploy sonrasi tarayici konsolunda CSP ihlali var mi kontrol edilmeli (umami, Cloudinary upload, iframe). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CFjkEEa1o49pdxPDM4CqSp
feat: tum-site otomatik TR/EN ceviri (DeepL + DB onbellek) - Cookie tabanli locale + header'da TR/EN dil switcher - Statik UI metinleri messages/tr.json + en.json sozluklerinde (home, about, nav, footer, proje karti/detay, spotlight) - Dinamik DB icerigi (projeler, devlog, timeline) DeepL ile cevrilir ve Translation tablosunda cache'lenir; sonradan eklenen icerik ilk EN goruntulemede otomatik cevrilir - DEEPL_API_KEY yoksa EN modu kaynak (TR) metne guvenle duser - home, about ve proje detayi (Diyet Takip dahil) tam EN - public-shell async; <html lang> dinamik - canberktamyigit projesine dogru "otomatik TR/EN ceviri" feature'i geri eklendi; tamamlanan i18n roadmap maddesi guncellendi - .env.example + README i18n notlari Not: yeni semaya gecmek icin `npm run db:push`, icerik icin `npm run db:seed`. EN cevirisi icin DEEPL_API_KEY gerekir. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CFjkEEa1o49pdxPDM4CqSp
Mixer fix: slider snap-back bug + preset filter Slider 0'a düşüp geri çıkma animasyonu fix'i + preset bottom sheet'te Özel/ Hazır toggle (game kanalında 317 hazır + 5 özel ayrımı yapılabilsin). Device write endpoint'i bu Sonar versiyonunda hala kapalı (Allow:GET). Server (PC): - sonar_api.py: set_volume/set_mute/set_config artık PUT response'unu değil full get_state()'i broadcast eder. Önceki kod PUT'un volume-only yanıtını kullanıyordu; bu telefonda preset/device/configs alanlarını sıfırlıyordu (tüm sliders'ın bir an "0'a snap" görünmesinin asıl nedeni) - _refresh_and_notify() helper'ı Android: - SonarChannelStrip: pendingValue pattern * Drag bitince localValue → pendingValue olarak set edilir * displayValue = isDragging ? localValue : pendingValue ?? volume * LaunchedEffect(volume): server pending'e yaklaşınca pendingValue temizlenir * Diğer kanalın server update'i bu kanalın slider'ını artık bozmaz - PresetPickerSheet: Özel/Hazır toggle (isPreset bayrağı) * Özel = kullanıcı kayıtları (default sekme) * Hazır = SteelSeries built-in preset'leri * Boş tab için empty state
Sonar mixer: preset switch + device display Mixer'a kanal başına EQ preset değiştirme + kanalın çıkış cihazı adı eklendi. Cihaz değiştirme (PUT) endpoint'i bu Sonar versiyonunda kapalı (Allow: GET); şimdilik read-only gösteriliyor. Preset switch çalışıyor. Sonar API: - PUT /configs/{configId}/select (200 OK) -> preset switch - GET /configs/selected -> her kanalda aktif preset - GET /classicRedirections -> kanal -> deviceId - GET /audioDevices -> deviceId -> friendlyName Server (PC): - SonarService.get_state() artik selectedConfig/configs/deviceId/deviceName de iceriyor (per channel) - SonarService.set_config(configId) eklendi - handlers: SonarSelectConfig komutu + TYPE_ALIASES Android: - SonarConfig modeli, SonarChannelState alanlari (selectedConfigId/Name, configs, deviceId, deviceName) - Command.SonarSelectConfig variant - Mixer kanal seritlerinde: - Baslik altinda tiklanabilir preset chip ('hyperx music' / 'Custom' vb.) - Slider altinda cihaz adi (read-only) - Preset secimi icin ModalBottomSheet (LazyColumn, 300+ preset destekli)
Add YouTube 3rd-screen feature PC seçici/master, telefon görüntü için 3. ekran (sessiz), ses PC kulaklığından çıkar. İki oynatıcı 500ms tick + drift-threshold seekTo ile senkron. Server (PC): - youtube_api.py: YouTube Data API v3 search + duration fetch - youtube_player.py: subprocess wrapper (pywebview MAIN thread kısıtı) - _youtube_player_child.py: görünmez offscreen webview + stdin/stdout IPC - assets/youtube_player.html: IFrame Player + JS bridge - 3 yeni handler (SearchYouTube/YouTubePlay/YouTubeControl), TYPE_ALIASES - config v3 migration, server.spec pywebview hidden imports + assets - ui.py: yeni YouTube sekmesi (arama + tablo + Telefonda Oynat) + Status'a API key formu Android: - YouTubePayload (play + sync) + Command.kt 3 yeni variant - WebSocketManager: youtubePlay + youtubeSync StateFlow'lari - ControlDeckScreen: 6. TV sekmesi, WebView slave player, drift>0.3s seekTo, beyondViewportPageCount=5 (sekme geçişinde WebView reset olmasin) - assets/youtube_player.html (sessiz YouTube IFrame)
Surus sekmesindeki bozuk Turkce karakterleri duzelt Onceki refactor sirasinda PowerShell Set-Content -Encoding utf8 dosyaya BOM ekleyip karakterleri yeniden kodlayinca mojibake olusmustu (u -> mojibake vb.). Mojibake tersine cevrilip dosya BOM'suz UTF-8 olarak yeniden yazildi.
Adim C+D: rotadan surus baslatma + garaj/gider duzenle-sil Adim C - planli surus = free roam: - LiveRideModal rides.tsx'ten components/'e tasindi, initialRoute prop'u alir: planli rotanin geometry'sini kesikli cizgi gosterir, navigasyon deep-link butonu ekler, kaydederken route_id otomatik baglar. - lib/liveRide.tsx: LiveRideProvider + useLiveRideUI (startFreeRoam / startWithRoute / close); modal kok layout'ta tek instance, her yerden acilir. - Rotalarim her karta "Baslat" -> startWithRoute(item). Adim D - garaj & gider duzenleme/silme: - useUpdateMotorcycle / useUpdateExpense (RLS owner update, politika degismez). - Garaj ve Gider formlari ekle/duzenle modunu paylasir (editing prop). - Kartlarda gorunur "Duzenle" + "Sil" (onayli) butonlari.
Faz 2: canli surus kaydi + sema saglamlastirma (is_public -> visibility) - Canli surus: useLiveRide (GPS izi, haversine mesafe, baslat/duraklat/bitir), rides ekraninda tam ekran kayit modali; track_geometry rides'a yazilir. - Migration 001: routes.is_public -> visibility (private/friends/public), source/was_ridden/start_point kolonlari, friendships tablosu + RLS. - Kod: Route tipi + useRoutes visibility'ye tasindi; rota formuna gorunurluk secici (Sadece ben / Arkadaslar / Herkese acik), varsayilan private. - schema.sql guncel hale hizalandi. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Faz 1 tamam: rota planlama, gider ve surus karti - useRoutes + harita ile nokta koyma (marker/Polyline), routes+route_points kaydi - Rotalarim ekrani (liste + basili-tut sil) - useExpenses + Gider ekrani (kategori/tutar/litre/motor/surus, toplam bari) - useRides + Surus ekrani (tarih/mesafe/motor/rota), gider-surus bagi - Tab bar 6 sekme (Surus + Gider eklendi) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Faz 0 + Faz 1 (auth + garaj): Expo SDK 54 iskelet, Supabase entegrasyonu - Expo iskelet (kök app/ yapısı), Supabase client, react-query - Auth: kayıt/giriş/çıkış, oturum kalıcılığı, yönlendirme guard - Garaj: motor ekle/listele/sil (react-query, RLS uyumlu) - useThemeColors ile açık/koyu tema + klavye/placeholder düzeltmeleri - types/db.ts (schema.sql karşılığı), demo şablon temizliği Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat: GitHub link ile tek tikla proje olusturma - Yeni: createProjectFromGitHub action — GitHub API'den repo metadatasi, README ilk paragrafi, languages ve topics cekip otomatik proje olusturur - Yeni: CreateFromGitHubForm — admin/projects sayfasi en ustte URL input'u ile hizli olusturma - Manuel "tam form" artik collapsible (details/summary) — varsayilan kapali Otomatik doldurulan alanlar: - title, slug (slugify), shortDescription, longDescription - githubUrl, liveUrl (repo.homepage) - stack (languages), tags (topics) - architecture (ana dil + diller) - status=IN_PROGRESS, contentStatus=PUBLISHED, published=true Placeholder alanlar (kullanici sonra duzenler): - problem, solution, features, challenges, learnings, roadmap Bonus: yeni projeler artik default'ta Yayinda + PUBLISHED — public /projects sayfasinda anlik gozukur. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Initial commit: EdgeDeck2 monorepo Desktop (Python/Tkinter WebSocket sunucusu) ve Android (Kotlin/Compose) istemcisini iki klasor halinde birlestir. Hicbir build artifact'i veya local secret commit edilmiyor. - desktop/: server.py, edgedeck/ paket, build.ps1, server.spec, requirements.txt - android/: Jetpack Compose istemcisi (Spotify kitaplik, masaustu app kisayollari, AMOLED tema, USB+WiFi bag.lanti modlari) - Root README + .gitignore
feat: devlog'lari projelere ozellikle yeniden esleme + manuel atama - Yeni: "Projelerle yeniden esle" butonu — orphan commit'leri (relatedProject=null) commitUrl'deki repo adindan project.githubUrl'e otomatik eslestirir - Yeni: Her commit satirinda inline proje dropdown'u — auto-submit ile tek tikla atama - Yeni: "Proje yok" filtresi aktifken bulk reassign formu — sayfadaki tumunu sec ile bir projeye atama - Server: rematchOrphanDevlogs, reassignDevlogProject, bulkReassignDevlogs actionlari Akis: projeye githubUrl ekle -> rematch tikla -> orphan'lar atanir. Eslesmeyenler icin dropdown veya bulk form ile manuel atama. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
feat: devlog yonetimi github commits stiline kavusturuldu Admin sayfasi: - Tarihe gore gruplandirilmis kompakt satirlar (GitHub commits gibi) - Kategori renkli nokta + SHA + baslik + proje rozeti + saat - Pagination: ilk 50 commit, "Daha fazla yukle" butonu - Proje seciliyken kategori bazli batch yayinla/gizle butonlari - Manuel gunluk formu collapsible (default kapali) - Proje filtresi DB seviyesinde (client-side filter degil) - version (v1, v2) gosterimi UI'dan kaldirildi Public sayfa: - Tarihe gore gruplandirilmis liste - Sadece baslik + ilgili proje adi + icerik - Link/external link kaldirildi - version badge kaldirildi Yeni server fonksiyonlari: - getDevlogs: projectFilter + take parametreleri - getDevlogCounts: sekme sayilari icin groupBy - getDevlogProjectStats: proje icin kategori bazli istatistik - bulkToggleDevlogs action: proje + kategori bazli toplu yayinla/gizle Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
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
feat: enhance tracking and appointment details with date handling and UI style updates
feat: enhance DanisanDetay component with form handling and editing capabilities
feat: devlog label sistemi, versiyonlama, proje filtresi, rename - Admin devlog sayfasina proje bazli filtre sekmeleri eklendi - Her proje renkli badge ile etiketlendi (emerald=Diyet Takip, cyan=canberktamyigit) - GitHub commitler v1,v2,v3... sirasiyla otomatik numaralandiriliyor - Yeniden Numaralandir butonu mevcut commit versiyonlarini duzeltir - canberk-dev -> canberktamyigit.com.tr olarak guncellendi Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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.
feat: github commitler taslak gelir, tek tikla yayinla/gizle - Sync ile gelen tum commitler DRAFT olarak eklenir (published: false) - Devlog admin kartinda Yayinla/Gizle toggle butonu eklendi - Taslak kartlar soluk gozukur, sari Taslak badge gosterir Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat: istatistik & bilgisayar bilimleri arka planı entegrasyonu - About sayfası yeniden yazıldı: İstatistik×Yazılım kesişimi ana tez - Stack sayfası: Veri & İstatistik kategorisi öne çıkarıldı (lisans vurgusu) - Fallback tech: R, pandas, numpy, scipy, istatistiksel yöntemler eklendi - statusLabel: Data & Statistics → Veri & İstatistik - Homepage buildScopes: Veri & İstatistik eklendi (5 kart) - CV: Eğitim bölümü + istatistik odaklı özet eklendi Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat: gerçek projeler, admin mesajlar sayfası - Sahte örnek projeler kaldırıldı (ClinicOps, DeployPulse) - Diyet Takip: Flask+React full-stack SaaS, tam detay eklendi - Canberk.dev: portfolyo platform detayları eklendi - Gerçek devlog ve timeline verileri güncellendi - Admin: /internal/messages sayfası — okundu/sil işlemleri - Admin nav: Mesajlar linki + okunmamış sayı rozeti - AdminShell async server component olarak güncellendi Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat: kapsamlı portfolio güncellemesi Admin gizleme, mobile nav, i18n (TR/EN), dinamik OG görseli, RSS feed, CV sayfası, Ctrl+K arama, GitHub aktivitesi, müsaitlik rozeti + admin toggle, proje devlog görselleştirme, demo video embed, proje önizleme butonu, iletişim email bildirimi (Resend), Umami analytics desteği, demoVideoUrl alanı. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat: implement modular package system with database schema updates and admin routing</div>
feat: implement core backend API routes and administrative management interfaces for users, clinics, and packages
feat: initialize full-stack clinic management system with dashboard, appointment scheduling, and patient tracking modules
feat: implement client detail, addition, and appointment scheduling components with calendar integration
feat: implement admin API routes for user and package management with role-based access control
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
M4: Menu & QR & Recete paneli - Menu modulu: kategori/urun CRUD, urun ici recete editoru (canli maliyet/kar/marj/food-cost) - Public QR menu (/m/:slug, auth yok), QR kod uretimi, tema/baslik ayarlari - Marj rozeti + "recete yok" gostergesi; fiyat/recete degisince aninda yansir Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Deploy hedefini Railway'den Render'a tasi - render.yaml (Blueprint) eklendi: Docker build + migrate/seed/start - railway.json kaldirildi - DEPLOY.md + README Render'a gore guncellendi Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.
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.
Faz 4: gider konumu (GPS) ve profil avatarı ekle - hooks/useExpenses.ts: NewExpense'e latitude/longitude eklendi (şemada vardı, hiç yazılmıyordu). expenses.tsx formuna "konumumu kullan" butonu: GPS koordinatını kaydediyor, konum adı boşsa reverse-geocode ile otomatik dolduruyor. Liste kartında koordinat varsa dokununca harita uygulamasını açan bir konum ikonu var. - hooks/useProfile.ts: useUploadAvatar() — motor fotoğrafı akışıyla aynı desen (avatars bucket, ${userId}/avatar.ext). Profil ekranında gerçek avatar + kamera rozetiyle değiştirme; app/friends.tsx'teki tüm kullanıcı satırları da artık gerçek avatarı gösteriyor. migrations/005_avatars_storage.sql + schema.sql: avatars bucket + RLS. Gerçek push bildirimi hâlâ Firebase/Supabase CLI kimlik bilgisi bekliyor, bu ortamda tamamlanamıyor (bkz. CLAUDE.md Faz 3/4 notları). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DND62cDv8gZq6jCMDkFS8K
Uygulama geneline ikon ve dokunma/canlılık animasyonları ekle Metin-ağırlıklı arayüzü @expo/vector-icons (Ionicons/MaterialCommunityIcons, Expo'nun kendi bağımlılığı) ile ikonlandırdı; tüm ekranlarda tutarlı bir his için birkaç yeniden kullanılabilir animasyon parçası eklendi. - components/AnimatedPressable.tsx (yeni): dokununca hafif küçülüp geri zıplayan Pressable sarmalayıcı; tab bar hariç hemen her buton/kart/chip'e uygulandı (native driver). - Tab bar ikonları (harita/rota/sürüş/garaj/gider/profil). - Her ekranda ekle/düzenle/sil/kaydet/vazgeç butonları + motor/rota/ kategori/görünürlük chip'leri artık ikonlu; boş durumlar da ikonlu. - LiveRideModal: kayıt sürerken HUD'da nabız gibi yanıp sönen kırmızı nokta. - StatsSummary: özet çubukları açılışta 0'dan hedef yüzdeye animasyonlu doluyor. - Giriş/kayıt ekranlarına motor ikonu + input ikonları eklendi. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DND62cDv8gZq6jCMDkFS8K
Faz 3'ü tamamlandı olarak işaretle, Faz 4 fikir listesi ekle Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DND62cDv8gZq6jCMDkFS8K
Rota ve sürüş kayıtlarına düzenleme (update) ekle Garaj ve Gider'de düzenleme vardı, Rotalar ve Sürüşler'de sadece ekle/sil vardı — kapatıldı. - hooks/useRoutes.ts: useUpdateRoute() (ad/açıklama/görünürlük). Rota detayında (route/[id].tsx) sahibiyse "Düzenle" butonu + modal. - hooks/useRides.ts: useUpdateRide() (motor/rota/tarih/mesafe; track_geometry hiç düzenlenmez). rides.tsx'te kart artık dokununca düzenleme formunu dolu açıyor (basılı tutma hâlâ sil); rota sonradan bağlanırsa ve kayıtta zaten gerçek GPS izi varsa was_ridden anti-cheat kontrolü burada da uygulanıyor. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DND62cDv8gZq6jCMDkFS8K
Faz 3: motor fotoğrafı, tahmini süre/yakıt, POI işaretleme, istek rozeti - Motor fotoğrafı: expo-image-picker + Supabase Storage (motorcycle-photos bucket, owner-only yazma RLS). Garaj listesinde thumbnail, düzenleme formunda fotoğraf seç/değiştir + depo hacmi alanı (fuel_capacity_l tipte vardı, formda yoktu). - routes.estimated_duration_min artık kaydederken 50 km/h varsayımıyla otomatik hesaplanıp yazılıyor, rota detayında gösteriliyor. - Harita ekranında marker'a dokununca nokta tipi (waypoint/poi/fuel) seçilebiliyor + noktayı silme; tipe göre pin rengi değişiyor (rota detayında da aynı renkler). - Motor avg_consumption + fuel_capacity_l ikisi de girilmişse Garaj'da tahmini menzil; rota detayında motor seçilince tahmini yakıt (L) ve o motorun geçmiş yakıt giderlerinden çıkarılan ortalama fiyatla tahmini maliyet gösteriliyor. - Arkadaşlık isteği bildirimi: gerçek OS push'u Firebase/FCM (Android token) + Supabase Edge Function deploy'u gerektiriyor, bu ortamda yok — onun yerine Profil sekmesinde bekleyen istek sayısı rozeti eklendi (uygulama açıkken anında görülür). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DND62cDv8gZq6jCMDkFS8K
Faz 2'yi tamamlandı olarak işaretle, Faz 3 fikir listesi ekle migrations/003_nearby_routes.sql Supabase'de çalıştırıldı. Bilinen Faz 2 maddeleri bitti; kalan tek adım yeni APK build'i ile uçtan uca test. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DND62cDv8gZq6jCMDkFS8K
was_ridden'ı GPS kanıtına bağla, yakındaki rotalar özelliğini ekle - hooks/useRides.ts: was_ridden artık sadece gerçek kanıtla true oluyor — sürüş kaydında track_geometry (canlı GPS izinden, en az 5 nokta) olmalı, izin başlangıç/bitişi rotanınkine ≤2 km yakın olmalı, kaydedilen mesafe rota mesafesinin en az yarısı olmalı. Elle eklenen sürüşler (hiç GPS izi yok) hiçbir zaman bir rotayı "sürüldü" işaretleyemez. Rozet Rotalarım listesinde ve rota detayında gösteriliyor. - routes.start_point (PostGIS) hiç yazılıp okunmuyordu; useAddRoute artık ilk noktadan yazıyor. migrations/003_nearby_routes.sql mevcut rotalar için geriye dönük dolduruyor + nearby_routes(lat,lng,radius_km) RPC'sini ekliyor (ST_DWithin/ST_Distance, RLS'e tabi). useNearbyRoutes() + Rotalarım > Keşfet ekranına "Tümü / Yakınımda" alt-sekmesi eklendi. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DND62cDv8gZq6jCMDkFS8K
Rotalarım ekranına Keşfet sekmesi ekle (public/friends rotaları göster) routes.visibility RLS'de tamamdı ama başkasının paylaştığı rotayı görecek hiçbir yer yoktu. useDiscoverRoutes() kendi rotaların hariç diğer kullanıcıların (RLS'in izin verdiği public/friends) rotalarını sahip profiliyle birlikte getiriyor; routes.tsx'e "Rotalarım / Keşfet" toggle'ı eklendi. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DND62cDv8gZq6jCMDkFS8K
Arkadaşlık sistemini uygulamaya bağla, friendships RLS hatasını düzelt Şemada friendships tablosu + RLS hazırdı ama hiç UI/hook yoktu; rota kaydetmedeki 'friends' görünürlük seçeneği de bu yüzden fiilen kullanılamaz durumdaydı. - hooks/useProfile.ts: kendi profilini okuma + kullanıcı adı güncelleme. - hooks/useFriendships.ts: arkadaş listesi + gelen/giden istekler (karşı taraf profilleri ayrı sorguyla çekilip client'ta eşleniyor, çünkü friendships FK'si profiles'a değil auth.users'a gidiyor). - app/friends.tsx: kullanıcı adına göre arama, istek gönder/kabul/reddet/ iptal/arkadaşlıktan çıkar. Profil ekranına kullanıcı adı alanı ve "Arkadaşlarım" bağlantısı eklendi. - migrations/002_friendships_rls_fix.sql + schema.sql: eski friendships_participant_all politikasının UPDATE with-check'i sadece isteği gönderen tarafa izin veriyordu, alıcı kabul edemiyordu. Dört ayrı politikaya bölündü (select/insert/update/delete). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DND62cDv8gZq6jCMDkFS8K
Faz 2 kalan maddeleri tamamla: rota detay ekranı, tarih seçici, istatistik özeti - app/route/[id].tsx + useRoute(id): rota kaydını haritada (marker+polyline, fitToCoordinates) ve meta bilgilerle gösteren detay ekranı; Rotalarım listesinde karta dokununca açılıyor. - rides.tsx: sürüş eklerken YYYY-AA-GG metin girişi yerine @react-native-community/datetimepicker (Android modal / iOS inline). - components/StatsSummary.tsx: motora göre toplam km ve kategoriye göre gider dağılımını oransal çubuklarla özetleyen kart; Profil ekranına eklendi. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DND62cDv8gZq6jCMDkFS8K
feat: sayfa gecislerinde ust ilerleme cubugu - Tepede ince, animasyonlu progress bar (YouTube/GitHub tarzi) - Ic link tiklamasinda baslar, pathname degisince tamamlanir - Bagimlilik yok, harici script yok (CSP-uyumlu); cyan tema ile uyumlu - Takilmaya karsi 10sn guvenlik zaman asimi Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CFjkEEa1o49pdxPDM4CqSp
feat: kalan sayfalari da TR/EN cevirilebilir yap - journey, stack, contact, devlog sayfalari artik dict kullaniyor - journey timeline + devlog icerigi DeepL ile lokalize (localizeTimeline/ localizeDevlogs cagrildi) - statusLabel locale-aware (proje durumu + devlog kategorisi EN/TR); proje kartlari, flagship kart ve detay sayfasina locale gecirildi - iletisim formu (isim/email/mesaj/gonder + toast) cevirildi - Ctrl+K arama paleti (placeholder, sonuc basliklari) cevirildi - devlog tarih formati locale-aware (en-US / tr-TR) - messages: journey/stack/contact/contactForm/devlog/search anahtarlari Artik tum public arayuz TR/EN. DB icerigi (proje/devlog/timeline metinleri) icin DEEPL_API_KEY gerekli; yoksa EN modunda kaynak (TR) metne duser. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CFjkEEa1o49pdxPDM4CqSp
Add SteelSeries Sonar mixer panel (volume + mute) Telefondan PC'nin Sonar mixer'ını kontrol et: 5 kanal (Game/Chat/Mic/Media/ Aux) + Master dikey slider'lar, mute butonları, gerçek zamanlı state senkron. Sonar API: - Resmi API yok; GG'nin Electron UI'sının kullandığı belgesiz HTTP endpoint'leri sarıldı (coreProps.json -> subApps -> sonar webServerAddress) - GET /mode, /volumeSettings/{mode}, /audioDevices, /configs - PUT /volumeSettings/{mode}/{channel}/Volume/{0..1} - PUT /volumeSettings/{mode}/{channel}/Mute/{true|false} Server (PC): - sonar_api.py: SonarService — discovery + GET/PUT + 2 sn polling thread, state degisince broadcast hook - handlers.py: SonarVolume / SonarMute / SonarRefresh + TYPE_ALIASES - server.py: SonarService injection, on_state_change -> broadcast, initial payload to new clients - server.spec: sonar_api.py hidden import Android: - SonarState (mode + master + 5 channels) modeli - Command.kt 3 yeni variant - WebSocketManager sonarState StateFlow + handler dali - ControlDeckScreen 7. "Mixer" sekmesi: master + 5 dikey kanal serit (rotate -90 ile yatay slider, accent renkli baslik, mute toggle) - beyondViewportPageCount = 6 (TV + Mixer WebView/state korunsun) - Mini player Mixer sekmesinde gizli
Edge Runtime üzerinde next/og ile dinamik OpenGraph görseli üretimi ve devlog akışı için /feed.xml RSS endpoint'i oluşturuldu.
Projeler, devlog, timeline, teknoloji ve medya yönetimi için tam CRUD akışı oluşturuldu. Server Actions ile form validasyonu ve revalidatePath entegrasyonu yapıldı.
feat: github sync kullanici adi bazli, private repo destegi - Proje githubUrl zorunlulugu kaldirildi - /user/repos ile token varsa private dahil tum repolar cekiliyor - Repo adi projenin githubUrl ile eslesirse otomatik baglanir - Eslesmezse devlog proje bagı olmadan yine de eklenir - NEXT_PUBLIC_GITHUB_USERNAME env degiskeni kullaniliyor Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat: proje düzenleme + GitHub commit otomatik devlog içe aktarma - Proje listesine Düzenle butonu eklendi, /internal/projects/[id] edit sayfası - server/queries.ts: getProject(id) eklendi - Devlog şemasına commitSha (unique) ve commitUrl alanları eklendi - server/github-sync.ts: GitHub API commit sync mantığı - server/actions.ts: syncGitHubDevlogs server action - Devlog admin paneline GitHub İçe Aktar butonu eklendi Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat: production auth & gerçek proje verileri - bcryptjs kaldırıldı, ADMIN_PASSWORD env ile plain text auth - Tüm fallback default secret'lar kaldırıldı (JWT_SECRET zorunlu) - Seed: sahte projeler silindi, gerçek projeler (Diyet Takip, Canberk.dev) eklendi Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>