From 9b91b3c8472597737a044737dd3f6a23f0001461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Fri, 7 Aug 2026 23:14:20 +0300 Subject: [PATCH] feat: add utility scripts to automate internship journal review, approval, and summary generation processes --- scratch/analyze_repos.php | 48 ++ scratch/approval_report.json | 838 +++++++++++++++++++++++++++++ scratch/check_this_week.php | 80 +++ scratch/gen_summaries.php | 31 ++ scratch/intern_code_summaries.json | 102 ++++ scratch/output.txt | 110 ++++ scratch/repo_analysis_data.json | 102 ++++ scratch/run_approval.php | 73 +++ scratch/view_report.php | 39 ++ scratch/write_out.php | 12 + 10 files changed, 1435 insertions(+) create mode 100644 scratch/analyze_repos.php create mode 100644 scratch/approval_report.json create mode 100644 scratch/check_this_week.php create mode 100644 scratch/gen_summaries.php create mode 100644 scratch/intern_code_summaries.json create mode 100644 scratch/output.txt create mode 100644 scratch/repo_analysis_data.json create mode 100644 scratch/run_approval.php create mode 100644 scratch/view_report.php create mode 100644 scratch/write_out.php diff --git a/scratch/analyze_repos.php b/scratch/analyze_repos.php new file mode 100644 index 0000000..98f99d2 --- /dev/null +++ b/scratch/analyze_repos.php @@ -0,0 +1,48 @@ +make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); + +$interns = App\Models\CareerApplication::where('type', 'internship')->where('status', 'accepted')->with(['journalEntries' => function($q) { + $q->orderBy('day_number', 'asc'); +}])->get(); + +$analysis = []; + +foreach ($interns as $intern) { + if ($intern->journalEntries->count() == 0) continue; + + $repoUrl = $intern->github_repo; + $allContent = ""; + $commits = []; + + foreach ($intern->journalEntries as $entry) { + $allContent .= "\n--- DAY {$entry->day_number} ({$entry->date}) ---\n" . $entry->content . "\n"; + + // Extract commits from content if available + if (preg_match_all('/\[[0-9:]+\]\s*\[([a-f0-9]+)\]\s*(.+)/i', $entry->content, $matches, PREG_SET_ORDER)) { + foreach ($matches as $m) { + $commits[] = [ + 'hash' => $m[1], + 'msg' => $m[2], + 'day' => $entry->day_number + ]; + } + } + } + + $analysis[$intern->name] = [ + 'id' => $intern->id, + 'email' => $intern->email, + 'repo' => $repoUrl, + 'github_username' => $intern->github_username, + 'total_entries' => $intern->journalEntries->count(), + 'commits_count' => count($commits), + 'commits_sample' => array_slice($commits, -10), + 'full_text' => $allContent + ]; +} + +file_put_contents(__DIR__ . '/repo_analysis_data.json', json_encode($analysis, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); +echo "Saved analysis data for " . count($analysis) . " interns.\n"; diff --git a/scratch/approval_report.json b/scratch/approval_report.json new file mode 100644 index 0000000..bc69a6c --- /dev/null +++ b/scratch/approval_report.json @@ -0,0 +1,838 @@ +{ + "approved_total": 58, + "interns": [ + { + "id": 18, + "name": "Emre Satıl", + "email": "emresatil72@gmail.com", + "github": "https:\/\/github.com\/Emresatil\/Recycle-Rush-VR\/commits\/feature\/save-manager-and-haptics", + "total_entries": 27, + "filled_entries": 27, + "already_approved": 20, + "newly_approved": 7, + "on_time_count": 24, + "retroactive_count": 3, + "on_time_days": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 13, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27 + ], + "retroactive_days": [ + 11, + 12, + 14 + ], + "retroactive_details": [ + { + "day": 11, + "date": "2026-07-16", + "content_snippet": "11. Gün (16.07.2026) Çalışma RaporuBugün stajımda projemizin" + }, + { + "day": 12, + "date": "2026-07-17", + "content_snippet": "12. Gün (17.07.2026) Çalışma RaporuBugün oyunun en önemli hi" + }, + { + "day": 14, + "date": "2026-07-21", + "content_snippet": "14. Gün (21.07.2026) Çalışma RaporuBugün, VR projemizin perf" + } + ] + }, + { + "id": 19, + "name": "Ayşenur Ebrar Gündüz", + "email": "aysenurebrargunduzz@gmail.com", + "github": "https:\/\/github.com\/AysenurGunduz\/vantage-ai", + "total_entries": 15, + "filled_entries": 15, + "already_approved": 8, + "newly_approved": 7, + "on_time_count": 12, + "retroactive_count": 3, + "on_time_days": [ + 1, + 2, + 3, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + "retroactive_days": [ + 4, + 5, + 6 + ], + "retroactive_details": [ + { + "day": 4, + "date": "2026-07-23", + "content_snippet": "Güne ekip arkadaşlarım ile gerçekleştirdiğimiz toplantı ile " + }, + { + "day": 5, + "date": "2026-07-24", + "content_snippet": "Toplantının ardından güne, her gün olduğu gibi yeni bir bran" + }, + { + "day": 6, + "date": "2026-07-27", + "content_snippet": "Bugüne yine ekip içi günlük toplantıda Cuma günkü ilerlemeyi" + } + ] + }, + { + "id": 20, + "name": "Hakan Üzer", + "email": "hakanuzer1@gmail.com", + "github": "https:\/\/github.com\/Emresatil\/Recycle-Rush-VR\/tree\/feature\/ar-golden-spawner-rewards", + "total_entries": 26, + "filled_entries": 26, + "already_approved": 20, + "newly_approved": 6, + "on_time_count": 21, + "retroactive_count": 5, + "on_time_days": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 21, + 22, + 23, + 24, + 26 + ], + "retroactive_days": [ + 1, + 2, + 19, + 20, + 25 + ], + "retroactive_details": [ + { + "day": 1, + "date": "2026-07-01", + "content_snippet": "Konu: Unity VR Proje İskeletinin Oluşturulması ve Versiyon K" + }, + { + "day": 2, + "date": "2026-07-02", + "content_snippet": "Konu: Unity VR Projenin Sadeleştirlmesi ve XR Altyapısının Y" + }, + { + "day": 19, + "date": "2026-07-28", + "content_snippet": "VR Projesinde Sahne Senkronizasyonu, Görsel Post-Processing " + }, + { + "day": 20, + "date": "2026-07-29", + "content_snippet": "Oyun Durum Yönetimi (GameState) Optimizasyonu, Dinamik Çevre" + }, + { + "day": 25, + "date": "2026-08-05", + "content_snippet": "Bugünkü çalışmalar kapsamında, projemizin VR (Sanal Gerçekli" + } + ] + }, + { + "id": 22, + "name": "Mustafa emre kaplan", + "email": "mustafaemre027@gmail.com", + "github": "https:\/\/github.com\/mustafaemre027\/securewatch-ai", + "total_entries": 19, + "filled_entries": 19, + "already_approved": 12, + "newly_approved": 7, + "on_time_count": 11, + "retroactive_count": 8, + "on_time_days": [ + 4, + 6, + 7, + 8, + 9, + 10, + 12, + 15, + 17, + 18, + 19 + ], + "retroactive_days": [ + 1, + 2, + 3, + 5, + 11, + 13, + 14, + 16 + ], + "retroactive_details": [ + { + "day": 1, + "date": "2026-07-13", + "content_snippet": "1. Gün – Proje Planlama ve GitHub AltyapısıProje Tanımı ve P" + }, + { + "day": 2, + "date": "2026-07-14", + "content_snippet": "2. Gün – CIC-IDS2017 Veri Seti AnaliziVeri Seti Seçimi ve Ha" + }, + { + "day": 3, + "date": "2026-07-16", + "content_snippet": "3. Gün – Sistem Mimarisi TasarımıFonksiyonel Gereksinimler v" + }, + { + "day": 5, + "date": "2026-07-20", + "content_snippet": "5. Gün – Kimlik Doğrulama, RBAC ve Audit LogKullanıcı ve Ver" + }, + { + "day": 11, + "date": "2026-07-28", + "content_snippet": "Gün 11 – Güvenli Model Tahmini ve Analiz API’siGüvenli Model" + }, + { + "day": 13, + "date": "2026-07-30", + "content_snippet": "Gün 13 – Frontend Temeli, Güvenli Kimlik Doğrulama ve Uygula" + }, + { + "day": 14, + "date": "2026-07-31", + "content_snippet": "Gün 14 – Analiz Ekranları ve Güvenli CSV İş AkışıAnaliz API " + }, + { + "day": 16, + "date": "2026-08-04", + "content_snippet": "Gün 16 – Güvenli Olay Yönetimi Arayüzü ve İş AkışıOlay Yönet" + } + ] + }, + { + "id": 23, + "name": "Doğukan Kalkan", + "email": "kalkandogukan01@gmail.com", + "github": "https:\/\/github.com\/Dogukan-klkn\/StockRoute", + "total_entries": 20, + "filled_entries": 20, + "already_approved": 20, + "newly_approved": 0, + "on_time_count": 9, + "retroactive_count": 11, + "on_time_days": [ + 4, + 10, + 11, + 12, + 15, + 16, + 17, + 18, + 19 + ], + "retroactive_days": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 9, + 13, + 14, + 20 + ], + "retroactive_details": [ + { + "day": 1, + "date": "2026-06-29", + "content_snippet": "Oryantasyon ve Kurulum Süreçleri: Stajın ilk günü şirket ve " + }, + { + "day": 2, + "date": "2026-06-30", + "content_snippet": "Tasarım ve Dokümantasyon Yapısının Kurulumu: Proje planlamas" + }, + { + "day": 3, + "date": "2026-07-01", + "content_snippet": "Projenin daha ölçeklenebilir ve tek merkezden yönetilebilir " + }, + { + "day": 5, + "date": "2026-07-03", + "content_snippet": "Kimlik Doğrulama ve Güvenlik Altyapısının Kurulması: Sistem " + }, + { + "day": 6, + "date": "2026-07-06", + "content_snippet": "Yetki Kontrol Mekanizmasının (Guard) Kurulması: Sistemdeki A" + }, + { + "day": 7, + "date": "2026-07-07", + "content_snippet": "Başlangıç Verileri (Seed) ve Onboarding: Sistemin ilk kayıt " + }, + { + "day": 8, + "date": "2026-07-08", + "content_snippet": "Veri Doğrulama (DTO) ve Dokümantasyon: Şube oluşturma ve gün" + }, + { + "day": 9, + "date": "2026-07-09", + "content_snippet": "Proje Dokümantasyonu: Projenin genel yapısını, kullanılan te" + }, + { + "day": 13, + "date": "2026-07-16", + "content_snippet": "Bugün, proje planının 13. gün hedefleri doğrultusunda sistem" + }, + { + "day": 14, + "date": "2026-07-17", + "content_snippet": "Gün 14 — Web Yönetim Panelinin KuruluşuBugün itibarıyla Stoc" + }, + { + "day": 20, + "date": "2026-07-27", + "content_snippet": "Projenin son geliştirme günü. Bugün iki blok iş yapıldı: mob" + } + ] + }, + { + "id": 24, + "name": "Elif Çiftepala", + "email": "elifciftepala82@gmail.com", + "github": null, + "total_entries": 0, + "filled_entries": 0, + "already_approved": 0, + "newly_approved": 0, + "on_time_count": 0, + "retroactive_count": 0, + "on_time_days": [], + "retroactive_days": [], + "retroactive_details": [] + }, + { + "id": 25, + "name": "Eren Kara", + "email": "erenkara1549@gmail.com", + "github": "https:\/\/github.com\/erenkara0\/Smart-E-Commerce-Assistant", + "total_entries": 23, + "filled_entries": 23, + "already_approved": 15, + "newly_approved": 8, + "on_time_count": 8, + "retroactive_count": 15, + "on_time_days": [ + 6, + 10, + 12, + 13, + 18, + 19, + 22, + 23 + ], + "retroactive_days": [ + 1, + 2, + 3, + 4, + 5, + 7, + 8, + 9, + 11, + 14, + 15, + 16, + 17, + 20, + 21 + ], + "retroactive_details": [ + { + "day": 1, + "date": "2026-07-06", + "content_snippet": "On the first day of the internship, the topic for the projec" + }, + { + "day": 2, + "date": "2026-07-07", + "content_snippet": "Today, brand and user interface preparation work was carried" + }, + { + "day": 3, + "date": "2026-07-08", + "content_snippet": "Today, the foundational development environment for the proj" + }, + { + "day": 4, + "date": "2026-07-09", + "content_snippet": "As part of the M2 milestone for the MikroAsistan project, th" + }, + { + "day": 5, + "date": "2026-07-10", + "content_snippet": "Today, I focused on the product data structure for the proje" + }, + { + "day": 7, + "date": "2026-07-14", + "content_snippet": "Today, as part of the M4 phase, I focused on the RAG-based r" + }, + { + "day": 8, + "date": "2026-07-16", + "content_snippet": "Today, I improved the reliability and maintainability of the" + }, + { + "day": 9, + "date": "2026-07-17", + "content_snippet": "Today, I implemented session-based chat memory for the Smart" + }, + { + "day": 11, + "date": "2026-07-21", + "content_snippet": "Today, I developed the initial interactive chat interface fo" + }, + { + "day": 14, + "date": "2026-07-24", + "content_snippet": "Today, I completed the M7 backend testing milestone by setti" + }, + { + "day": 15, + "date": "2026-07-27", + "content_snippet": "Today, I prepared the project for final delivery and demonst" + }, + { + "day": 16, + "date": "2026-07-28", + "content_snippet": "I finalized the project’s v1.0.0 release, completed the GitH" + }, + { + "day": 17, + "date": "2026-07-29", + "content_snippet": "I started the M8 Excel Product Data Foundation milestone. I " + }, + { + "day": 20, + "date": "2026-08-03", + "content_snippet": "Yesterday, I implemented the product import and upsert workf" + }, + { + "day": 21, + "date": "2026-08-04", + "content_snippet": "Today, I implemented an Excel product import API endpoint fo" + } + ] + }, + { + "id": 26, + "name": "Ümit Tunç", + "email": "umit.tunc@truncgil.com", + "github": null, + "total_entries": 0, + "filled_entries": 0, + "already_approved": 0, + "newly_approved": 0, + "on_time_count": 0, + "retroactive_count": 0, + "on_time_days": [], + "retroactive_days": [], + "retroactive_details": [] + }, + { + "id": 27, + "name": "ismet can sezgin", + "email": "ismet.can.sezgin96@erzurum.edu.tr", + "github": "https:\/\/github.com\/ismetcansezgin\/EEG-Flow", + "total_entries": 15, + "filled_entries": 15, + "already_approved": 10, + "newly_approved": 5, + "on_time_count": 4, + "retroactive_count": 11, + "on_time_days": [ + 5, + 6, + 7, + 9 + ], + "retroactive_days": [ + 1, + 2, + 3, + 4, + 8, + 10, + 11, + 12, + 13, + 14, + 15 + ], + "retroactive_details": [ + { + "day": 1, + "date": "2026-07-13", + "content_snippet": "Subject of Work: Project Scope Definition, Roadmap Desi" + }, + { + "day": 2, + "date": "2026-07-14", + "content_snippet": "Subject of Work: Directory Structure Setup, Environment" + }, + { + "day": 3, + "date": "2026-07-16", + "content_snippet": "Subject of Work: EEG CSV Data Loading, Multi-Channel Va" + }, + { + "day": 4, + "date": "2026-07-17", + "content_snippet": "Subject of Work: EEG Synthetic Signal Simulator Development " + }, + { + "day": 8, + "date": "2026-07-23", + "content_snippet": "Subject of Work: Signal Processing Backend Integration:" + }, + { + "day": 10, + "date": "2026-07-27", + "content_snippet": "Subject of Work: Signal Visualization: Chart.js Interac" + }, + { + "day": 11, + "date": "2026-07-28", + "content_snippet": "Subject of Work: Feature Engineering Phase: Sliding Win" + }, + { + "day": 12, + "date": "2026-07-29", + "content_snippet": "Subject of Work: Feature Engineering REST API: Implemen" + }, + { + "day": 13, + "date": "2026-07-30", + "content_snippet": "Subject of Work: Phase 2 Feature Engineering: Signal Ep" + }, + { + "day": 14, + "date": "2026-07-31", + "content_snippet": "Subject of Work: Feature Engineering Phase: Implementat" + }, + { + "day": 15, + "date": "2026-08-03", + "content_snippet": "Subject of Work: Feature Engine REST API Endpoint, Alph" + } + ] + }, + { + "id": 28, + "name": "Alesam Baath", + "email": "isambais15@gmail.com", + "github": "https:\/\/github.com\/isambais\/SmartHome-EnergyRL", + "total_entries": 18, + "filled_entries": 18, + "already_approved": 11, + "newly_approved": 7, + "on_time_count": 10, + "retroactive_count": 8, + "on_time_days": [ + 2, + 5, + 6, + 7, + 13, + 14, + 15, + 16, + 17, + 18 + ], + "retroactive_days": [ + 1, + 3, + 4, + 8, + 9, + 10, + 11, + 12 + ], + "retroactive_details": [ + { + "day": 1, + "date": "2026-07-13", + "content_snippet": "Bugün Ne Yapıldı?Projenin resmi başlangıcı olarak GitHub üze" + }, + { + "day": 3, + "date": "2026-07-16", + "content_snippet": "Bugün Ne Yapıldı?Yol haritasındaki Gün 3 hedefi doğrultusund" + }, + { + "day": 4, + "date": "2026-07-17", + "content_snippet": "Bugün Ne Yapıldı?implementation_plan.md Bölüm 8'de projedeki" + }, + { + "day": 8, + "date": "2026-07-23", + "content_snippet": "Gün 8 — Gerçek EPIAS Verisi, VecNormalize ve Çok Algoritmali" + }, + { + "day": 9, + "date": "2026-07-24", + "content_snippet": "Gün 9 — Gerçek Dünya Ortamı Yeniden Yazımı ve Curriculum Aşa" + }, + { + "day": 10, + "date": "2026-07-27", + "content_snippet": "Gün 10 — Pazartesi, 27 Temmuz 2026Öz-Tüketim Bonusu, Hiperpa" + }, + { + "day": 11, + "date": "2026-07-28", + "content_snippet": "Gün 11 — Salı, 28 Temmuz 2026Phase 1 → Phase 2 Karşılaştırma" + }, + { + "day": 12, + "date": "2026-07-29", + "content_snippet": "Gün 12 — Aşama 3: Hibrit Aksiyon Uzayı ve Ertelenebilir Yük1" + } + ] + }, + { + "id": 29, + "name": "Mehmet Akif Tunçer", + "email": "akiftuncer0@gmail.com", + "github": null, + "total_entries": 0, + "filled_entries": 0, + "already_approved": 0, + "newly_approved": 0, + "on_time_count": 0, + "retroactive_count": 0, + "on_time_days": [], + "retroactive_days": [], + "retroactive_details": [] + }, + { + "id": 30, + "name": "Melike Bayer", + "email": "melikebayer09@gmail.com", + "github": null, + "total_entries": 0, + "filled_entries": 0, + "already_approved": 0, + "newly_approved": 0, + "on_time_count": 0, + "retroactive_count": 0, + "on_time_days": [], + "retroactive_days": [], + "retroactive_details": [] + }, + { + "id": 31, + "name": "Faruk Tazeoğlu", + "email": "faruktazeoglu9@gmail.com", + "github": "https:\/\/github.com\/Faruk-T\/baret", + "total_entries": 17, + "filled_entries": 17, + "already_approved": 11, + "newly_approved": 6, + "on_time_count": 7, + "retroactive_count": 10, + "on_time_days": [ + 3, + 5, + 6, + 7, + 8, + 9, + 17 + ], + "retroactive_days": [ + 1, + 2, + 4, + 10, + 11, + 12, + 13, + 14, + 15, + 16 + ], + "retroactive_details": [ + { + "day": 1, + "date": "2026-07-10", + "content_snippet": "Stajımın ilk gününde şirket içi oryantasyon süreçleri tamaml" + }, + { + "day": 2, + "date": "2026-07-13", + "content_snippet": "Baret projesi için kapsamlı implementation_plan.md hazırladı" + }, + { + "day": 4, + "date": "2026-07-16", + "content_snippet": "Baret projesinde alıcı akışının 3 temel ekranı (Ana Sayfa, Ü" + }, + { + "day": 10, + "date": "2026-07-24", + "content_snippet": "Bugün Baret projesinde 13. kısım kapsamında Supabase Storage" + }, + { + "day": 11, + "date": "2026-07-27", + "content_snippet": "27 Temmuz 2026 — Faz 3 Gün 13 kapanışı + Gün 14 (Alıcı ana s" + }, + { + "day": 12, + "date": "2026-07-28", + "content_snippet": "Bugün Baret projesinde Faz 3 kapsamındaki Gün 15 paketini ta" + }, + { + "day": 13, + "date": "2026-07-29", + "content_snippet": "Bugün Baret projesinde Faz 3 kapsamındaki Gün 15 paketini ta" + }, + { + "day": 14, + "date": "2026-07-30", + "content_snippet": "Bugün Baret pazaryeri uygulamasında hem kritik özellik tamam" + }, + { + "day": 15, + "date": "2026-07-31", + "content_snippet": "Bugün Baret projesinin canlı teslim ve kapanış günüydü. Uygu" + }, + { + "day": 16, + "date": "2026-08-03", + "content_snippet": "day-21-esn-interest branch’i üzerinden go-live baseline’a ES" + } + ] + }, + { + "id": 32, + "name": "Barış Paşa", + "email": "barispasa460@gmail.com", + "github": "https:\/\/github.com\/baris8138\/UstaFlow_litte", + "total_entries": 8, + "filled_entries": 8, + "already_approved": 3, + "newly_approved": 5, + "on_time_count": 1, + "retroactive_count": 7, + "on_time_days": [ + 8 + ], + "retroactive_days": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "retroactive_details": [ + { + "day": 1, + "date": "2026-07-23", + "content_snippet": "Stajın birinci gününde, teknik servis ve saha ekiplerinin iş" + }, + { + "day": 2, + "date": "2026-07-24", + "content_snippet": "Stajın ikinci gününde, UstaFlow Lite projesinin dört haftalı" + }, + { + "day": 3, + "date": "2026-07-27", + "content_snippet": "Git Commit Mesajları:[11:52] (41b7ea7) Merge pull request #5" + }, + { + "day": 4, + "date": "2026-07-28", + "content_snippet": "Git Commit Mesajları:[18:03] (84cc453) docs(brand): add Usta" + }, + { + "day": 5, + "date": "2026-07-29", + "content_snippet": "Git Commit Mesajları:[08:44] (66775b7) feat(database): add u" + }, + { + "day": 6, + "date": "2026-07-30", + "content_snippet": "Git Commit Mesajları:[16:35] (1b468e1) chore(auth): install " + }, + { + "day": 7, + "date": "2026-07-31", + "content_snippet": "UstaFlow Lite projesinde kimlik doğrulama altyapısının genel" + } + ] + } + ] +} \ No newline at end of file diff --git a/scratch/check_this_week.php b/scratch/check_this_week.php new file mode 100644 index 0000000..8a6b131 --- /dev/null +++ b/scratch/check_this_week.php @@ -0,0 +1,80 @@ +make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); + +$weekStart = '2026-08-03'; +$weekEnd = '2026-08-07'; + +$interns = App\Models\CareerApplication::where('type', 'internship') + ->with(['journalEntries' => function($q) { + $q->orderBy('date', 'asc'); + }])->get(); + +echo "=== BU HAFTA (03.08.2026 - 07.08.2026) STAJYER KODLAMA DURUMU ===\n\n"; + +$noCodingActiveInterns = []; +$activeInternsWithCoding = []; +$inactiveInterns = []; + +foreach ($interns as $intern) { + // Check if internship is active in this date range + $start = $intern->internship_start_date; + $end = $intern->internship_end_date; + + // An intern is active this week if internship started on or before Friday 2026-08-07, and ends on or after Monday 2026-08-03 + $isActiveThisWeek = ($start <= $weekEnd && $end >= $weekStart); + + // Filter entries for this week + $thisWeekEntries = []; + foreach ($intern->journalEntries as $entry) { + if ($entry->date >= $weekStart && $entry->date <= $weekEnd) { + if (!empty(trim($entry->content))) { + $thisWeekEntries[] = $entry; + } + } + } + + $internData = [ + 'id' => $intern->id, + 'name' => $intern->name, + 'email' => $intern->email, + 'start_date' => $start, + 'end_date' => $end, + 'is_active' => $isActiveThisWeek, + 'this_week_entry_count' => count($thisWeekEntries), + 'this_week_dates' => array_map(fn($e) => $e->date, $thisWeekEntries), + 'all_entries_count' => $intern->journalEntries->where('content', '!=', '')->count(), + ]; + + if (!$isActiveThisWeek) { + $inactiveInterns[] = $internData; + } else { + if (count($thisWeekEntries) == 0) { + $noCodingActiveInterns[] = $internData; + } else { + $activeInternsWithCoding[] = $internData; + } + } +} + +echo "1. STAJ GÜNÜ AKTİF OLUP BU HAFTA HİÇ KODLAMA / DEFTEN GİRİŞİ YAPMAYANLAR:\n"; +foreach ($noCodingActiveInterns as $i) { + echo "• " . $i['name'] . " (" . $i['email'] . ")\n"; + echo " - Staj Tarihleri: " . $i['start_date'] . " - " . $i['end_date'] . "\n"; + echo " - Bu Hafta Doldurulan Gün Sayısı: 0\n"; + echo " - Toplam (Tüm Staj Boyunca) Giriş Sayısı: " . $i['all_entries_count'] . "\n\n"; +} + +echo "2. STAJ GÜNÜ AKTİF OLUP BU HAFTA KODLAMA / DEFTEN GİRİŞİ YAPANLAR:\n"; +foreach ($activeInternsWithCoding as $i) { + echo "• " . $i['name'] . " (" . $i['email'] . ")\n"; + echo " - Staj Tarihleri: " . $i['start_date'] . " - " . $i['end_date'] . "\n"; + echo " - Bu Hafta Doldurulan Gün Sayısı: " . $i['this_week_entry_count'] . " / 5 gün (Tarihler: " . implode(', ', $i['this_week_dates']) . ")\n\n"; +} + +echo "3. BU HAFTA STAJ DÖNEMİ DIŞINDA / PASİF OLANLAR:\n"; +foreach ($inactiveInterns as $i) { + echo "• " . $i['name'] . " (" . $i['email'] . ") [Tarihler: " . $i['start_date'] . " - " . $i['end_date'] . "]\n"; +} diff --git a/scratch/gen_summaries.php b/scratch/gen_summaries.php new file mode 100644 index 0000000..4233b31 --- /dev/null +++ b/scratch/gen_summaries.php @@ -0,0 +1,31 @@ +make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); + +$interns = App\Models\CareerApplication::where('type', 'internship')->where('status', 'accepted')->with(['journalEntries' => function($q) { + $q->orderBy('day_number', 'asc'); +}])->get(); + +$report = []; + +foreach ($interns as $intern) { + $entriesCount = $intern->journalEntries->count(); + if ($entriesCount == 0) continue; + + $contents = []; + foreach ($intern->journalEntries as $e) { + $contents[] = "Gün " . $e->day_number . " (" . $e->date . "):\n" . mb_substr(strip_tags($e->content), 0, 400); + } + + $report[] = [ + 'name' => $intern->name, + 'repo' => $intern->github_repo, + 'entries_count' => $entriesCount, + 'snippets' => array_slice($contents, -3) // Last 3 entries + ]; +} + +file_put_contents(__DIR__ . '/intern_code_summaries.json', json_encode($report, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); +echo "Generated summaries for " . count($report) . " interns.\n"; diff --git a/scratch/intern_code_summaries.json b/scratch/intern_code_summaries.json new file mode 100644 index 0000000..6d5bd8d --- /dev/null +++ b/scratch/intern_code_summaries.json @@ -0,0 +1,102 @@ +[ + { + "name": "Emre Satıl", + "repo": "https:\/\/github.com\/Emresatil\/Recycle-Rush-VR\/commits\/feature\/save-manager-and-haptics", + "entries_count": 27, + "snippets": [ + "Gün 25 (2026-08-05):\n25. Gün (05.08.2026) Çalışma RaporuAR Mimari Geçişi ve VFX EntegrasyonuBugün, projemizin 2. ay \"Karma Gerçeklik (MR) Planlaması\" doğrultusunda, oyunumuzun temelini VR'dan (Sanal Gerçeklik) AR'a (Karma Gerçeklik) taşımak için kritik mimari değişiklikler ve görsel efekt (VFX) entegrasyonları gerçekleştirdim.1. Proje Yönetimi ve Branch (Dal) YapılandırmasıGüne her zamanki standartlarımıza uyarak başl", + "Gün 26 (2026-08-06):\n26. Gün (06.08.2026) Çalışma Raporu**Konu:** AR Fizik Optimizasyonu, Kapsamlı \"Tunneling\" (İçinden Geçme) Çözümü ve Prefab Mimari TemizliğiBugünkü mesaime, dünkü testlerde gözlemlediğim AR fizik hatalarını ve objelerin zeminden geçme problemlerini çözmek amacıyla GitHub üzerinde **\"AR Physics Stability and Tunneling Bug\"** adında kapsamlı bir Issue (Görev) oluşturarak başladım.İlk olarak Unity AR ", + "Gün 27 (2026-08-07):\n27. Gün (07.08.2026) Çalışma RaporuKonu:AAA Standartlarında Kayıt Mimarisi (SaveManager), Golden Waste Joker Mekaniği ve Dokunsal Geri Bildirim (Haptic) SistemleriBugünkü mesaime, projenin eksik olan temel yapı taşlarını (Core Systems) belirleyip inşa etmek amacıyla GitHub üzerinde **\"Core Systems & Mechanics: Haptics, Save Architecture, and Joker Logic\"** adında kapsamlı bir Issue (Görev) olu" + ] + }, + { + "name": "Ayşenur Ebrar Gündüz", + "repo": "https:\/\/github.com\/AysenurGunduz\/vantage-ai", + "entries_count": 15, + "snippets": [ + "Gün 13 (2026-08-05):\nGüne, her zamanki gibi Daily toplantısında bir önceki günün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım.Bugünün hedefi, plana göre gecikme riski skorlaması olduğu için önce yeni bir çalışma dalı açtım. Bu branch’i dünküne zincirleme yöntemiyle bağlayarak açtım çünkü dünden kullanmam gereken özellikler vardı.Asıl işe, gecikme riskini hesaplayan bir motor yazarak başladım. Risk s", + "Gün 14 (2026-08-06):\nGüne, her zamanki gibi Daily toplantısında bir önceki günün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım. Bugünün hedefi, yapay zeka tarafındaki hata yönetimini güçlendirmek olduğu için önce yeni bir çalışma dalı açtım. Bu branch'i de dünküne zincirleme yöntemiyle bağlayarak açtım, çünkü dünkü PR henüz onaylanmamıştı ve bugünkü işler onun üzerine kurulu olacaktı.Asıl işe, modele", + "Gün 15 (2026-08-07):\nGüne, her zamanki gibi Daily toplantısında bir önceki günün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım. Bugünün hedefi yeni bir özellik eklemek değil, önceki üç günde yazdığım yapay zekâ özelliklerini gerçek senaryolarla test etmek ve demoya hazırlamaktı. Bu yüzden yeni branch'imi dünkü branch'in üzerine zincirleyerek açtım, çünkü test edeceğim şeylerin çoğu tam olarak dünkü d" + ] + }, + { + "name": "Hakan Üzer", + "repo": "https:\/\/github.com\/Emresatil\/Recycle-Rush-VR\/tree\/feature\/ar-golden-spawner-rewards", + "entries_count": 26, + "snippets": [ + "Gün 24 (2026-08-04):\nOpenXR Konfigürasyonu, Scene Understanding Entegrasyonu ve AR Varlık (Asset) Optimizasyonları1. OpenXR Paket ve Özellik Ayarlarının SenkronizasyonuGünün ilk aşamasında, projenin Sanal Gerçeklikten (VR) Karma Gerçekliğe (MR - Passthrough) geçişi kapsamında OpenXR ve Meta XR SDK bağımlılıkları gözden geçirilmiştir. Proje gereksinimlerine uygun olarak OpenXR paket ayarları (OpenXRPackageSettings.asse", + "Gün 25 (2026-08-05):\nBugünkü çalışmalar kapsamında, projemizin VR (Sanal Gerçeklik) ortamından AR (Artırılmış Gerçeklik) ve Karma Gerçeklik (MR) ortamına geçiş sürecinin teknik altyapısı oluşturulmuş, cihaz derleme ayarları yapılandırılmış ve nesne havuzlama ile spawner mimarisi AR ortamına uygun hale getirilmiştir.XR Build Ayarları ve Passthrough Entegrasyonu:Meta Quest cihazlarında çalışacak ilk AR yapısının (Build)", + "Gün 26 (2026-08-06):\nBugünkü çalışmalar kapsamında, AR oyunumuzun atık üretim mekanizmasına seviyeye bağlı nadir obje (Golden Waste) üretim algoritması entegre edilmiş, 3D model ve fizik yapılandırmaları tamamlanmış ve geri dönüşüm kutularının (Bin) oyuncuya skor, Coin ve XP kazandıran event tabanlı ödül sistemi geliştirilmiştir.Golden Waste (Altın Çöp) Mimarisi ve Dinamik RNG Algoritması:PortalSpawner.cs sınıfı üzeri" + ] + }, + { + "name": "Mustafa emre kaplan", + "repo": "https:\/\/github.com\/mustafaemre027\/securewatch-ai", + "entries_count": 19, + "snippets": [ + "Gün 17 (2026-08-05):\nGün 17 – Güvenli Dashboard ve RaporlamaDashboard Backend Servisi ve API EntegrasyonuBugün SecureWatch AI projesinde analiz, güvenlik tespiti ve olay verilerini tek ekranda özetleyen dashboard modülü üzerinde çalıştım. Gerçek veritabanı kayıtlarından analiz durumlarını, tespit sayılarını, risk seviyelerini ve olay bilgilerini hesaplayan backend servisini geliştirdim. Sayım ve gruplandırma işlemleri", + "Gün 18 (2026-08-06):\nGün 18 – Güvenlik Doğrulamaları, Test Regresyonu ve Marka EntegrasyonuBackend Regresyon Testleri ve Sistem BütünlüğüBugün SecureWatch AI projesinde kimlik doğrulama, analiz, saldırı tespiti, olay yönetimi ve dashboard modüllerinin birlikte güvenli çalıştığını doğruladım. Backend tarafında 499 testin tamamı başarıyla geçti. Kaynak kodu, bağımlılıklar ve Alembic migration yapısı kontrol edildi; veri", + "Gün 19 (2026-08-07):\nDocker Ortamı ve Backend KonteynerizasyonuBugün SecureWatch AI projesinin Docker tabanlı çalışma ortamını hazırladım. Docker Desktop ve WSL 2 kurulumlarını doğruladıktan sonra backend servisi için Python 3.12 tabanlı Docker image oluşturdum. FastAPI uygulamasının Uvicorn üzerinden container içinde çalışmasını sağladım ve .dockerignore ile gereksiz ve hassas dosyaların image içerisine alınmasını en" + ] + }, + { + "name": "Doğukan Kalkan", + "repo": "https:\/\/github.com\/Dogukan-klkn\/StockRoute", + "entries_count": 20, + "snippets": [ + "Gün 18 (2026-07-23):\nBugün projenin mobil ayağına başladım. Şimdiye kadar sistem yalnızca web tarayıcısından kullanılabiliyordu; bugünden itibaren saha personelinin telefondan erişebileceği bir uygulama iskeleti oluştu.Başlangıç Durumu ve KurulumMobil klasörü projenin ilk günlerinde temel bir Expo iskeleti olarak oluşturulmuştu, ancak içi büyük ölçüde boştu — navigasyon, tema, kimlik doğrulama ve API bağlantısı yoktu.", + "Gün 19 (2026-07-24):\nBugün mobil uygulamanın iki ana özelliği tamamlandı: barkod tarama ve gelen transferlerin teslim alınması. Barkod işi planlanandan hızlı ilerlediği için, normalde son güne bırakılmış olan transfer teslim ekranı da bugüne çekildi.Barkod TaramaKamera ve izinler. Expo'nun kamera modülü kuruldu. Kamera izni üç ayrı durumda ele alındı: izin henüz istenmemiş, reddedilmiş ama tekrar sorulabilir, kalıcı o", + "Gün 20 (2026-07-27):\nProjenin son geliştirme günü. Bugün iki blok iş yapıldı: mobil uygulamaya gerçek zamanlı senkronizasyon eklendi ve backend tarafında son tutarlılık düzeltmeleri tamamlandı. Ardından tüm sistem sıfırdan uçtan uca doğrulandı.Çalışma SırasıGünü planlarken işleri riskine göre sıraladım. Mobil gerçek zamanlı katman backend'e dokunmuyordu, yani izole bir işti — onu önce yapıp bitirmek güvenliydi. Backen" + ] + }, + { + "name": "Eren Kara", + "repo": "https:\/\/github.com\/erenkara0\/Smart-E-Commerce-Assistant", + "entries_count": 23, + "snippets": [ + "Gün 21 (2026-08-04):\nToday, I implemented an Excel product import API endpoint for the MikroAsistan project. I created issue #84 and a dedicated branch, added multipart file upload support, and developed the POST \/products\/import\/excel endpoint. The endpoint validates .xlsx files, rejects unsupported, empty, or corrupted uploads, and connects the Excel parser with the product import and upsert workflow. I also added a", + "Gün 22 (2026-08-05):\nToday, I migrated the product listing workflow from a JSON-based structure to a database-backed architecture. I created a product repository to retrieve active products from SQLite using SQLAlchemy, added deterministic ordering by product ID, and developed a query service to map database models to the existing API product schema. I updated the GET \/products endpoint to use the database while prese", + "Gün 23 (2026-08-06):\nToday, I migrated the product search workflow from JSON-based indexing to a database-backed vector search architecture. I refactored the in-memory vector store to make it independent from the data source, created a service that retrieves active products from the database, converts them into searchable documents, refreshes the index, and performs product searches. I updated the GET \/products\/search" + ] + }, + { + "name": "ismet can sezgin", + "repo": "https:\/\/github.com\/ismetcansezgin\/EEG-Flow", + "entries_count": 15, + "snippets": [ + "Gün 13 (2026-07-30):\nSubject of Work: Phase 2 Feature Engineering: Signal Epoching Dashboard UI Integration and 3D Tensor VisualizationDetailed Description: Completed the frontend integration of the Signal Epoching Dashboard in frontend\/index.html, frontend\/style.css, and frontend\/app.js. Designed glassmorphic control panels allowing users to adjust window duration (window_size_sec) and slidin", + "Gün 14 (2026-07-31):\nSubject of Work: Feature Engineering Phase: Implementation of Time and Frequency Domain EEG Feature Extraction Engine and Unit TestingDetailed Description: Developed the EEG feature extraction engine in backend\/utils\/features.py to convert 3D epoched signal matrices (n_epochs, n_channels, n_samples) into 2D tabular feature matrices (n_epochs, n_features) for", + "Gün 15 (2026-08-03):\nSubject of Work: Feature Engine REST API Endpoint, Alpha Wave ERD Validation Dashboard, and System Styling IntegrationDetailed Description: Developed the POST \/api\/extract-features REST API endpoint in backend\/main.py to bridge the sliding window epoching and 144-dimensional feature extraction modules. The endpoint processes CSV uploads, validates sliding window param" + ] + }, + { + "name": "Alesam Baath", + "repo": "https:\/\/github.com\/isambais\/SmartHome-EnergyRL", + "entries_count": 18, + "snippets": [ + "Gün 16 (2026-08-04):\nGün 16 — Streamlit BMS Dashboard & Landing Page1. Bugün Ne Yapıldı?Projenin kullanıcıya yönelik katmanı tamamlandı: Streamlit tabanlı tam bir Bina Yönetim Sistemi (BMS) dashboard'u ve projeyi tanıtan bir landing page geliştirildi. Gereksiz klasörler (frontend\/, backend\/) proje ağacından temizlendi; .gitignore'a node_modules\/ eklendi.2. Dashboard Mimarisi2.1 Klasör Yapısıdashboard\/├── app.py&nb", + "Gün 17 (2026-08-05):\nGün 17 — 3D Bina Yenileme & Dashboard UI Redesign1. Bugün Ne Yapıldı?Dün oluşturulan Streamlit dashboard'unun görsel kalitesi ve kullanıcı deneyimi köklü biçimde iyileştirildi. Three.js ile yazılmış 3D bina görselleştirmesi tamamen sıfırdan yeniden yazıldı; gerçekçi mimari detaylar, dinamik gökyüzü sistemi ve tüm bina sistemlerinin 3D yansıması eklendi. Dashboard arayüzü landing page tasarımıy", + "Gün 18 (2026-08-06):\nGün 18 — FastAPI Backend & React Frontend1. Bugün Ne Yapıldı?Projenin ağ katmanı yazıldı. Streamlit prototipinin yerini üretim kalitesinde bir istemci-sunucu mimarisi aldı: FastAPI ile yazılmış bir REST API backend ve React + Vite ile yazılmış 7 sayfalık bir web uygulaması. Backend, daha önceki günlerde geliştirilen simülasyon motorunu (dashboard\/core) yeniden kullanıyor; bu sayede hiçbir simü" + ] + }, + { + "name": "Faruk Tazeoğlu", + "repo": "https:\/\/github.com\/Faruk-T\/baret", + "entries_count": 17, + "snippets": [ + "Gün 15 (2026-07-31):\nBugün Baret projesinin canlı teslim ve kapanış günüydü. Uygulamayı Expo Go QR’sız kullanılabilecek şekilde EAS ile Android APK olarak build aldım (preview profili, com.baret.app). Supabase şema kontrollerini yaptım, test verilerini temizleyip demo hesaplarını yeniden kurdum ve alıcı–satıcı–admin senaryolarını uçtan uca doğruladım (sipariş, teslim kodu, iletişim kilidi, komisyon, lisans).Kullanılab", + "Gün 16 (2026-08-03):\nday-21-esn-interest branch’i üzerinden go-live baseline’a ESN interest milestone commit’i atıldı.Mevcut monetizasyon ve operasyon katmanı gözden geçirildi:Sipariş bazlı flat komisyon modeliAdmin finans \/ tahsilat \/ mağaza sağlığı ekranlarıSatıcı sipariş, stok, lisans ve bildirim akışlarıLanding sayfası + APK indirme hattıKomisyon modelinin ileride operasyonel ve hukuki risk yaratabileceği değerlen", + "Gün 17 (2026-08-04):\nGünün amacıSipariş komisyonunu kaldırıp satıcıları Basic \/ Pro \/ Özel abonelik planlarına geçirmek; admin yönetimi, satıcı paneli, veritabanı kuralları ve web sitesini buna göre güncellemek; APK ile test edilebilir hale getirmek.1) Veritabanı \/ iş kurallarıdocs\/seller-plans-setup.sql hazırlandı ve uygulandı:create_order_commission no-op yapıldı → yeni siparişlerde komisyon satırı oluşmuyor.seller_" + ] + }, + { + "name": "Barış Paşa", + "repo": "https:\/\/github.com\/baris8138\/UstaFlow_litte", + "entries_count": 8, + "snippets": [ + "Gün 6 (2026-07-30):\nGit Commit Mesajları:[16:35] (1b468e1) chore(auth): install authentication dependencies[17:07] (03e51c2) feat(auth): add password hashing service[17:13] (a0c735e) feat(auth): add credentials validation schema[17:19] (f29a04a) feat(auth): add user authentication service[17:29] (bcffb20) feat(auth): configure credentials authentication[17:36] (4301d99) docs(auth): document authentication environment", + "Gün 7 (2026-07-31):\nUstaFlow Lite projesinde kimlik doğrulama altyapısının genel kontrollerini gerçekleştirdim. Açılan Pull Request ve reviewer süreçlerini takip ederek branch yapısını kontrol ettim. Sonraki geliştirme adımı olan gerçek giriş sayfası ve oturum yönlendirme akışı için teknik planlama yaptım.Bunu kutuya yazıp Deftere Kaydet diyebilirsin. Commit olmaması, o gün çalışma yapılmadığı anlamına gelmez.", + "Gün 8 (2026-08-03):\nUstaFlow Lite projesinde güvenli çıkış işlemi ile ADMIN ve TECHNICIAN rollerine göre erişim kontrollerini tamamladım. Yetkisiz erişim, oturum yönlendirmesi ve korumalı sayfa testlerini gerçekleştirdim. Ardından müşteri yönetimi modülüne başlayarak Prisma şemasına Customer modeli ve müşteri türlerini ekledim; migration işlemini uygulayıp TypeScript, lint ve production build kontrollerini başarıyla " + ] + } +] \ No newline at end of file diff --git a/scratch/output.txt b/scratch/output.txt new file mode 100644 index 0000000..f5ae57a --- /dev/null +++ b/scratch/output.txt @@ -0,0 +1,110 @@ +================================================== +İSİM: Emre Satıl | REPO: https://github.com/Emresatil/Recycle-Rush-VR/commits/feature/save-manager-and-haptics +Gün 25 (2026-08-05): +25. Gün (05.08.2026) Çalışma RaporuAR Mimari Geçişi ve VFX EntegrasyonuBugün, projemizin 2. ay "Karma Gerçeklik (MR) Planlaması" doğrultusunda, oyunumuzun temelini VR'dan (Sanal Gerçeklik) AR'a (Karma Gerçeklik) taşımak için kritik mimari değişiklikler ve görsel efekt (VFX) entegrasyonları gerçekleştirdim.1. Proje Yönetimi ve Branch (Dal) YapılandırmasıGüne her zamanki standartlarımıza uyarak başl +----------------------- +Gün 26 (2026-08-06): +26. Gün (06.08.2026) Çalışma Raporu**Konu:** AR Fizik Optimizasyonu, Kapsamlı "Tunneling" (İçinden Geçme) Çözümü ve Prefab Mimari TemizliğiBugünkü mesaime, dünkü testlerde gözlemlediğim AR fizik hatalarını ve objelerin zeminden geçme problemlerini çözmek amacıyla GitHub üzerinde **"AR Physics Stability and Tunneling Bug"** adında kapsamlı bir Issue (Görev) oluşturarak başladım.İlk olarak Unity AR +----------------------- +Gün 27 (2026-08-07): +27. Gün (07.08.2026) Çalışma RaporuKonu:AAA Standartlarında Kayıt Mimarisi (SaveManager), Golden Waste Joker Mekaniği ve Dokunsal Geri Bildirim (Haptic) SistemleriBugünkü mesaime, projenin eksik olan temel yapı taşlarını (Core Systems) belirleyip inşa etmek amacıyla GitHub üzerinde **"Core Systems & Mechanics: Haptics, Save Architecture, and Joker Logic"** adında kapsamlı bir Issue (Görev) olu +----------------------- +================================================== +İSİM: Ayşenur Ebrar Gündüz | REPO: https://github.com/AysenurGunduz/vantage-ai +Gün 13 (2026-08-05): +Güne, her zamanki gibi Daily toplantısında bir önceki günün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım.Bugünün hedefi, plana göre gecikme riski skorlaması olduğu için önce yeni bir çalışma dalı açtım. Bu branch’i dünküne zincirleme yöntemiyle bağlayarak açtım çünkü dünden kullanmam gereken özellikler vardı.Asıl işe, gecikme riskini hesaplayan bir motor yazarak başladım. Risk s +----------------------- +Gün 14 (2026-08-06): +Güne, her zamanki gibi Daily toplantısında bir önceki günün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım. Bugünün hedefi, yapay zeka tarafındaki hata yönetimini güçlendirmek olduğu için önce yeni bir çalışma dalı açtım. Bu branch'i de dünküne zincirleme yöntemiyle bağlayarak açtım, çünkü dünkü PR henüz onaylanmamıştı ve bugünkü işler onun üzerine kurulu olacaktı.Asıl işe, modele +----------------------- +Gün 15 (2026-08-07): +Güne, her zamanki gibi Daily toplantısında bir önceki günün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım. Bugünün hedefi yeni bir özellik eklemek değil, önceki üç günde yazdığım yapay zekâ özelliklerini gerçek senaryolarla test etmek ve demoya hazırlamaktı. Bu yüzden yeni branch'imi dünkü branch'in üzerine zincirleyerek açtım, çünkü test edeceğim şeylerin çoğu tam olarak dünkü d +----------------------- +================================================== +İSİM: Hakan Üzer | REPO: https://github.com/Emresatil/Recycle-Rush-VR/tree/feature/ar-golden-spawner-rewards +Gün 24 (2026-08-04): +OpenXR Konfigürasyonu, Scene Understanding Entegrasyonu ve AR Varlık (Asset) Optimizasyonları1. OpenXR Paket ve Özellik Ayarlarının SenkronizasyonuGünün ilk aşamasında, projenin Sanal Gerçeklikten (VR) Karma Gerçekliğe (MR - Passthrough) geçişi kapsamında OpenXR ve Meta XR SDK bağımlılıkları gözden geçirilmiştir. Proje gereksinimlerine uygun olarak OpenXR paket ayarları (OpenXRPackageSettings.asse +----------------------- +Gün 25 (2026-08-05): +Bugünkü çalışmalar kapsamında, projemizin VR (Sanal Gerçeklik) ortamından AR (Artırılmış Gerçeklik) ve Karma Gerçeklik (MR) ortamına geçiş sürecinin teknik altyapısı oluşturulmuş, cihaz derleme ayarları yapılandırılmış ve nesne havuzlama ile spawner mimarisi AR ortamına uygun hale getirilmiştir.XR Build Ayarları ve Passthrough Entegrasyonu:Meta Quest cihazlarında çalışacak ilk AR yapısının (Build) +----------------------- +Gün 26 (2026-08-06): +Bugünkü çalışmalar kapsamında, AR oyunumuzun atık üretim mekanizmasına seviyeye bağlı nadir obje (Golden Waste) üretim algoritması entegre edilmiş, 3D model ve fizik yapılandırmaları tamamlanmış ve geri dönüşüm kutularının (Bin) oyuncuya skor, Coin ve XP kazandıran event tabanlı ödül sistemi geliştirilmiştir.Golden Waste (Altın Çöp) Mimarisi ve Dinamik RNG Algoritması:PortalSpawner.cs sınıfı üzeri +----------------------- +================================================== +İSİM: Mustafa emre kaplan | REPO: https://github.com/mustafaemre027/securewatch-ai +Gün 17 (2026-08-05): +Gün 17 – Güvenli Dashboard ve RaporlamaDashboard Backend Servisi ve API EntegrasyonuBugün SecureWatch AI projesinde analiz, güvenlik tespiti ve olay verilerini tek ekranda özetleyen dashboard modülü üzerinde çalıştım. Gerçek veritabanı kayıtlarından analiz durumlarını, tespit sayılarını, risk seviyelerini ve olay bilgilerini hesaplayan backend servisini geliştirdim. Sayım ve gruplandırma işlemleri +----------------------- +Gün 18 (2026-08-06): +Gün 18 – Güvenlik Doğrulamaları, Test Regresyonu ve Marka EntegrasyonuBackend Regresyon Testleri ve Sistem BütünlüğüBugün SecureWatch AI projesinde kimlik doğrulama, analiz, saldırı tespiti, olay yönetimi ve dashboard modüllerinin birlikte güvenli çalıştığını doğruladım. Backend tarafında 499 testin tamamı başarıyla geçti. Kaynak kodu, bağımlılıklar ve Alembic migration yapısı kontrol edildi; veri +----------------------- +Gün 19 (2026-08-07): +Docker Ortamı ve Backend KonteynerizasyonuBugün SecureWatch AI projesinin Docker tabanlı çalışma ortamını hazırladım. Docker Desktop ve WSL 2 kurulumlarını doğruladıktan sonra backend servisi için Python 3.12 tabanlı Docker image oluşturdum. FastAPI uygulamasının Uvicorn üzerinden container içinde çalışmasını sağladım ve .dockerignore ile gereksiz ve hassas dosyaların image içerisine alınmasını en +----------------------- +================================================== +İSİM: Doğukan Kalkan | REPO: https://github.com/Dogukan-klkn/StockRoute +Gün 18 (2026-07-23): +Bugün projenin mobil ayağına başladım. Şimdiye kadar sistem yalnızca web tarayıcısından kullanılabiliyordu; bugünden itibaren saha personelinin telefondan erişebileceği bir uygulama iskeleti oluştu.Başlangıç Durumu ve KurulumMobil klasörü projenin ilk günlerinde temel bir Expo iskeleti olarak oluşturulmuştu, ancak içi büyük ölçüde boştu — navigasyon, tema, kimlik doğrulama ve API bağlantısı yoktu. +----------------------- +Gün 19 (2026-07-24): +Bugün mobil uygulamanın iki ana özelliği tamamlandı: barkod tarama ve gelen transferlerin teslim alınması. Barkod işi planlanandan hızlı ilerlediği için, normalde son güne bırakılmış olan transfer teslim ekranı da bugüne çekildi.Barkod TaramaKamera ve izinler. Expo'nun kamera modülü kuruldu. Kamera izni üç ayrı durumda ele alındı: izin henüz istenmemiş, reddedilmiş ama tekrar sorulabilir, kalıcı o +----------------------- +Gün 20 (2026-07-27): +Projenin son geliştirme günü. Bugün iki blok iş yapıldı: mobil uygulamaya gerçek zamanlı senkronizasyon eklendi ve backend tarafında son tutarlılık düzeltmeleri tamamlandı. Ardından tüm sistem sıfırdan uçtan uca doğrulandı.Çalışma SırasıGünü planlarken işleri riskine göre sıraladım. Mobil gerçek zamanlı katman backend'e dokunmuyordu, yani izole bir işti — onu önce yapıp bitirmek güvenliydi. Backen +----------------------- +================================================== +İSİM: Eren Kara | REPO: https://github.com/erenkara0/Smart-E-Commerce-Assistant +Gün 21 (2026-08-04): +Today, I implemented an Excel product import API endpoint for the MikroAsistan project. I created issue #84 and a dedicated branch, added multipart file upload support, and developed the POST /products/import/excel endpoint. The endpoint validates .xlsx files, rejects unsupported, empty, or corrupted uploads, and connects the Excel parser with the product import and upsert workflow. I also added a +----------------------- +Gün 22 (2026-08-05): +Today, I migrated the product listing workflow from a JSON-based structure to a database-backed architecture. I created a product repository to retrieve active products from SQLite using SQLAlchemy, added deterministic ordering by product ID, and developed a query service to map database models to the existing API product schema. I updated the GET /products endpoint to use the database while prese +----------------------- +Gün 23 (2026-08-06): +Today, I migrated the product search workflow from JSON-based indexing to a database-backed vector search architecture. I refactored the in-memory vector store to make it independent from the data source, created a service that retrieves active products from the database, converts them into searchable documents, refreshes the index, and performs product searches. I updated the GET /products/search +----------------------- +================================================== +İSİM: ismet can sezgin | REPO: https://github.com/ismetcansezgin/EEG-Flow +Gün 13 (2026-07-30): +Subject of Work: Phase 2 Feature Engineering: Signal Epoching Dashboard UI Integration and 3D Tensor VisualizationDetailed Description: Completed the frontend integration of the Signal Epoching Dashboard in frontend/index.html, frontend/style.css, and frontend/app.js. Designed glassmorphic control panels allowing users to adjust window duration (window_size_sec) and slidin +----------------------- +Gün 14 (2026-07-31): +Subject of Work: Feature Engineering Phase: Implementation of Time and Frequency Domain EEG Feature Extraction Engine and Unit TestingDetailed Description: Developed the EEG feature extraction engine in backend/utils/features.py to convert 3D epoched signal matrices (n_epochs, n_channels, n_samples) into 2D tabular feature matrices (n_epochs, n_features) for +----------------------- +Gün 15 (2026-08-03): +Subject of Work: Feature Engine REST API Endpoint, Alpha Wave ERD Validation Dashboard, and System Styling IntegrationDetailed Description: Developed the POST /api/extract-features REST API endpoint in backend/main.py to bridge the sliding window epoching and 144-dimensional feature extraction modules. The endpoint processes CSV uploads, validates sliding window param +----------------------- +================================================== +İSİM: Alesam Baath | REPO: https://github.com/isambais/SmartHome-EnergyRL +Gün 16 (2026-08-04): +Gün 16 — Streamlit BMS Dashboard & Landing Page1. Bugün Ne Yapıldı?Projenin kullanıcıya yönelik katmanı tamamlandı: Streamlit tabanlı tam bir Bina Yönetim Sistemi (BMS) dashboard'u ve projeyi tanıtan bir landing page geliştirildi. Gereksiz klasörler (frontend/, backend/) proje ağacından temizlendi; .gitignore'a node_modules/ eklendi.2. Dashboard Mimarisi2.1 Klasör Yapısıdashboard/├── app.py&nb +----------------------- +Gün 17 (2026-08-05): +Gün 17 — 3D Bina Yenileme & Dashboard UI Redesign1. Bugün Ne Yapıldı?Dün oluşturulan Streamlit dashboard'unun görsel kalitesi ve kullanıcı deneyimi köklü biçimde iyileştirildi. Three.js ile yazılmış 3D bina görselleştirmesi tamamen sıfırdan yeniden yazıldı; gerçekçi mimari detaylar, dinamik gökyüzü sistemi ve tüm bina sistemlerinin 3D yansıması eklendi. Dashboard arayüzü landing page tasarımıy +----------------------- +Gün 18 (2026-08-06): +Gün 18 — FastAPI Backend & React Frontend1. Bugün Ne Yapıldı?Projenin ağ katmanı yazıldı. Streamlit prototipinin yerini üretim kalitesinde bir istemci-sunucu mimarisi aldı: FastAPI ile yazılmış bir REST API backend ve React + Vite ile yazılmış 7 sayfalık bir web uygulaması. Backend, daha önceki günlerde geliştirilen simülasyon motorunu (dashboard/core) yeniden kullanıyor; bu sayede hiçbir simü +----------------------- +================================================== +İSİM: Faruk Tazeoğlu | REPO: https://github.com/Faruk-T/baret +Gün 15 (2026-07-31): +Bugün Baret projesinin canlı teslim ve kapanış günüydü. Uygulamayı Expo Go QR’sız kullanılabilecek şekilde EAS ile Android APK olarak build aldım (preview profili, com.baret.app). Supabase şema kontrollerini yaptım, test verilerini temizleyip demo hesaplarını yeniden kurdum ve alıcı–satıcı–admin senaryolarını uçtan uca doğruladım (sipariş, teslim kodu, iletişim kilidi, komisyon, lisans).Kullanılab +----------------------- +Gün 16 (2026-08-03): +day-21-esn-interest branch’i üzerinden go-live baseline’a ESN interest milestone commit’i atıldı.Mevcut monetizasyon ve operasyon katmanı gözden geçirildi:Sipariş bazlı flat komisyon modeliAdmin finans / tahsilat / mağaza sağlığı ekranlarıSatıcı sipariş, stok, lisans ve bildirim akışlarıLanding sayfası + APK indirme hattıKomisyon modelinin ileride operasyonel ve hukuki risk yaratabileceği değerlen +----------------------- +Gün 17 (2026-08-04): +Günün amacıSipariş komisyonunu kaldırıp satıcıları Basic / Pro / Özel abonelik planlarına geçirmek; admin yönetimi, satıcı paneli, veritabanı kuralları ve web sitesini buna göre güncellemek; APK ile test edilebilir hale getirmek.1) Veritabanı / iş kurallarıdocs/seller-plans-setup.sql hazırlandı ve uygulandı:create_order_commission no-op yapıldı → yeni siparişlerde komisyon satırı oluşmuyor.seller_ +----------------------- +================================================== +İSİM: Barış Paşa | REPO: https://github.com/baris8138/UstaFlow_litte +Gün 6 (2026-07-30): +Git Commit Mesajları:[16:35] (1b468e1) chore(auth): install authentication dependencies[17:07] (03e51c2) feat(auth): add password hashing service[17:13] (a0c735e) feat(auth): add credentials validation schema[17:19] (f29a04a) feat(auth): add user authentication service[17:29] (bcffb20) feat(auth): configure credentials authentication[17:36] (4301d99) docs(auth): document authentication environment +----------------------- +Gün 7 (2026-07-31): +UstaFlow Lite projesinde kimlik doğrulama altyapısının genel kontrollerini gerçekleştirdim. Açılan Pull Request ve reviewer süreçlerini takip ederek branch yapısını kontrol ettim. Sonraki geliştirme adımı olan gerçek giriş sayfası ve oturum yönlendirme akışı için teknik planlama yaptım.Bunu kutuya yazıp Deftere Kaydet diyebilirsin. Commit olmaması, o gün çalışma yapılmadığı anlamına gelmez. +----------------------- +Gün 8 (2026-08-03): +UstaFlow Lite projesinde güvenli çıkış işlemi ile ADMIN ve TECHNICIAN rollerine göre erişim kontrollerini tamamladım. Yetkisiz erişim, oturum yönlendirmesi ve korumalı sayfa testlerini gerçekleştirdim. Ardından müşteri yönetimi modülüne başlayarak Prisma şemasına Customer modeli ve müşteri türlerini ekledim; migration işlemini uygulayıp TypeScript, lint ve production build kontrollerini başarıyla +----------------------- diff --git a/scratch/repo_analysis_data.json b/scratch/repo_analysis_data.json new file mode 100644 index 0000000..ad62129 --- /dev/null +++ b/scratch/repo_analysis_data.json @@ -0,0 +1,102 @@ +{ + "Emre Satıl": { + "id": 18, + "email": "emresatil72@gmail.com", + "repo": "https:\/\/github.com\/Emresatil\/Recycle-Rush-VR\/commits\/feature\/save-manager-and-haptics", + "github_username": "Emresatil", + "total_entries": 27, + "commits_count": 0, + "commits_sample": [], + "full_text": "\n--- DAY 1 (2026-07-01) ---\n

1. Gün (01.07.2026) Çalışma Raporu<\/strong><\/p>

Bugün staj sürecimin ilk günüydü ve projemizin teknik altyapısını kurarak işe koyuldum. \"Recycle-Rush-VR\" isimli VR tabanlı geri dönüşüm projemiz için ilk adımları attım.<\/p>

  1. <\/span>Repository Kurulumu:<\/strong> GitHub üzerinde projemizin tüm kodlarını barındıracak olan Recycle-Rush-VR<\/code> deposunu (repository) oluşturdum. Projenin versiyon kontrolünü sağlıklı bir şekilde yönetmek için gerekli ayarları yaptım.<\/li>
  2. <\/span>Proje Planlaması (GDD ve Roadmap):<\/strong> Projenin anayasası niteliğinde olan implementation_plan.md<\/code> dosyasını hazırladım. Projenin teknik mimarisini, oyun döngüsünü ve 20 günlük çalışma planını bu dokümana işledim. Çalışmamı ana dala (main) dahil etmek için \"Pull Request\" sürecini başlattım, bu sayede hocalarımızın onayına sunmuş oldum.<\/li>
  3. <\/span>İş Yönetimi (Kanban):<\/strong> Proje yönetimini disiplinli sürdürmek için GitHub Projects üzerinde bir Kanban panosu hazırladım. \"To Do\", \"In Progress\", \"Review\" ve \"Done\" sütunlarını oluşturarak işlerimi bu sistem üzerinden takip etmeye başladım.<\/li>
  4. <\/span>Proje Fikri ve Hedef:<\/strong> Projenin odağını belirledim: insanların geri dönüşüm alışkanlığı kazandıran, hızlı ve eğlenceli bir VR simülasyonu yapacağız. 3D modelleme yerine hazır varlıklar (asset) kullanarak tamamen oyun mekaniklerine, VR etkileşimlerine ve kod mimarisine odaklanmayı hedefledim.<\/li><\/ol>

    Kazanım:<\/strong> Bugün, bir yazılım projesinde kod yazmaktan çok, o projenin nasıl disiplinli bir şekilde yönetileceğini öğrendim. Branch ve Pull Request mantığını kullanarak ana kodu korumayı ve işlerimi planlı bir şekilde Kanban panosunda takip etmeyi pratik ettim.<\/p>\n\n--- DAY 2 (2026-07-02) ---\n

    2. Gün (02.07.2026) Çalışma Raporu<\/strong><\/p>


    <\/p>

    Bugün proje için Meta Quest Android build ayarlarını yaptım. Unity projesini Android platformuna geçirerek gerekli yapılandırmaları kontrol ettim. Android Build Support, OpenJDK ve Android SDK\/NDK kurulumlarını doğruladım. Daha sonra Player Settings bölümünde Package Name, API Level, IL2CPP ve ARM64 ayarlarını Meta Quest'e uygun şekilde düzenledim.<\/p>

    OpenXR ve Meta Quest XR ayarlarını kontrol ederek gerekli özelliklerin aktif olduğunu doğruladım. Quality ve Graphics ayarlarını inceleyip Android platformu için uygun yapılandırmayı kullandım.<\/p>

    Ayrıca proje dokümantasyonunu düzenledim. docs<\/code> klasörü içerisindeki implementation plan dosyasını kontrol ettim. docs\/assets<\/code> klasörüne proje için hazırlanan logo, katmanlı uygulama ikonu (Layered App Icon), VR arayüz görselleri ve uygulama mockuplarını ekledim. README dosyasını bu görselleri gösterecek şekilde güncelleyerek proje tanıtımını daha düzenli hale getirdim.<\/p>

    Yaptığım değişiklikleri Git üzerinde yeni bir branch oluşturarak kaydettim. Değişiklikleri commit ettikten sonra GitHub'a gönderip Pull Request oluşturarak kod incelemesine sundum.<\/p>\n\n--- DAY 3 (2026-07-03) ---\n

    3. Gün (03.07.2026) Çalışma Raporu<\/strong><\/p>


    <\/p>

    Bugün proje için kullanılacak Low-Poly modelleri araştırdım ve projeye uygun ücretsiz kaynaklardan indirdim. İndirdiğim modelleri Unity projesine eklemeden önce düzenli bir klasör yapısı oluşturdum. Bu kapsamda Assets\/ThirdParty\/Models<\/strong> dizini altında Environment<\/strong>, Props<\/strong> ve Waste<\/strong> klasörlerini oluşturarak modelleri kullanım alanlarına göre kategorilere ayırdım.<\/p>

    Environment<\/strong> klasörüne fabrika ortamında kullanılacak çevre, zemin, platform ve konveyör bant modellerini, Props<\/strong> klasörüne varil, palet, koli ve benzeri yardımcı nesneleri, Waste<\/strong> klasörüne ise geri dönüştürülebilir atık modellerini yerleştirdim. Bu sayede proje içerisindeki üçüncü taraf varlıkları daha düzenli ve yönetilebilir bir yapıda topladım.<\/p>

    Daha sonra modelleri Unity projesine import ederek sahne içerisinde kontrollerini yaptım. Model ve materyalleri inceleyerek karşılaştığım uyumluluk sorunlarını gidermeye çalıştım ve gerekli materyal ayarlarını proje ile uyumlu hale getirmek için düzenledim.<\/p>

    Ayrıca GitHub üzerinde bu çalışma için ayrı bir görev (Issue) oluşturdum. Oluşturduğum görev üzerinden yeni bir branch açarak çalışmaya başladım ve Git akışına uygun şekilde commit ve Pull Request süreci için hazırlık yaptım.<\/p>


    <\/p>


    <\/p>

    Git Commit Mesajları:<\/strong><\/p>

    1. <\/span>[02:49]<\/strong> (29347e7<\/em>) Merge pull request #7 from Emresatil\/feature\/meta-quest-build-settings Configure Meta Quest Android build settings<\/li>
    2. <\/span>[10:25]<\/strong> (a9567a7<\/em>) Merge branch 'main' into feature\/unity-setup<\/li>
    3. <\/span>[10:38]<\/strong> (35dc9db<\/em>) Merge pull request #6 from Emresatil\/feature\/unity-setup feat(core): configure XR Interaction Toolkit and OpenXR<\/li><\/ol>\n\n--- DAY 4 (2026-07-06) ---\n

      4. Gün (04.07.2026) Çalışma Raporu<\/strong><\/p>


      <\/p>

      Bugün oyunun ana sahnesi olan <\/span>MainGame<\/strong> üzerinde blockout çalışmasını gerçekleştirdim. İlk olarak oyun alanının temel yapısını oluşturmak için zemin, duvarlar, taşıma bandı ve geri dönüşüm kutularının yerleşimini planlayarak sahneye ekledim. Oyuncunun hareket edeceği alanı daha rahat görebilmek amacıyla nesnelerin konumlarını ve ölçeklerini düzenledim. Ayrıca oyuncunun oyuna başlayacağı <\/span>SpawnArea<\/strong>, atıkların oluşacağı <\/span>WasteSpawner<\/strong> ve geri dönüşüm işleminin gerçekleştirileceği <\/span>DropZone<\/strong> nesnelerini oluşturarak sahnede uygun konumlara yerleştirdim.<\/span><\/p>


      <\/p>

      Daha sonra VR altyapısını hazırlamak amacıyla <\/span>XR Interaction Toolkit<\/strong> paketi içerisindeki <\/span>Starter Assets<\/strong> paketini projeye kurdum. Kurulum tamamlandıktan sonra <\/span>XR Origin<\/strong> bileşenini sahneye ekleyerek oyuncu kamerası ve kontrolcü yapısını oluşturdum. XR Origin hiyerarşisini inceleyerek kamera, sol ve sağ kontrolcü nesnelerinin doğru şekilde oluşturulduğunu kontrol ettim. Kurulum sırasında gerekli ayarları gözden geçirerek XR bileşenlerinin sorunsuz çalışmasını sağladım.<\/span><\/p>


      <\/p>

      Son olarak oluşturduğum sahneyi Unity üzerinde test ederek nesnelerin yerleşimini, oyuncunun başlangıç konumunu ve XR Origin yapısının doğru çalışıp çalışmadığını kontrol ettim. Yapılan çalışmalar sonucunda ana oyun sahnesinin temel yapısını ve VR geliştirme altyapısını bir sonraki geliştirme aşamasına hazır hale getirdim.<\/span><\/p>


      <\/p>


      <\/p>

      Git Commit Mesajları:<\/strong><\/p>

      1. <\/span>[12:59]<\/strong> (26cda63<\/em>) Setup XR Interaction Toolkit Starter Assets - Imported XR Interaction Toolkit Starter Assets package - Added and configured XR Origin (XR Rig) - Set up camera, controllers and locomotion components - Prepared the MainGame scene for initial VR development and device testing<\/li><\/ol>\n\n--- DAY 5 (2026-07-07) ---\n

        5. Gün (07.07.2026) Çalışma Raporu<\/strong><\/p>


        <\/p>

        Bugün, Recycle Rush VR projesinin temel oyun döngüsünün (core loop) ilk adımı olan taşıma bandı sistemi üzerine çalıştım. Oyuncunun etkileşime gireceği atıkların sahneye sürekli ve düzenli bir şekilde akmasını sağlayacak bu sistemin pürüzsüz çalışması çok önemliydi. Özellikle VR projelerinde objelerin takılarak hareket etmesi deneyimi çok bozduğu için optimizasyona dikkat etmem gerekiyordu.<\/p>


        <\/p>

        Geliştirmeye başlarken öncelikle proje hiyerarşisini düzenli tutmak adına Assets\/_App\/Scripts\/Environment dizini altında BeltMovement.cs adında yeni bir script oluşturdum. Başlangıçta objeleri sadece Update döngüsü içinde transform.position değiştirerek kaydırmayı denedim. Fakat XR Device Simulator ile yaptığım ilk testlerde, objelerin bant üzerinde ilerlerken ciddi şekilde titrediğini (jittering) ve takılmalar yaşadığını fark ettim.<\/p>


        <\/p>

        Bu titreme sorununu çözmek için hareketi tamamen Unity'nin fizik motoruna devretmeye karar verdim. Sahnedeki taşıma bandı objesine bir Rigidbody komponenti ekledim ve yerçekiminden etkilenmemesi için isKinematic özelliğini aktif ettim. Kod tarafında ise hareketi Update yerine fizik hesaplamalarının yapıldığı FixedUpdate fonksiyonuna taşıdım. Bandı kod ile çok küçük bir miktar ileri hareket ettirip, hemen ardından Rigidbody.MovePosition komutuyla tekrar eski konumuna çeken bir mantık kurdum. Bu sayede bant görsel olarak sabit kalsa da, fizik motoru üzerinde bir hareket algıladığı için bandın üzerine düşen atık objeleri sürtünme kuvvetiyle pürüzsüzce ileriye doğru kaydırmaya başladı.<\/p>


        <\/p>

        Scriptin yazımını tamamladıktan sonra sahnede ilgili objeye atamasını yaptım ve hız değişkenlerini (speed) Unity Inspector üzerinden ayarlanabilir hale getirdim. Son olarak VR başlığını sürekli tak-çıkar yapıp zaman kaybetmemek adına XR Device Simulator kullanarak simülasyonu çalıştırdım. Yaptığım testler sonucunda objelerin bant üzerinde hiçbir titreme yapmadan, akıcı bir şekilde oyuncuya doğru aktığını doğruladım.<\/p>


        <\/p>

        Günün ikinci yarısında, projenin sadece koddan ibaret olmaması ve sürdürülebilir olması adına dokümantasyon çalışmalarına ağırlık verdim. GitHub repomuzda Wiki sekmesini aktif ederek oyunun \"Kurulum\", \"Kullanılan Teknolojiler\", \"Proje Yapısı\" ve \"Proje Hakkında\" gibi temel sayfalarını oluşturdum. Geliştirdiğimiz mimariyi ve sistem gereksinimlerini buraya detaylıca işledim.<\/p>


        <\/p>

        Son olarak süreç yönetimimizi daha da profesyonelleştirmek için GitHub Discussions sekmesini kullanmaya başladım. Burada \"Sprint 1 Retrospective\" (1. Sprint Değerlendirmesi) adında bir tartışma başlığı açtım. Geride bıraktığımız ilk sprintte neleri iyi yaptığımızı, nerelerde zorlandığımızı (örneğin fizikteki titreme sorunu) ve bir sonraki sprintte nasıl daha hızlı ilerleyebileceğimizi değerlendirdik. Gerek Kanban board kullanımı, gerekse PR (Pull Request) ve Issue eşleştirmeleriyle proje yönetimi açısından oldukça verimli ve disiplinli bir günü geride bırakmış olduk.<\/p>


        <\/p>


        <\/p>

        Git Commit Mesajları:<\/strong><\/p>

        1. <\/span>[12:12]<\/strong> (93a797a<\/em>) feat: Add BeltMovement script and update MainGame scene - Created BeltMovement.cs to enable smooth sliding of physical objects on the X-axis over the conveyor belt. - Integrated the script into the relevant conveyor belt object in the MainGame scene. - Completed Day 5 task requirements.<\/li><\/ol>\n\n--- DAY 6 (2026-07-08) ---\n

          6. Gün (08.07.2026) Çalışma Raporu<\/strong><\/p>


          <\/p>

          Bugün, Recycle Rush VR projesinde oyuncunun taşıma bandından alıp geri dönüşüm kutularına atacağı temel atık objelerinin oyun motoruna entegrasyonunu gerçekleştirdim. Takım içi görev dağılımımız kapsamında ben Plastik ve Kağıt atıkların kurulumunu üstlenirken, takım arkadaşım Cam ve Metal atıklar üzerinde çalıştı. Paralel çalışarak hem süreci hızlandırdık hem de GitHub üzerinde aynı dosyalara müdahale etmekten kaynaklanabilecek \"merge conflict\" (çakışma) durumlarının önüne geçtik.<\/span><\/p>


          <\/p>

          Çalışmalarıma başlamadan önce staj hocamın verdiği çok değerli bir tavsiyeyi iş akışıma dahil ettim: Gün sonu devasa tek bir commit atmak yerine, yapılan her anlamlı değişikliği küçük ve takip edilebilir parçalar halinde (Atomic Commits) versiyon kontrol sistemine göndermek. Bu prensiple bugünkü görevimi iki mantıksal aşamaya böldüm.<\/span><\/p>


          <\/p>

          İlk aşamada oyunun atık ayrıştırma (sorting) algoritmasının altyapısını kurdum. Oyuncunun elindeki objeyi doğru kutuya attığını kod üzerinden algılayabilmemiz için Unity Project Settings üzerinden Plastic, Paper, Glass ve Metal etiketlerini (Tag) sisteme tanımladım. Ardından Plastik atıklara odaklandım. Sahip olduğumuz 3D FBX modellerini (su şişesi, şampuan kutusu vb.) doğrudan prefab yapmanın ileride model güncellemelerinde referans sorunlarına (Missing Prefab) yol açabileceğini biliyordum. Bu yüzden modelleri önce sahneye alıp Prefab > Unpack Completely komutuyla orijinal model bağlarını tamamen kopardım. Ardından her birine, plastiğin hafifliğini simüle edecek şekilde kütlesi (mass) 0.5 olan bir Rigidbody ekledim. VR'da performans kaybı yaşamamak ve objeyi tutma (grab) etkileşimlerini pürüzsüz kılmak adına, objelerin tam şeklini saran Mesh Collider bileşeni ekleyip Convex özelliğini aktif ettim. Bu 5 farklı plastik modeli kendi klasörümüzde bağımsız \"Original Prefab\" haline getirdikten sonra, bu değişiklikleri daha önce oluşturduğum Tag tanımlamalarıyla birlikte aynı commit içerisinde kayıt altına aldım.<\/span><\/p>


          <\/p>

          Son aşamada ise aynı işlemleri Kağıt objeleri (karton kutu, defter, parşömen vb.) için uyguladım. Kağıdın plastiğe göre daha hafif olması gerektiğinden kütle değerlerini 0.2 olarak ayarladım. Bu çalışmayı ayrı bir commit ile kayıt altına aldım. Günün sonunda, temiz ve okunabilir bir Git geçmişiyle (history) kodlarımı uzak sunucuya (origin) Push ettim ve takım arkadaşımın incelemesi için bir Pull Request (PR) açtım.<\/span><\/p>


          <\/p>

          Bugünkü çalışmalarım sayesinde hem Unity'de \"Nested Prefab\" (içe içe şablon) mantığının risklerini öğrenip doğru şablonlamayı (Solid Blue Box) kavradım, hem de versiyon kontrol sistemini sadece bir yedekleme aracı olarak değil, geliştirme sürecinin detaylı bir günlüğü olarak kullanma alışkanlığı kazandım.<\/span><\/p>


          <\/p>


          <\/p>


          <\/p>

          Git Commit Mesajları:<\/strong><\/p>

          1. <\/span>[12:05]<\/strong> (3f6a5c3<\/em>) feat: add core sorting tags and create Plastic waste prefabs - Added 'Plastic', 'Paper', 'Glass', and 'Metal' tags to Project Settings for the sorting mechanic. - Created 5 distinct Plastic waste Original Prefabs (Water bottle, Soda, Shampoo, Container, Bottle). - Unpacked original FBX models and added Rigidbody (mass: 0.5) and Convex Mesh Collider to each prefab. - Assigned 'Plastic' tag to all plastic objects.<\/li>
          2. <\/span>[12:26]<\/strong> (137c54f<\/em>) feat(prefabs): create Paper waste prefabs with physics - Created 5 distinct Paper waste Original Prefabs (Book, Cardboard Box, Notebook, Papers, Scroll). - Unpacked original FBX models to create clean prefab assets. - Added Rigidbody (mass: 0.2) and Convex Mesh Collider to each prefab for accurate VR physics interactions. - Assigned 'Paper' tag to all objects for the waste sorting system.<\/li><\/ol>\n\n--- DAY 7 (2026-07-09) ---\n

            7. Gün (09.07.2026) Çalışma Raporu<\/strong><\/p>


            <\/p>


            <\/p>

            Bugün, Recycle Rush VR projesinin temel oynanış hissini (Game Feel) doğrudan etkileyecek olan en önemli VR mekaniğini, yani atıkları banttan alıp fırlatma sistemini geliştirdim. Dün temel fizik ayarlarını (Rigidbody, Collider) tamamladığımız Plastik ve Kağıt atık prefab'larını, bugün oyuncunun sanal elleriyle etkileşime girebileceği hale getirdim.<\/p>


            <\/p>

            İlk aşamada kendi branch'im üzerinden çalışarak tüm plastik ve kağıt objelere Unity XR Interaction Toolkit'in temel bileşeni olan XR Grab Interactable scriptini entegre ettim. VR'da objeleri tuttuğumuzda ağırlık hissini doğru verebilmek ve objelerin diğer fiziksel yüzeylerin içinden geçmesini engellemek için bileşen içerisindeki Movement Type ayarını Velocity Tracking olarak yapılandırdım. Ayrıca objenin aniden oyuncunun eline ışınlanmasının (snapping) yarattığı yapay hissiyatı kırmak için Smooth Position ve Smooth Rotation algoritmalarını aktif ettim.<\/p>


            <\/p>

            İkinci aşamada, tutuş ergonomisini iyileştirmeye karar verdim. Örneğin bir kitabın veya büyük bir şişenin rasgele bir köşesinden tutulması VR deneyiminin inandırıcılığını bozuyordu. Bu sorunu çözmek için prefab'ların içine görünmez birer `GrabPoint` (Tutma Noktası) alt objesi (Child GameObject) oluşturarak, objelerin tam ağırlık merkezlerine yerleştirdim. Sonrasında bu objeleri XR Grab bileşenindeki Attach Transform özelliğine bağlayarak, oyuncunun atıkları kusursuz ve anatomik olarak doğal bir şekilde kavramasını sağladım. Çalışmalarımı XR Device Simulator ile test edip tüm işlemleri atomik commit'ler halinde uzak sunucuya Push ederek PR açtım.<\/p>


            <\/p>

            Ancak bugünün bana kattığı en büyük tecrübe, staj hocamdan aldığımız Kod İncelemesi (Code Review) geri bildirimi oldu. Hocamız, ana oyun döngüsünü kontrol eden 2000 satırlık `MainGame.cs` dosyasının yazılım mimarisindeki meşhur \"God Object\" (Tanrı Nesne) anti-pattern'ine dönüştüğü uyarısını yaptı. Oyunun puanlamasını, atık üretimini ve bant hareketini tek bir dosyada yürütmenin \"Single Responsibility\" (Tek Sorumluluk) prensibini ihlal ettiğini teorik olarak kavramış olduk. Takım halinde projelerde yaşadığımız entegrasyon sıkıntılarının temel sebebinin de bu spagetti kod yapısı olduğunu fark ettik. Hocamızın tavsiyesi üzerine takım arkadaşımla toplantı yaparak, bir sonraki aşamanın ilk işi olarak bu devasa yapıyı `ScoreManager`, `WasteSpawner` gibi tek bir görevden sorumlu bağımsız modüllere parçalama (Refactoring) kararını aldık.<\/p>


            <\/p>


            <\/p>


            <\/p>


            <\/p>


            <\/p>


            <\/p>

            Git Commit Mesajları:<\/strong><\/p>

            1. <\/span>[11:02]<\/strong> (c39b363<\/em>) feat(vr): implement XR Grab Interactable for Plastic prefabs - Configured 5 distinct Plastic waste prefabs for VR hand interactions. - Added 'XR Grab Interactable' component to enable core mechanics (grab, hold, and throw). - Set 'Movement Type' to 'Velocity Tracking' to simulate realistic mass and ensure accurate physics collisions while the object is held by the player.<\/li>
            2. <\/span>[15:36]<\/strong> (85fa834<\/em>) feat(vr): implement XR Grab Interactable for Paper prefabs - Configured 5 distinct Paper waste prefabs for VR hand interactions. - Added 'XR Grab Interactable' component to establish consistent picking and throwing mechanics. - Set 'Movement Type' to 'Velocity Tracking' to maintain physical integrity and prevent objects from clipping through the environment during grabs.<\/li>
            3. <\/span>[17:08]<\/strong> (1fc017c<\/em>) feat(vr): implement XR Grab Interactables for Paper and refine Plastic attach points - Configured 5 distinct Paper waste prefabs with XR Grab Interactable, setting Movement Type to Velocity Tracking for realistic VR physics. - Added 'GrabPoint' child objects to all Paper prefabs and assigned them as Attach Transforms for accurate hand placement. - Updated existing Plastic prefabs by adding 'GrabPoint' Attach Transforms to improve grab ergonomics and game feel across all waste items. - Applied Smooth Position\/Rotation to all interactables for premium interaction quality.<\/li><\/ol>\n\n--- DAY 8 (2026-07-10) ---\n

              8. Gün (10.07.2026) Çalışma Raporu<\/strong><\/p>


              <\/p>

              Bugün staj planımızdaki Spawner görevine ek olarak, oyunun mekaniklerini daha akıcı ve eğlenceli hale getirmek için çeşitli denemeler ve kodlamalar yaptım. <\/span><\/p>


              <\/p>

              İlk olarak taşıma bandının başlangıcında rastgele atıklar üretecek olan `WasteSpawner.cs` scriptini yazdım. Spawner'ı basit bir sayaç yerine `Coroutine` kullanarak dinamik bir yapıya kavuşturdum; böylece ileride oyun hızlandığında üretim aralıklarını rahatça değiştirebileceğimiz bir altyapı kurmuş oldum. Testler sırasında çöplerin hep aynı saniyede ve bandın tam ortasına düştüğünü fark ettim. Oyunun bu robotik hissiyatını kırmak için üretim sürelerine `Random.Range` ile rastgelelik kattım ve çöplerin pozisyonlarına ufak bir sapma (offset) değeri ekledim. <\/span><\/p>


              <\/p>

              Bu noktada bazı fiziksel problemlerle karşılaştım. Offset değerini başta 0.4f gibi yüksek tuttuğumda, büyük karton kutular bandı aşıp doğrudan yere düşüyordu; değeri 0.1f'e indirerek bu taşma problemini çözdüm. Ayrıca çöplerin farklı açılarla düşmesi için verdiğim 3D rotasyon yüzünden şişeler yan düşüp bantta yuvarlanıyordu. Rotasyonu `Quaternion.Euler` komutuyla sadece Y ekseninde (kendi etrafında) dönecek şekilde kısıtlayarak şişelerin bantta dik bir şekilde ilerlemesini sağladım. Spawner kısmını, aynı çöpün üst üste gelmesini engelleyen ufak bir anti-tekrar kontrolü yazarak tamamladım.<\/span><\/p>


              <\/p>

              Günün ikinci yarısında, VR oyun hissiyatını (Game Feel) artırıp artıramayacağımızı test etmek için alternatif bir mekanik üzerine Ar-Ge yaptım. Çöplerin banttan düşmesi yerine uzay boşluğunda süzülmesini sağlayan `AntigravityItem.cs` adında yepyeni bir script yazdım. Bu kod ile objelerin yerçekimini kapatıp yukarı yönlü hafif bir süzülme kuvveti uyguladım. Objelerin oyuncu tarafından tutulduğunda veya fırlatıldığında normal fiziğine (gerçek dünya yerçekimine) dönmesi gerekiyordu. Bunun için Unity'nin XR Interaction Toolkit kütüphanesini araştırdım ve etkileşim event'lerini (`selectEntered` ve `selectExited`) koda bağlayarak objenin tutulma ve bırakılma durumlarını başarıyla kontrol ettim. <\/span><\/p>


              <\/p>

              Bugün yazdığım kodları ve yaptığım fizik düzeltmelerini detaylı İngilizce açıklamalarla commit'leyip GitHub reposuna Push ettim ve günün görevini başarıyla tamamladım.<\/span><\/p>


              <\/p>


              <\/p>


              <\/p>


              <\/p>

              Git Commit Mesajları:<\/strong><\/p>

              1. <\/span>[11:03]<\/strong> (9ca67ef<\/em>) feat(core): create standalone WasteSpawner script Implemented a modular WasteSpawner.cs script using InvokeRepeating to instantiate random prefabs at set intervals. Separated spawning logic from MainGame to respect Single Responsibility Principle.<\/li>
              2. <\/span>[14:18]<\/strong> (4c15f26<\/em>) feat(core): implement antigravity physics and object pooling spawner - Refactored 'WasteSpawner' to utilize Object Pooling, pre-allocating prefabs in Awake to eliminate runtime Instantiate calls and prevent GC spikes. - Transitioned spawner timing to a dynamic Coroutine structure, establishing the architecture for event-driven difficulty scaling. - Introduced 'AntigravityItem' for all waste prefabs, replacing standard gravity with upward force and randomized torque for a zero-gravity effect. - Integrated XR Interaction hooks (selectEntered\/selectExited) to seamlessly toggle between antigravity and standard Rigidbody physics during grab\/throw actions. - Enforced strict naming conventions (PascalCase \/ _camelCase) across all new scripts.<\/li>
              3. <\/span>[14:53]<\/strong> (e54341e<\/em>) feat(core): implement organic waste spawner with dynamic intervals - Replaced static spawn timing with a dynamic Coroutine loop (min\/max interval) to increase player engagement and fluidity. - Added 'spawnWidthOffset' to drop items at randomized points across the conveyor belt width for natural physics simulation. - Implemented an anti-repeat algorithm to prevent spawning the exact same waste item consecutively. - Fully aligned with Day 8 implementation plan while preparing the architecture for future dynamic difficulty scaling.<\/li>
              4. <\/span>[16:50]<\/strong> (c159a09<\/em>) feat(core): implement organic waste spawner with physics fixes - Replaced static spawn timing with a dynamic Coroutine loop (min\/max intervals) to increase gameplay fluidity. - Added 'spawnWidthOffset' (0.1f) to drop items at randomized points across the conveyor belt width without overshooting. - Replaced 3D random rotation with strictly Y-axis rotation (Quaternion.Euler) to ensure objects like bottles spawn upright and maintain proper physics stability. - Implemented an anti-repeat algorithm to prevent spawning the exact same waste item consecutively.<\/li><\/ol>


                <\/p>


                <\/p>\n\n--- DAY 9 (2026-07-13) ---\n

                9. Gün (13.07.2026) Çalışma Raporu<\/strong><\/p>


                <\/p>


                <\/p>

                Bugün, takım arkadaşımla paylaştığımız görev dağılımı doğrultusunda oyunun Puan Sistemi (Score System) altyapısını kurmaya odaklandım. İlk olarak, puanı evrensel olarak yönetecek olan `ScoreManager.cs` sınıfını Singleton tasarım deseniyle oluşturdum. Sistemin işlemciyi yormaması (optimizasyon) adına `Update()` döngüleri kullanmak yerine olay güdümlü (Event-driven) bir mimari tercih ettim ve `Action<int>` (OnScoreChanged) event'ini yazdım.<\/p>


                <\/p>

                Bu puanı ekranda göstermek için yazdığım `ScoreUI.cs` kodunu test ederken çok ilginç bir Unity hatasıyla karşılaştım. Puan arka planda artmasına rağmen arayüz (UI) güncellenmiyordu. Yaptığım debug testleri sonucunda bunun Unity'nin rastgele çalışma sırasından (Execution Order) kaynaklanan bir yarış durumu (Race Condition) olduğunu fark ettim. Dinleme (Subscribe) işlemini `OnEnable` metodundan `Start()` metoduna taşıyarak bu sorunu profesyonelce çözdüm.<\/p>


                <\/p>

                Ardından dün yazılan `BinTrigger.cs` (Kutu Tetikleyicisi) kodu ile benim `ScoreManager` kodumu birbirine bağladım. Bunu yaparken kodların birbirine bağımlı (tight coupling) olmaması için sadece event'ler üzerinden iletişim kurmalarını sağladım. Doğru kutuda puan ekleme, yanlış kutuda ise matematiksel mutlak değer (`Mathf.Abs`) kullanarak puan düşürme mantığını kurguladım.<\/p>


                <\/p>

                Test aşamasında VR projelerinin klasik bir sorunuyla yüzleştim: Çöplerin (Prefab) ana gövdesinde (Root) etiket (Tag) bulunmasına rağmen, çarpışma kutuları (Collider) alt objelerde (Child) olduğu için sistem çöpleri \"Untagged\" olarak görüyordu. `BinTrigger` kodunu güncelleyerek, çarpan objenin en üst atasına (`transform.root`) kadar çıkıp Tag aramasını sağladım ve sorun çözüldü. Ayrıca silinme (Destroy) işleminde havada boş obje (Memory Leak) kalmaması için her zaman Root objenin silinmesini zorunlu kıldım.<\/p>


                <\/p>

                Son olarak, sahnede bulunan 20'den fazla çöp prefab'ına ilgili Tag'leri (Plastic, Glass, Metal, Paper) ekledim. Taşıma bandı ve spawner koordinatlarını düzelterek fiziksel patlamaların (Physics Explosion) önüne geçtim. Yaptığım tüm bu düzeltmeleri GitHub üzerinden iki ayrı \"Atomic Commit\" halinde paketleyip, ana projeye birleştirilmesi için Pull Request (PR) açarak bugünkü görevimi başarıyla tamamladım.<\/p>


                <\/p>


                <\/p>


                <\/p>

                Git Commit Mesajları:<\/strong><\/p>

                1. <\/span>[11:33]<\/strong> (6efd77a<\/em>) feat(core): implement ScoreManager and event-driven UI framework - Created `ScoreManager.cs` utilizing a Singleton pattern to globally manage gameplay scoring logic. - Implemented C# Action events (OnScoreChanged) to establish a decoupled, event-driven architecture for score broadcasts. - Added AddScore and SubtractScore methods with mathematical safety checks to prevent invalid negative values. - Created `ScoreUI.cs` to dynamically update the TextMeshPro UI by listening to score events, completely eliminating the need for expensive Update() loops. - Successfully completed the first atomic sub-task for the score system implementation.<\/li>
                2. <\/span>[17:43]<\/strong> (7970e85<\/em>) fix(core): resolve physics triggers and score system integration bugs - Fixed an execution order race condition in `ScoreUI.cs` by moving the event subscription to `Start()`, ensuring the UI properly initializes and tracks score changes. - Refactored `BinTrigger.cs` to recursively check the `transform.root` for tags, resolving collision detection failures caused by deeply nested VR prefabs. - Improved memory management in `BinTrigger.cs` by enforcing destruction of the root prefab instead of orphaned child colliders. - Integrated `ScoreManager.cs` to listen to `BinTrigger.OnWasteProcessed` events, fully automating positive and negative scoring logic based on accurate tag validation.<\/li><\/ol>\n\n--- DAY 10 (2026-07-14) ---\n

                  10. Gün (14.07.2026) Çalışma Raporu<\/strong><\/p>


                  <\/p>

                  Bugün, projenin en kritik aşamalarından biri olan kullanıcı arayüzü (UI) sistemlerini VR standartlarına uygun hale getirmek üzerine yoğunlaştım. Geliştirme sürecimde fark ettim ki, geleneksel 2 boyutlu ve kameraya sabitlenmiş (Screen Space) menüler, sanal gerçeklik ortamında oyuncunun derinlik algısını bozuyor ve gerçeklik hissiyatını (immersion) ciddi şekilde zedeliyor. Bu problemi aşmak için oyun endüstrisinde standart bir pratik olan 'Diegetic UI' (oyun dünyasına fiziksel olarak entegre edilmiş arayüz) mimarisine geçiş yapmaya karar verdim. Bunun için sahneye fabrika temasına uygun, düşük poligonlu (low-poly) bir monitör modeli entegre ettim. Unity’nin arayüz sistemindeki Canvas bileşenini 'World Space' moduna alarak ve ölçeklendirme (scale) değerlerini optimize ederek, geri sayım sayacını ve oyunun anlık durumunu (Ana Menü, Oyun Başladı, Süre Bitti vb.) doğrudan bu fiziksel monitörün camına yansıttım.<\/p>


                  <\/p>

                  Bu görsel sistemi arka planda verimli bir şekilde yönetebilmek için, mimariyi modüler tutmaya özen gösterdim. Tüm kodları tek bir dosyaya yığmak (spaghetti code) yerine, Tek Sorumluluk Prensibi'ne (Single Responsibility Principle) bağlı kalarak sadece arayüzü yönetecek bağımsız bir `UIManager.cs` sınıfı kodladım. Bu sınıf, her saniye kontrol döngüsü (Update) çalıştırmak yerine, `GameManager` üzerindeki olaylara (Event) abone (subscribe) olarak çalışıyor. Böylece gereksiz işlemci (CPU) kullanımının önüne geçerek projede önemli bir optimizasyon sağlamış oldum.<\/p>


                  <\/p>

                  Test süreçlerim sırasında oyunun temel mekaniğini etkileyen kritik bir hata (bug) tespit ettim. Oyuncu atığı doğru kutuya atsa bile, sistem bazen atığı tanımıyor ve puan vermiyordu. Hiyerarşiyi incelediğimde, VR etkileşimleri (Grab Interactable) için hazırlanan prefab nesnelerinin iç içe geçmiş (nested) yapılardan oluştuğunu; etiketlerin (Tag) ana objede kalırken, çarpışmayı algılayan Collider'ların alt objelere kaydığını fark ettim. Bu kopukluğu gidermek için `BinTrigger.cs` sınıfındaki çarpışma algılama algoritmasını tamamen yeniden yazdım. String karşılaştırmaları yerine `GetComponentsInChildren` fonksiyonunu entegre ederek, çarpışan objenin tüm alt hiyerarşisini tarayan ve doğru etiketi her koşulda bulabilen hatasız (foolproof) bir sistem geliştirdim.<\/p>


                  <\/p>

                  Günün son bölümünde, oyunun hissiyatını (game feel\/juice) artırmak için görsel geri bildirimler üzerine çalıştım. Oyuncu bir atığı kutuya attığında, puanın aniden değişmesinin yeterince tatmin edici olmadığını gözlemledim. Bu nedenle `ScoreUI.cs` dosyasına müdahale ettim. Unity'de sıkça kullanılan ancak performansı olumsuz etkileyebilen Coroutine yapıları yerine, matematiksel interpolasyon (`Vector3.Lerp` ve `Color.Lerp`) fonksiyonlarını kullandım. Yeni yazdığım bu sistem sayesinde, oyuncu doğru bir atış yaptığında puan yazısı pürüzsüzce büyüyüp yeşil renkte parlarken; hatalı bir atışta (ceza aldığında) kırmızıya dönerek küçülüyor. Yaptığım tüm bu geliştirmeler, projenin basit bir prototipten çıkıp profesyonel bir VR oyununa dönüşmesinde büyük rol oynadı.<\/p>


                  <\/p>


                  <\/p>


                  <\/p>


                  <\/p>

                  Git Commit Mesajları:<\/strong><\/p>

                  1. <\/span>[11:31]<\/strong> (e04cba5<\/em>) feat(core): overhaul waste detection and implement dynamic UI feedback - Refactored BinTrigger to recursively search nested prefab hierarchies for valid tags, ensuring 100% accurate waste detection. - Upgraded ScoreUI to use smooth Lerp interpolations instead of Coroutines for AAA-style visual feedback. - Added dynamic color shifting (Red\/Green) and scale punch animations to the score text for immediate penalty\/reward juice.<\/li>
                  2. <\/span>[15:08]<\/strong> (b147259<\/em>) chore(assets): import flat screen TV 3D model Added low-poly flat screen TV model to the project for diegetic UI implementation. This model will serve as the physical world-space canvas for displaying game states, scores, and time.<\/li>
                  3. <\/span>[17:38]<\/strong> (051740b<\/em>) feat(ui): implement UIManager to handle diegetic text updates Created UIManager system to manage world-space UI text components. The manager subscribes to GameManager events to dynamically update the remaining time and game status (MainMenu, Playing, GameOver) on the TV monitor.<\/li><\/ol>\n\n--- DAY 11 (2026-07-16) ---\n

                    11. Gün (16.07.2026) Çalışma Raporu<\/strong><\/p>


                    <\/p>


                    <\/p>

                    Bugün stajımda projemizin hem arayüz altyapısını hazırladığım hem de oyun hissiyatını (Juice) büyük ölçüde artırdığım, benim için oldukça verimli bir gün oldu. Güne öncelikle oyun içi menülerimizde ve bilgi ekranlarında kullanacağımız kullanıcı arayüzü (UI) ikonlarını ve panel tasarımlarını projeye aktararak (import) başladım. Bu varlıkları klasörleyerek projenin içine dahil ettim. Böylece sadece düz yazılardan oluşan basit bir sistem yerine, daha profesyonel ve oyuncunun gözüne hitap eden bir menü altyapısının temelini atmış oldum.<\/p>


                    <\/p>

                    Günün büyük bir kısmında ise projemizin en eğlenceli ve yaratıcı alanlarından biri olan Görsel Efektler (Particle System) üzerine yoğunlaştım. Atık ayrıştırma mekaniğinde oyuncuya daha iyi bir geri bildirim verebilmek için, doğru atık atıldığında kutunun içinden havai fişek gibi patlayan ve eriyerek kaybolan doğa temalı yeşil \"Başarı\" efektleri tasarladım. Ardından, oyuncu yanlış atık attığında gerçekten hata yaptığını hissetmesi için daha ağır olan (yerçekimi etkisi fazla), yere çakılan ve etrafa yayılan agresif kırmızı bloklardan oluşan \"Hata\" efektleri hazırladım.<\/p>


                    <\/p>

                    Bu efektleri sadece Unity arayüzünde tasarlamakla kalmadım; kod tarafında (`BinTrigger.cs`) bunların atığın doğru veya yanlış olma durumuna göre nasıl dinamik olarak çağrılacağını (Instantiate) ve sahnede performansı düşürmemeleri için işleri bitince bellekten nasıl otomatik olarak silineceklerini (Destroy) kodladım. Geliştirme sırasında ufak tefek pürüzleri de aştım. Örneğin efektler ilk başta kutunun görünmeyen en alt kısmında patlıyordu. Araştırarak çarpışma kutusunun (Collider) tam tepe noktasını bulmayı başardım ve efekti VR'da tam olması gerektiği yere getirdim. Ayrıca Unity'de oyun çalışırken (Play modundayken) yapılan kod değişikliklerinin kaydedilmediğini de hataları çözerken bizzat yaşayarak tecrübe etmiş oldum.<\/p>


                    <\/p>

                    Önceden bir oyun oynarken arayüz tasarımlarının veya o patlamaların arkasındaki mantığı hiç düşünmezdim. Bugün arayüz ikonlarını projeye dahil edip, üzerine kendi efektlerimi tasarlayarak oyuncuya o tatmin hissini verebilmenin ne kadar önemli olduğunu anladım. Gün geçtikçe Unity'nin yapısına ve yazılım geliştirme süreçlerine daha da hakim oluyorum.<\/p>


                    <\/p>


                    <\/p>

                    Git Commit Mesajları:<\/strong><\/p>

                    1. <\/span>[11:48]<\/strong> (da68b39<\/em>) chore(assets): import UI icons and menu panels Imported 2D icon assets and UI panels into the project. Configured texture import settings to Sprite (2D and UI) for proper Canvas rendering. Established a professional folder structure under Assets\/_App\/Art\/UI.<\/li>
                    2. <\/span>[15:33]<\/strong> (cf90af1<\/em>) feat(vfx): implement dynamic particle effects for waste sorting feedback - Created highly polished Particle System prefabs (SuccessParticles & FailParticles) utilizing Unity's Shuriken system to enhance game feel (juice). - Implemented advanced VFX techniques including world collision, rotation over lifetime, and mesh rendering to match the low-poly VR aesthetic. - Refactrefactored `BinTrigger.cs` to dynamically instantiate and automatically clean up (destroy) particle effects based on the player's sorting accuracy. - Calculated the precise upper bound of the bin colliders to spawn the effects at optimal eye level for VR users. - Assigned the new VFX prefabs to all recycling bins within the MainGame scene.<\/li>
                    3. <\/span>[16:49]<\/strong> (754e499<\/em>) feat(vfx): add aggressive fail particle effects for incorrect waste sorting - Created the `FailParticles` prefab to provide immediate, visceral negative feedback when a player sorts waste incorrectly. - Configured heavy gravity modifiers, large emission sizes, and vibrant neon red\/orange gradients to simulate a punchy, arcade-style error state. - Implemented world collision mechanics allowing error particles to physically interact and bounce off the factory environment. - Updated all recycling bins in the MainGame scene to trigger this new fail state VFX upon incorrect sorting.<\/li>
                    4. <\/span>[17:40]<\/strong> (4ba8253<\/em>) Delete assets\/_App\/Scenes\/MainGame.unity @umitunc Modüler Sahne Yönetimi ve Prefab Tabanlı Geliştirme ile ilgili eleştirel geri bildiriminiz için teşekkür ederim. Ekip arkadaşım şu anda MainGame sahnesini prefab'lara dönüştürmek üzerinde çalışıyor. Onun Pull Request'i bu mimari düzeltmeleri içerecektir.<\/li>
                    5. <\/span>[17:44]<\/strong> (5d2376b<\/em>) Merge pull request #69 from Emresatil\/Emresatil-patch-1 Delete assets\/_App\/Scenes\/MainGame.unity<\/li>
                    6. <\/span>[23:08]<\/strong> (8db3fd3<\/em>) feat(scene): integrate success and fail particles into MainGame scene<\/li>
                    7. <\/span>[23:17]<\/strong> (6e85f0f<\/em>) Revert \"feat(scene): integrate success and fail particles into MainGame scene\" This reverts commit 8db3fd33a2fcd60659dbf3af2576a1777388e1d3.<\/li>
                    8. <\/span>[23:32]<\/strong> (a257ecf<\/em>) fix(scene): resolve conflict by keeping main branch's MainGame.unity<\/li><\/ol>


                      <\/p>\n\n--- DAY 12 (2026-07-17) ---\n

                      12. Gün (17.07.2026) Çalışma Raporu<\/strong><\/p>


                      <\/p>

                      Bugün oyunun en önemli hissiyat (Game Feel) unsurlarından biri olan \"Ses Sistemini\" kurmaya odaklandım. Projedeki tüm arka plan müziklerini (BGM) ve etkileşim ses efektlerini (SFX) tek bir merkezden, düzenli bir şekilde yönetebilmek için Singleton tasarım deseniyle `AudioManager.cs` betiğini yazdım. İlk testlerim sırasında, Unity'nin varsayılan 3 boyutlu ses oynatma fonksiyonu yüzünden (`PlayClipAtPoint`), VR ortamında oyuncu bir objeyi eline aldığında kollarının kameraya olan fiziksel uzaklığı sebebiyle seslerin sönümlenip oyuncuya çok kısık geldiğini fark ettim. Oyunun o tatmin edici ve duyarlı \"Arcade\" hissiyatını korumak için, etkileşim seslerinin tamamını doğrudan kulaklığın içine duyulan 2 boyutlu `PlayOneShot` komutuna çevirerek bu problemi başarıyla çözdüm.<\/span><\/p>


                      <\/p>

                      Çalışmalarımamakine kolu (`MachineLever`) mekaniğini ses sistemime entegre ederek devam ettim. Spagetti koda sebep olmamak adına `MachineLever.cs` içerisine `OnLeverPulledAction` adında statik bir Event (sinyal) ekledim ve `AudioManager`'ın sadece bu sinyali dinleyerek kol çekilme sesini oynatmasını sağladım. Aynı zamanda oyun başladığında sürekli çalışacak bant motoru sesini (Engine Hum), doğrudan `GameManager`'ın durumlarına (`OnGameStateChanged`) abone yaparak dinamik hale getirdim. Bu süreçte Unity 6'nın yenilenmiş AudioSource Inspector arayüzündeki bazı atama problemleriyle ve kısıtlamalarla karşılaştım; bu sorunu ses dosyası atamalarını doğrudan script içerisinden `[SerializeField]` ile koda gömerek pratik bir şekilde aştım.<\/span><\/p>


                      <\/p>

                      Günün son bölümünde, projenin uluslararası standartlara uygun olması için Türkçe olan \"ses\" klasörünün adını \"Sounds\" olarak refactor ettim ve televizyon panellerindeki tüm UI metinlerini İngilizceye yerelleştirdim. Ancak bu sırada dijital ekrandaki geri sayım sayacının bazen güncellenmediği şeklinde kritik bir hata keşfettim. Kodları incelediğimde bunun bir çalışma sırası (Script Execution Order) hatası olduğunu; `UIManager`'ın, `GameManager` ayağa kalkmadan önce null dönen event'lere abone olmaya çalıştığını fark edip kodun statik abonelik mantığını düzelterek bu yarışı (race condition) sonlandırdım. Buna ek olarak, VR ortamında objeleri tutarken oyuncunun sanal ellerinin görünmez olması gibi oyun deneyimini baltalayan bir sorunu, `XR Origin` bileşenindeki `Hide Controller On Select` özelliğini devre dışı bırakarak çözdüm. Bugün yaptığım tüm mimari geliştirmeleri ve bulduğum hata çözümlerini birbirine karıştırmadan 5 farklı \"Atomic Commit\" olacak şekilde GitHub'a Push ettim ve detaylı bir Pull Request açarak günün görevini başarıyla tamamladım.<\/span><\/p>


                      <\/p>


                      <\/p>

                      Git Commit Mesajları:<\/strong><\/p>

                      1. <\/span>[11:38]<\/strong> (9487e71<\/em>) chore(audio): import interaction and feedback sound effects - Imported AI-generated sound effects (MP3) for core game interactions to enhance game feel (juice). - Added grab and release\/drop sounds for realistic physics interactions. - Added success (ding) and fail (buzzer) feedback sounds for the waste sorting mechanics.<\/li>
                      2. <\/span>[15:31]<\/strong> (de21d1d<\/em>) feat(audio): implement AudioManager system and 2D interaction SFX - Created Singleton AudioManager architecture to handle BGM, UI sounds, and SFX centrally. - Modified audio system to use 2D spatial blend (PlayOneShot) to ensure interaction sounds are clearly audible in VR regardless of distance. - Updated AntigravityItem.cs to trigger audio cues upon grab and release events. - Imported additional UI and throw sound assets. - Configured AudioManager GameObject and AudioSources within the MainGame scene.<\/li>
                      3. <\/span>[17:17]<\/strong> (e83db4b<\/em>) feat(ui): translate UI texts to english and fix timer race condition - Translated status and score texts to English for internationalization. - Refactored UIManager event subscriptions to prevent race conditions during scene initialization.<\/li>
                      4. <\/span>[17:59]<\/strong> (3925a97<\/em>) chore(audio): rename audio folder to english and add background music track - Renamed 'ses' directory to 'Sounds' to strictly adhere to English naming conventions in the project architecture. - Imported new Lo-Fi background music track ('oyun sahne muzigi.mp3') for the main game loop. - Updated all related audio asset paths and metadata files.<\/li>
                      5. <\/span>[21:07]<\/strong> (3c48c86<\/em>) feat(audio): integrate machine lever and engine hum audio events - Added OnLeverPulledAction event to MachineLever script. - Subscribed AudioManager to GameManager states for dynamic engine hum playback. - Subscribed to MachineLever events for mechanical lever sounds. - Implemented script-based AudioClip assignment to bypass Unity 6 AudioSource inspector limitations.<\/li><\/ol>\n\n--- DAY 13 (2026-07-20) ---\n

                        13. Gün (20.07.2026) Çalışma Raporu<\/strong><\/p>


                        <\/p>

                        Bugün, geliştirmekte olduğumuz VR projesinin \"Game Feel\" (Oyun Hissiyatı) dinamiklerini ve görsel kalitesini artırmaya odaklandım. Arcade türündeki bir oyunda oyuncunun eylemlerine verilen anlık tepkilerin tatmin edici olması gerektiği için güne öncelikle bir Titreşim (Haptic Feedback) sistemi kurarak başladım. Düşük gecikme süresi (low latency) elde etmek amacıyla Unity'nin yerel (native) XR API'sini kullanarak merkezi bir `HapticManager` (Singleton) sistemi tasarladım. Bu sayede oyuncu hareketli banttan bir obje tuttuğunda (Grab) kontrolcüde hafif bir \"pop\" hissi; çöpü doğru kutuya attığında tok bir onay titreşimi, yanlış kutuya attığında ise rahatsız edici uzun bir uyarı (buzzer) titreşimi almasını sağladım. Bu sistemi başarıyla projenin ana modülüne (CoreSystems_Module) entegre ettim.<\/span><\/p>


                        <\/p>

                        İkinci aşamada görsel geri bildirimleri (Juice) güçlendirmek için projeye çeşitli görsel efekt (VFX) paketleri dahil ettim. Çöp kutularına isabet ve hata durumları için ayrı ayrı partikül efektleri atadım. Ayrıca bandın sonuna giden kaçırılmış çöpleri yok eden \"Öğütücü\" (DestroyZone) mekaniği için bir hava patlaması efekti ekledim. Bu süreçte efektin zemin (mesh) altında kalıp görünmez olmasını önlemek adına ilgili C# koduna müdahale ederek patlama lokasyonuna +0.5 metrelik bir yükseklik ofseti (Y-axis offset) uyguladım.<\/span><\/p>


                        <\/p>

                        Görsel efektleri entegre ederken önemli bir render problemiyle karşılaştım: Projeye dahil ettiğim dış kaynaklı bazı efektler sahnede şeffaf (görünmez) olarak renderlanıyordu. İlgili paketlerin dokümantasyonlarını inceleyip detaylı bir hata ayıklama (debugging) yaptıktan sonra sorunun URP (Universal Render Pipeline) ayarlarından kaynaklandığını tespit ettim. Mobil VR cihazı olan Meta Quest'te performans tasarrufu yapmak amacıyla daha önce \"Depth Texture\" (Derinlik Dokusu) ayarını devre dışı bırakmıştık, bu da yumuşak partiküllerin (Soft Particles) hesaplanmasını engelliyormuş. URP Config dosyalarına müdahale edip bu ayarı aktifleştirdim ve Android Preset ayarlarını donanım bütçesine uyacak şekilde yeniden dengeledim. Performans kaybı yaşamadan `DefaultVolumeProfile` üzerinden Bloom (Parlama) ve ACES Tonemapping ayarlarını da yaparak oyunun renk paletini Arcade standartlarına çıkardım.<\/span><\/p>

                        Günün sonunda yaptığım tüm bu geliştirmeleri versiyon kontrol sistemine (Git) \"Atomic Commit\" prensiplerine uygun olarak aktardım. Hazır alınan materyalleri (chore), yazdığım yeni özellikleri (feat) ve grafik iyileştirmelerini (perf) ayrı ayrı paketleyerek anlamlı bir Pull Request (PR) hazırladım. Ayrıca takım arkadaşımla Unity sahne (Scene) dosyası üzerinde çakışma (Merge Conflict) yaşamamak adına görev dağılımı yaptım ve `.gitignore` kural yönetimindeki hataları (tüm Assets klasörünün yanlışlıkla ignore edilmesi gibi) tespit edip düzelterek versiyon kontrol konusundaki tecrübemi pekiştirdim.<\/span><\/p>


                        <\/p>


                        <\/p>


                        <\/p>


                        <\/p>


                        <\/p>


                        <\/p>

                        Git Commit Mesajları:<\/strong><\/p>

                        1. <\/span>[11:10]<\/strong> (7c3f0e4<\/em>) feat(haptic): implement centralized HapticManager and XR feedback - Developed a Singleton HapticManager to centralize XR controller haptic impulses. - Integrated event listeners to BinTrigger for global vibration feedback upon correct\/incorrect waste sorting. - Updated AntigravityItem to trigger localized haptic pulses on SelectEnter grab interactions. - Resolved XRBaseInputInteractor API namespace constraints for seamless Unity 6 compatibility.<\/li>
                        2. <\/span>[12:51]<\/strong> (6379f33<\/em>) chore(haptic): update CoreSystems_Module prefab with HapticManager - Applied HapticManager GameObject to the CoreSystems_Module prefab. - Ensures native XR haptic feedback system is persistent across all scenes.<\/li>
                        3. <\/span>[14:41]<\/strong> (bc9d46c<\/em>) refactor(haptic): upgrade HapticManager to use native XR hardware API - Refactored HapticManager to directly interface with UnityEngine.XR.InputDevice for 100% reliable hardware-level global haptics. - Increased impulse intensity for correct (0.6) and incorrect (1.0) sorting feedback. - Updated AntigravityItem grab haptics (0.5 intensity) and fixed XRI Interactors namespace references. - Added comprehensive debug logging for haptic capability detection.<\/li>
                        4. <\/span>[17:35]<\/strong> (20d0fdf<\/em>) perf(graphics): Optimize URP and post-processing for Meta Quest - Enabled HDR and Depth Texture rendering in URP Configuration files. - Revised Android Preset settings to fit mobile VR (Meta Quest) performance constraints. - Adjusted Bloom and ACES Tonemapping via DefaultVolumeProfile to enhance the arcade aesthetic. - Updated UI Font (SDF) settings to ensure sharper text rendering in VR.<\/li>
                        5. <\/span>[18:16]<\/strong> (fc12602<\/em>) feat(vfx): add vertical offset to crusher visual effect spawn position Updated DestroyZone.cs to instantiate the crusher VFX with a 0.5m Y-axis offset, preventing the particle effect from clipping through the ground mesh.<\/li><\/ol>\n\n--- DAY 14 (2026-07-21) ---\n

                          14. Gün (21.07.2026) Çalışma Raporu<\/strong><\/p>


                          <\/p>


                          <\/p>

                          Bugün, VR projemizin performans optimizasyonları, bellek yönetimi ve varlık (asset) entegrasyon süreçleri üzerine detaylı çalışmalar yürüttüm. VR projelerinde saniye başına düşen kare hızının (FPS) stabil kalması, oyuncuda \"motion sickness\" (hareket hastalığı) oluşmaması için kritik öneme sahip olduğundan güne performans iyileştirmeleriyle başladım.<\/p>


                          <\/p>

                          Bu kapsamda ilk olarak, belleği (RAM) optimize etmek için **Object Pooling (Nesne Havuzu)** mimarisini projeye dahil ettim. Oyun sırasında banttan akan çöplerin sürekli olarak `Instantiate` (yaratma) ve `Destroy` (yok etme) komutlarıyla işlenmesi, Garbage Collector (Çöp Toplayıcı) üzerinde ani yüklenmelere (spike) sebep oluyordu. Geliştirdiğim `ObjectPoolManager` sistemi sayesinde, objeleri oyunun başında bir havuzda oluşturup, kullanıldıkça aktif hale getirerek ve işi bittiğinde tekrar havuza geri göndererek bu işlem yükünü tamamen ortadan kaldırdım.<\/p>


                          <\/p>

                          Daha sonra grafik performansı üzerinde çalışarak render maliyetlerini düşürmeyi hedefledim. Sahnede sabit duran modülleri (ConveyorSystem vb.) \"Static\" olarak işaretledim ve Universal Render Pipeline (URP) ayarlarından **Mixed Lighting (Karma Işıklandırma)** modunu yapılandırdım. Gerçek zamanlı ışık ve gölge hesaplamalarının VR başlığındaki işlemci maliyetini azaltmak için statik objelerin ışık haritalarını fırınladım (Lightmap Baking). Böylece görsel kaliteden ödün vermeden render performansında ciddi bir artış elde ettik.<\/p>


                          <\/p>

                          Arayüz (UI) altyapısı için, VR ortamında oyuncunun fiziksel olarak etkileşime girebileceği, `CoreSystems_Module` ile haberleşecek yeni UI Button prefab'lerinin (taslak objelerinin) hiyerarşik yapılarını ve collider (çarpışma) ayarlarını kurgulayıp projeye entegre ettim.<\/p>


                          <\/p>

                          Günün son görevi olarak, fabrikada \"Kalite Kontrol Yöneticisi\" (Overseer) rolünü üstlenecek olan yapay zeka dronunun 3D model optimizasyonlarını gerçekleştirdim. Modelin VR için polygon sınırlarını ve pivot noktalarını ayarladıktan sonra, hem materyal verilerini tek bir dosyada tutması hem de projeye hızlı yüklenmesi (fast-loading) avantajlarından dolayı modeli **.glb (glTF Binary)** formatında dışa aktardım (export) ve Unity projemizin Asset klasörüne sorunsuz bir şekilde aktarımını sağladım.<\/p>


                          <\/p>


                          <\/p>


                          <\/p>

                          Git Commit Mesajları:<\/strong><\/p>

                          1. <\/span>[07:47]<\/strong> (9c273a7<\/em>) perf(graphics): bake static lighting and optimize URP mixed mode Optimized rendering performance for Meta Quest by marking environment objects (walls, floor, bins) as static and generating lightmaps. Configured Directional Light to Mixed mode to bake static shadows while preserving real-time illumination for dynamic objects. This significantly reduces draw calls and GPU shadow calculation overhead in VR.<\/li>
                          2. <\/span>[11:26]<\/strong> (5324fd3<\/em>) perf: Implement Object Pooling architecture for memory optimization - Created queue-based `ObjectPoolManager` to handle object lifecycle and reuse efficiently. - Refactored `WasteSpawner` to utilize `SpawnFromPool` instead of heavy `Instantiate` calls, preventing GC spikes. - Updated `BinTrigger`, `DestroyZone`, and `FloorZone` to use `ReturnToPool` instead of `Destroy`. - Ensured rigidbodies' physical properties (linear\/angular velocity) are properly reset upon respawn to maintain consistent VR physics.<\/li>
                          3. <\/span>[17:19]<\/strong> (54b9167<\/em>) feat: Add UI Button prefabs and update CoreSystems module Imported and configured new UI Button prefabs (Play, Pause, Ok, Retry, Setting). Updated CoreSystems_Module prefab.<\/li>
                          4. <\/span>[18:57]<\/strong> (80d2986<\/em>) chore(assets): Add QC Drone 3D model (.glb) - Imported the QC_Drone.glb 3D model and its associated .meta files into the project. - This asset will be used for the Overseer\/Quality Control drone in the factory environment.<\/li><\/ol>\n\n--- DAY 15 (2026-07-22) ---\n

                            15. Gün (22.07.2026) Çalışma Raporu<\/strong><\/p>


                            <\/p>


                            <\/p>

                            Bugün, geliştirmekte olduğum \"Recycle Rush VR\" projesinin çekirdek döngüsünü (core loop) ve oyuncu hissiyatını (game feel) profesyonel bir seviyeye taşımak üzerine yoğunlaştım. Gün içinde tasarım, yapay zeka, fizik sorunlarının çözümü ve ses yönetimi olmak üzere dört ana başlıkta çalışmalar gerçekleştirdim.<\/p>


                            <\/p>

                            İlk olarak, oyun alanına canlılık katması amacıyla bir Kalite Kontrol (QC) Dronu entegre ettim. Dronun oyuncunun performansına anlık tepki verebilmesi için yazılım mimarisinde **Finite State Machine (FSM - Sonlu Durum Makinesi)** tasarım desenini kullandım. Dron için `Idle`, `Happy`, `Angry` ve `Sad` durumları oluşturdum. Bu yapay zeka; `ScoreManager` ve `DestroyZone` gibi sistemlerden gelen event'leri (olayları) dinleyerek, doğru atışlarda mutlu, yanlış atışlarda sinirli olacak şekilde yüz ifadelerini (materyal\/renk bazlı) dinamik olarak değiştiriyor.<\/p>


                            <\/p>

                            Oyunun başlangıcını daha etkileyici kılmak için `UIManager` üzerinden bir başlangıç sekansı (Countdown) yazdım. Coroutine ve Lerp matematik fonksiyonlarını kullanarak 3-2-1-GO şeklinde büyüyüp küçülen (Pop animasyonlu) bir geri sayım sistemi geliştirdim.<\/p>


                            <\/p>

                            Oynanış testleri sırasında, atılan çöplerin geri dönüşüm kutularının ağzından sektiğini ve içine düşmediğini tespit ettim. VR fizik çarpışmalarını (Collision) detaylıca incelediğimde, sorunun kutuların üzerindeki \"Convex Mesh Collider\" bileşenlerinden kaynaklandığını buldum. Bu karmaşık collider'ları silip, algılama alanlarını (Trigger Bounds) sadece basit bir Box Collider ile yeniden boyutlandırarak objelerin kutulara pürüzsüzce işlenmesini sağladım.<\/p>


                            <\/p>

                            Oyuncu hissiyatını (Immersion) maksimuma çıkarmak için Ses (Audio) ve Dokunsal (Haptic) sistemlerini baştan yapılandırdım. `XRGrabInteractable` bileşeninin event'lerini dinleyen ve fiziği bozmadan çalışan `WasteAudioFeedback` adında yeni bir script yazarak bunu tüm atık prefablarına entegre ettim. Böylece objeyi tutma (Grab) ve fırlatma (Release) anlarında anlık ses efektleri ve VR kontrolcülerinde titreşim (Haptic) çalmasını sağladım. Ek olarak `AudioManager` sistemini genişleterek, yere düşüp zaman aşımına uğrayan çöpler için özel bir ceza sesi (Floor Penalty) ekledim.<\/p>


                            <\/p>

                            Günün sonunda, VR donanımlarında yaşanan FPS düşüşlerini analiz ettim. Optimizasyon sağlamak amacıyla Post-Processing profilindeki Bloom efektinin \"High Quality Filtering\" seçeneğini kapattım ve `MainGame` sahnesindeki Ambient Lighting (Ortam Işıklandırması) ile Skybox ayarlarını performansı artıracak şekilde güncelledim. Tüm bu geliştirmeleri temiz kod (Clean Code) prensiplerine uygun olarak tamamlayıp, Git üzerinden parçalı (atomic) commitler ile versiyonlayarak projeye başarılı bir Pull Request (PR) attım.<\/p>


                            <\/p>


                            <\/p>


                            <\/p>

                            Git Commit Mesajları:<\/strong><\/p>

                            1. <\/span>[06:12]<\/strong> (edb59bf<\/em>) feat: implement QC Drone AI with Finite State Machine - Added FSM architecture for QC Drone (Idle, Happy, Angry, Sad states). - Integrated color changing and rotation mechanics for visual feedback. - Subscribed drone events to ScoreManager and DestroyZone. - Extracted QC_Drone from ConveyorSystem_Module to prevent static batching issues. - Exposed spawn offset for easier positioning in the Editor.<\/li>
                            2. <\/span>[10:19]<\/strong> (6ae108d<\/em>) feat: implement animated start countdown sequence - Added new GameState.Countdown to GameManager. - Bypassed incomplete tutorial flow temporarily. - Implemented 3-2-1-GO animation coroutine in UIManager. - Fixed softlock issue when UI text is missing.<\/li>
                            3. <\/span>[14:07]<\/strong> (c2ab6f6<\/em>) perf: optimize VR post-processing and update QC Drone prefab - Disabled 'High Quality Filtering' in the PostProcessingManager Profile (Bloom) to significantly improve VR performance and maintain stable frame rates. - Updated QC_Drone prefab settings to ensure proper visual state management and alignment within the scene.<\/li>
                            4. <\/span>[15:48]<\/strong> (a7d088d<\/em>) chore: update core systems, recycling bins, and waste prefabs - Updated CoreSystems_Module prefab. - Updated all recycling bin prefabs (Blue, Green, Red, Yellow). - Updated various waste prefabs across Glass, Metal, Paper, and Plastic categories.<\/li>
                            5. <\/span>[16:21]<\/strong> (9b6ecf9<\/em>) feat: implement waste interaction audio and floor penalty sound system - Created 'WasteAudioFeedback' script to trigger grab\/release SFX and haptics independently of physics. - Updated 'AudioManager' to support and play a dedicated floor penalty audio clip. - Modified 'FloorZone' to trigger the penalty sound when uncollected waste is destroyed.<\/li>
                            6. <\/span>[16:27]<\/strong> (f95f037<\/em>) style: update MainGame scene lighting and environment settings - Changed ambient lighting mode and removed the default skybox material. - Adjusted ambient sky color and subtractive shadow colors for better scene visibility and mood. - Updated lighting data asset references within the MainGame scene.<\/li><\/ol>\n\n--- DAY 16 (2026-07-23) ---\n

                              16. Gün (23.07.2026) Çalışma Raporu<\/strong><\/p>


                              <\/p>


                              <\/p>


                              <\/p>

                              Yapılan Çalışmalar:<\/p>


                              <\/p>

                              Bugün, VR projemizin ana oynanış döngüsünü (Core Gameplay Loop) daha rekabetçi ve oyuncu açısından tatmin edici bir hale getirmek üzerine yoğunlaştım. Bu kapsamda veri yönetimi, arayüz güncellemeleri ve ses geri bildirim sistemleri üzerinde geliştirmeler yaptım.<\/p>


                              <\/p>

                              Top 3 Sıralama (Ranking) Sisteminin Geliştirilmesi:<\/p>

                              Oyunun tekrar oynanabilirliğini artırmak amacıyla, `ScoreManager` sınıfındaki tekli yüksek skor (High Score) yapısını iptal ederek yerine dinamik bir \"Top 3\" listesi entegre ettim. Sistem, her oyun sonunda güncel skoru alıp `PlayerPrefs` üzerindeki mevcut skorlarla karşılaştırıyor, büyükten küçüğe sıralama (Array.Sort ve Array.Reverse) yaparak en iyi 3 skoru hafızaya kaydediyor. Eski oyuncuların verilerinin kaybolmaması adına geriye dönük uyumluluk (backward compatibility) sağlayan bir taşıma (migration) bloğu yazdım.<\/p>


                              <\/p>

                              Dinamik Fiziksel Skor Tabelası (UI):<\/p>

                              Oyun evrenindeki fiziksel skor tabelasını yöneten `RankingBoard.cs` scriptini güncelledim. Tablo artık gereksiz buton veya paneller barındırmayan minimalist bir tasarımla, hafızadaki Top 3 skoru TextMeshPro üzerinden altın sarısı renk vurgularıyla dinamik olarak listeliyor.<\/p>


                              <\/p>

                              Olay Güdümlü (Event-Driven) Kombo Ses Sistemi:<\/p>

                              Oyuncu başarısını ödüllendirmek (Juice) amacıyla `AudioManager` sınıfına özel kombo sesleri eklendi. `ScoreManager`'dan gelen Action event'leri dinlenerek, oyuncunun ardışık doğru atışlarında belirli çarpan eşiklerine (x2 ve x3 multiplier) ulaşması durumunda \"Combo!\" ses efektinin otomatik olarak tetiklenmesini sağlayan yapı kuruldu.<\/p>


                              <\/p>

                              Fizik Düzenlemeleri ve Versiyon Kontrolü:<\/p>

                              Gün içinde prefablar (Cam ve Metal atıklar) üzerinde meydana gelen XR fizik hatalarını ve obje spawner'daki eşzamanlı çalışma (reentrancy) bug'ını tespit edip düzelttim. Ayrıca projenin Git geçmişini düzenli tutmak adına; kod güncellemeleri, ses eklemeleri ve `MainGame` sahnesi\/`Editor.meta` dosyalarındaki senkronizasyon işlemlerini profesyonel bir şekilde \"Atomic Commit\" mantığıyla ayrı ayrı repoya pushladım. Gün sonunda `Assets`, `ProjectSettings` ve `Packages` klasörlerini izole ederek standartlara uygun temiz bir proje yedeği aldım.<\/p>


                              <\/p>


                              <\/p>


                              <\/p>


                              <\/p>

                              Git Commit Mesajları:<\/strong><\/p>

                              1. <\/span>[08:27]<\/strong> (3bf350d<\/em>) feat: implement high score tracking and PlayerPrefs saving - Added HighScore property to ScoreManager. - Integrated PlayerPrefs to load and save the all-time high score. - Subscribed to GameManager's GameState changes to automatically save the high score upon GameOver.<\/li>
                              2. <\/span>[09:33]<\/strong> (0ab22f0<\/em>) feat(ui): implement dynamic ranking board and fix spawner reentrancy bug - Added RankingBoard.cs to automatically fetch and display the high score with golden text styling. - Imported scoreboard.glb 3D model to act as the physical Arcade Ranking TV. - Created RankingSetupTool.cs Editor script to forcefully unpack GLB prefabs and fix infinite scale import issues. - Fixed a critical event reentrancy bug in UIManager.cs where skipping the countdown caused WasteSpawner to receive conflicting state changes and permanently freeze. - Added state-tracking debug logs to WasteSpawner.cs for better lifecycle visibility.<\/li>
                              3. <\/span>[13:34]<\/strong> (29e3cd2<\/em>) Fix: Update Glass and Metal waste prefabs with working XR physics - Imported correctly configured Glass and Metal waste prefabs from teammate. - Resolved previous physics and interaction bugs where items would disappear or could not be thrown. - Ensured XRGrabInteractable and colliders are properly set up for flawless VR grabbing.<\/li>
                              4. <\/span>[17:15]<\/strong> (5f9f8f8<\/em>) chore: remove obsolete RankingSetupTool script - Deleted unused RankingSetupTool.cs and its associated .meta file from the Editor folder. - Cleaned up the codebase by removing unnecessary custom editor extensions to improve project maintainability and reduce clutter.<\/li>
                              5. <\/span>[17:17]<\/strong> (bdcf3bb<\/em>) feat(audio): add combo sound effect asset - Added combo.mp3 and its associated .meta file to the Sounds directory. - This audio asset will be utilized by the AudioManager to provide auditory feedback when players reach specific combo multipliers.<\/li>
                              6. <\/span>[17:33]<\/strong> (22900b7<\/em>) feat(audio): implement combo sound effect logic - Updated AudioManager.cs to support a dedicated combo sound clip and playback method. - Modified ScoreManager.cs to automatically trigger the combo audio feedback when players hit multiplier thresholds (e.g., 3 and 5 consecutive correct hits).<\/li>
                              7. <\/span>[17:42]<\/strong> (912f5c0<\/em>) feat(ui): implement top 3 high scores ranking system - Upgraded ScoreManager to track, sort, and persist the top 3 highest scores using PlayerPrefs instead of a single score. - Updated RankingBoard UI script to dynamically display the top 3 rankings on the physical board in the game environment.<\/li>
                              8. <\/span>[17:44]<\/strong> (206a45a<\/em>) chore(scene): update MainGame scene and sync metadata - Saved recent inspector changes and object property updates in the MainGame scene (e.g., audio clip assignments). - Tracked newly generated Editor.meta file to keep the project folder structure properly synchronized.<\/li><\/ol>\n\n--- DAY 17 (2026-07-24) ---\n

                                17. Gün (24.07.2026) Çalışma Raporu<\/strong><\/p>


                                <\/p>


                                <\/p>

                                Bugün, Recycle Rush VR projemizin performansını artırmak ve oyun döngüsünün stabilizasyonunu sağlamak amacıyla mimari tarafta oluşan bazı kritik hataları (bug) tespit edip çözümledim. Ağırlıklı olarak nesne üretim sistemi (Spawner), fizik motoru ve durum makinesi (State Machine) üzerine yoğunlaştım.<\/p>


                                <\/p>

                                1. \"Phantom Effect\" (Hayalet Etkisi) ve Object Pool Optimizasyonu:<\/p>

                                Projenin performansını artırmak (Garbage Collector yükünü azaltmak) amacıyla kurduğum Nesne Havuzu (Object Pool) sisteminde kritik bir çökme (Exception) tespit ettim. Havuza gönderilen bazı atık objeleri, oyun içindeki başka tetikleyiciler (örneğin `FloorZone` adlı yere düşme ceza sistemi) tarafından hafızadan tamamen siliniyordu (Destroy). `ObjectPoolManager` kuyruktan (queue) yeni obje çekmeye çalıştığında, bu silinmiş ölü referanslara denk geldiği için sistem tıkanıyordu.<\/p>

                                Çözüm: Kuyruktan eleman çekerken katı bir Null kontrolü (Null Validation) algoritmaya dahil ettim. Ayrıca havuzlama indeksini etiketler (tag) yerine doğrudan `prefab.name` üzerinden yapılandırarak yanlış obje doğma sorununu kalıcı olarak çözdüm.<\/p>


                                <\/p>

                                2. \"Dirty State\" ve Fiziksel Çarpışma Hatalarının Çözümü:<\/p>

                                Oyunun ileri safhalarında atık nesneleri birbirlerinin içine geçip uzay boşluğuna fırlamaya (Physics Explosion) başlamıştı. Bu sorunun kök nedenini (root cause) iki aşamalı bir yaklaşımla tespit ettim:<\/p>

                                Fiziksel Çakışma:`WasteSpawner` kodunda objelerin doğma koordinatlarına eklediğim rastgele sapma (random offset) bandın akış yönü olan X eksenindeydi. Bu sapmayı bandın genişliği olan Z eksenine kaydırarak objelerin iç içe doğmasını (collider intersection) tamamen engelledim.<\/p>

                                Kirli Durum (Dirty State):Havuzdan geri çağrılan objelerin, önceki yaşamlarındaki hız ve dönüş momentlerini koruduğunu fark ettim. Nesneler havuzdan çıktığı an `Rigidbody` bileşenlerindeki doğrusal ve açısal hızları (linear\/angular velocity) zorunlu olarak `Vector3.zero` değerine çekerek objelere bir nevi \"fabrika ayarlarına dönüş\" uyguladım. Ayrıca süzülme (Antigravity) özelliği kapalı olan objeler için `useGravity = true` atamasını zorunlu kılarak bant yerçekimine doğru tepki vermelerini sağladım.<\/p>


                                <\/p>

                                3. Oyun Mantığı ve VR Arayüz Entegrasyonu:<\/p>

                                Arka plandaki fizik sorunlarını çözdükten sonra, oyuncunun etkileşime girdiği UI (Arayüz) sistemlerini güncelledim.<\/p>

                                * `GameManager` içindeki State Machine (Durum Makinesi) yapısına `Countdown` (Geri Sayım) durumunu geri kazandırarak UI panelleriyle senkronize çalışmasını sağladım.<\/p>

                                * Oyuncunun VR kontrolcüsüyle fiziksel butonlara bastığı an oyunun fiziğinin bozulmadan duraklatılıp başlatılabilmesi için `TogglePauseGame` ve `FinishCountdown` köprü (endpoint) metotlarını entegre ettim.<\/p>


                                <\/p>

                                Sonuç:<\/p>

                                Yapılan bu mimari iyileştirmeler ve hata ayıklamaları sonucunda, oyunun bellek yönetimi stabil hale getirildi ve VR ortamında hareket hastalığına (motion sickness) sebep olabilecek ani fiziksel hatalar tamamen ortadan kaldırıldı.<\/p>


                                <\/p>


                                <\/p>


                                <\/p>

                                Git Commit Mesajları:<\/strong><\/p>

                                1. <\/span>[10:25]<\/strong> (0df97d4<\/em>) fix(audio): resolve syntax error in AudioManager - Fixed a compilation error caused by missing closing braces in AudioManager.cs. - Ensured the script compiles successfully without breaking the combo sound logic.<\/li>
                                2. <\/span>[16:24]<\/strong> (e7151c0<\/em>) fix(game-manager): restore countdown state and UI control methods - Restored missing 'Countdown' state to the GameState enum for UIManager compatibility. - Added 'FinishCountdown' and 'TogglePauseGame' helper methods for UI transitions and VR menu handling.<\/li>
                                3. <\/span>[17:26]<\/strong> (d10e2d0<\/em>) chore(scene): update MainGame scene assignments and meta sync - Saved latest scene Inspector assignments and physical setup in MainGame.unity. - Synchronized MainGame scene meta files with version control.<\/li>
                                4. <\/span>[17:43]<\/strong> (a0c0bf8<\/em>) fix(core): resolve object pool phantom effect and spawner physics glitches - Refactored ObjectPoolManager to index pools by prefab.name instead of tags, preventing incorrect object instantiation. - Implemented robust null-checks in the pool queue to resolve the \"Phantom Effect\" caused by externally destroyed references. - Corrected the random offset axis in WasteSpawner from X to Z to eliminate longitudinal overlapping and physics explosion bugs. - Disabled default zero-G forces in AntigravityItem to ensure spawned items properly adhere to conveyor belt gravity.<\/li><\/ol>\n\n--- DAY 18 (2026-07-27) ---\n

                                  18. Gün (27.07.2026) Çalışma Raporu<\/strong><\/p>


                                  <\/p>


                                  <\/p>

                                  Bugün, projemizin ana oynanış döngüsündeki kritik fizik hatalarını çözmeye ve oyun alanımızı görsel olarak tamamlamaya odaklandık.<\/p>


                                  <\/p>

                                  Oyun testleri sırasında atık nesnelerinin zaman zaman uzaya fırladığını (physics explosion) veya banttan düştükten sonra yerde devrilmeden, doğal olmayan bir şekilde tamamen dik durduğunu fark ettim. Sorunun kaynağını bulmak için projedeki fizik scriptlerini detaylıca inceledim.<\/p>


                                  <\/p>

                                  İlk olarak `BeltMovement.cs` (Konveyör Bant) scriptini refactor ettim. Önceki yapıda bant her `FixedUpdate` karesinde geriye ışınlanarak (teleportation) nesneleri ileri sürüklüyordu; bu da anlık fiziksel titremelere ve çakışmalara sebep oluyordu. Bu yapıyı tamamen silerek, bandın üzerindeki nesnelere `OnCollisionStay` metodu ile pürüzsüz bir `linearVelocity` (gerçek fiziksel hız) uygulayacak şekilde güncelledim. Ayrıca, nesnelerin banttan düştüklerinde dik kalma sorununun rotasyon kilitlerinden kaynaklandığını tespit ettim ve `OnCollisionExit` anında bu kilitleri (`RigidbodyConstraints.None`) kaldırarak nesnelerin doğal şekilde devrilmesini sağladım.<\/p>


                                  <\/p>

                                  Doğma (Spawn) anında yaşanan patlamaları engellemek için `WasteSpawner.cs` içerisindeki güvenlik kontrolünü güncelledim. `OverlapSphere` yarıçapını 0.35m'ye çıkardım ve nesnelerin üst üste binip fırlamasını kesin olarak önlemek amacıyla `ObjectPoolManager` içerisindeki `maxDepenetrationVelocity` değerini 0.8f'e düşürdüm. Ek olarak, `Paper` prefabında tespit ettiğim devasa iç pozisyon kaymasını (offset) sıfırlayarak kağıt atıkların havada veya bant dışında doğmasını engelledim.<\/p>


                                  <\/p>

                                  Günün ikinci yarısında takım arkadaşımın hazırladığı Pano ve TV Askılığı (TV Holder) modellerini projeye entegre ettik. `Buttons_Module` prefabına Exit (Çıkış) butonunu ekleyip bozulan Animator ayarlarını düzelttik ve oyun adını ile LinkedIn hesaplarımızı panoya ekleyerek `MainGame` sahnesini güncelledik.<\/p>


                                  <\/p>

                                  Günün sonunda, yaptığımız tüm bu mimari iyileştirmeleri (Object Pooling, Event-Driven Architecture, Physics Optimizations) detaylıca anlatan profesyonel bir `README.md` dokümantasyonu hazırladım. Yapılan tüm işlemleri Atomic Commit'ler halinde gruplayıp, takım çalışmamızı özetleyen detaylı bir Pull Request ve Issue oluşturarak bugünkü mesaimi tamamladım.<\/p>


                                  <\/p>


                                  <\/p>


                                  <\/p>


                                  <\/p>

                                  Git Commit Mesajları:<\/strong><\/p>

                                  1. <\/span>[12:49]<\/strong> (b68ee26<\/em>) Fix: Resolve physics anomalies, spawn overlaps, and false floor penalties - ObjectPoolManager: Added maxDepenetrationVelocity to prevent objects from exploding due to physics collisions upon spawning. - WasteSpawner: Added OverlapSphere check to prevent spawning new items inside existing ones. Removed organic Z-axis randomization for consistent, centered spawning on the belt. - FloorZone: Added IsOnConveyorBelt logic using Raycast and OverlapSphere to prevent items traveling on the belt from receiving false \"long time on floor\" penalties. - BeltMovement, WasteAudioFeedback, AudioManager: Fixed missing tag errors and stabilized audio feedbacks for grabbing and dropping interactions.<\/li>
                                  2. <\/span>[14:55]<\/strong> (1d7fb04<\/em>) Fix: Prevent physics explosions by correcting OverlapSphere check Removed the incorrect AntigravityItem check in WasteSpawner and replaced it with a generic Rigidbody check to ensure objects don't spawn inside each other and fly out of bounds.<\/li>
                                  3. <\/span>[17:58]<\/strong> (d299cb4<\/em>) Fix: Reset Paper prefab local position to ensure correct spawning Reset massive local position offsets (X, Y, Z) to (0,0,0) in Paper.prefab to guarantee it spawns precisely at the target spawner point rather than mid-air.<\/li>
                                  4. <\/span>[18:11]<\/strong> (493faa0<\/em>) Fix: Overhaul conveyor physics and spawn safety systems - Refactored BeltMovement to use continuous linearVelocity instead of FixedUpdate teleportation, eliminating physics jitter. - Added constraints unlock in OnCollisionExit to allow items to tumble naturally. - Expanded WasteSpawner clearance overlap sphere and increased Y-offset for larger items. - Lowered maxDepenetrationVelocity to 0.8f in ObjectPoolManager to completely prevent physics explosions.<\/li>
                                  5. <\/span>[18:52]<\/strong> (bb24f44<\/em>) Chore: Apply physics parameters and update object pool thresholds in scene - Updated MainGame scene configurations to reflect new physics boundaries. - Applied new Kill-Z limits and optimized spawn settings for the Object Pool Manager.<\/li><\/ol>\n\n--- DAY 19 (2026-07-28) ---\n

                                    19. Gün (28.07.2026) Çalışma Raporu<\/strong><\/p>


                                    <\/p>


                                    <\/p>

                                    Bugünkü mesaimde, \"Recycle Rush VR\" projemizin temel geliştirme (Development) sürecinden çıkıp, piyasaya sürülme (Release) ve Kalite Kontrol (QA) aşamasına geçişini yönettim. Takım arkadaşımla çakışmaları (Merge Conflict) önlemek adına GitHub üzerinde Agile metodolojisine uygun olarak esnek bir dal stratejisi (Branching Strategy) kurduk ve kendi çalışma alanıma (`release-prep\/emre`) geçtim.<\/p>


                                    <\/p>

                                    İlk görevim, oyunumuzun Meta Quest (App Lab) mağazası için gerekli olan pazarlama ve vitrin materyallerini hazırlamaktı. Oyunun içinden aldığımız 5 dakikalık ham ve uzun VR görüntülerini analiz ettim. Bu ham görüntüleri manuel olarak saatlerce editlemek yerine, Microsoft Clipchamp'in Yapay Zeka (AI) \"Auto Beat Sync\" özelliğini kullanarak iş akışımı hızlandırdım. Oyunun aksiyonlu anlarını, komboları ve yapay zeka drone'umuzun tepkilerini müziğin ritmine tam oturacak şekilde 16:9 (Yatay) formatta ve 1080p kalitesinde 56 saniyelik dinamik bir fragmana (Gameplay Trailer) dönüştürdüm.<\/p>


                                    <\/p>

                                    Ardından bu videoyu YouTube'a yükleyerek COPPA (Çocukların Çevrimiçi Gizliliğini Koruma) ayarlarını yapılandırdım ve liste dışı linkini doğrudan projemizin `README.md` dosyasına entegre ettim. Bu sayede projemizi inceleyecek olan yöneticilerin veya oyuncuların oyunu indirmeden önce doğrudan mekanikleri (VR Interaction, Haptics, AI Scaling) izleyebilmelerini sağladım.<\/p>


                                    <\/p>

                                    Günün ikinci yarısında, mağaza için gerekli olan teknik metinleri ve etiketleri (Konfor seviyesi, tür, oynanış biçimi) içeren `META_QUEST_STORE.md` adında yepyeni bir dokümantasyon dosyası oluşturdum. Bu dosyanın içerisine yapay, pazarlamacı bir dil yerine; fizik motoru optimizasyonlarında yaşadığımız zorlukları ve başarıları anlatan şeffaf, samimi ve \"bağımsız geliştirici (indie developer)\" ruhuna uygun açıklama metinleri yazdım.<\/p>


                                    <\/p>

                                    Mesaimin sonunda, hazırladığım fragman entegrasyonlarını ve mağaza metinlerini mantıksal parçalara (Atomic Commits) bölerek GitHub'a gönderdim. Tüm bu süreci, projenin piyasaya sürülmeye teknik ve görsel olarak hazır olduğunu anlatan çok detaylı bir Pull Request (PR) metni ile taçlandırarak bugünkü görevlerimi başarıyla tamamladım.<\/p>


                                    <\/p>


                                    <\/p>


                                    <\/p>


                                    <\/p>

                                    Git Commit Mesajları:<\/strong><\/p>

                                    1. <\/span>[13:28]<\/strong> (c280184<\/em>) Docs: Add Gameplay Trailer placeholder and enhance presentation - Added a dedicated \"Gameplay Trailer\" section to the README.md. - Prepared the documentation for the upcoming promotional video integration. - Further polished the structure to highlight the professional presentation and marketing assets of the project.<\/li>
                                    2. <\/span>[19:01]<\/strong> (a36c51f<\/em>) Docs: Integrate official gameplay trailer into README Docs: Integrate official gameplay trailer into README<\/li>
                                    3. <\/span>[19:02]<\/strong> (e03f00d<\/em>) Docs: Add Meta Quest Store metadata and promotional copy - Created a comprehensive store listing document (META_QUEST_STORE.md) for the App Lab release. - Added localized descriptions, genre tags, and comfort level requirements. - Humanized the promotional text to reflect authentic indie developer insights, discussing physics optimization challenges and engineering achievements.<\/li><\/ol>\n\n--- DAY 20 (2026-07-29) ---\n

                                      20. Gün (29.07.2026) Çalışma Raporu<\/strong><\/p>


                                      <\/p>


                                      <\/p>


                                      <\/p>

                                      Bugün, \"Recycle Rush VR\" projemizin final teslimatı (final-delivery) öncesi en kritik optimizasyon ve hata ayıklama (bug-fixing) süreçlerine odaklandığım, oldukça yoğun ama bir o kadar da verimli bir gündü. Temel oyun döngüsündeki fizik hatalarını, arayüz etkileşimlerini ve obje üretim (spawn) sistemini kusursuz hale getirmek için çalıştım.<\/p>


                                      <\/p>

                                      Güne ilk olarak VR arayüz (UI) sorunlarıyla başladım. Oyuncunun Game Over panelindeki butonlara lazerle tıklayamaması (ışının kırmızı yanarak etkileşime girmemesi) sorununu tespit ettim. İncelemelerim sonucunda XR Ray Interactor bileşeninin arayüz ile etkileşime kapalı olduğunu ve Canvas üzerinde gerekli Event Camera referanslarının eksik olduğunu belirledim. Unity Inspector üzerinden bu yapılandırmaları düzelterek VR menü etkileşimini stabil hale getirdim.<\/p>


                                      <\/p>

                                      Ardından, oyunun temel mekaniği olan yürüyen bant (conveyor belt) ve çöp objeleriyle (Waste) ilgili ciddi fizik bug'larıyla karşılaştım. Objeleri elimizle tutup bant dışına veya havaya bıraktığımızda yere düşmek yerine uzay boşluğundaymış gibi havada donup kalıyorlardı. Bunun nedenini araştırdığımda, XR Interaction Toolkit'in objeyi elden bıraktığımız anda eski \"Kinematic\" durumuna zorla geri döndürdüğünü fark ettim. Kod içerisinde `BeltItem.cs` scriptine güvenli bir gecikme (0.1 saniye) ekleyerek Unity'nin bu müdahalesini aştım.<\/p>


                                      <\/p>

                                      Bu süreçte bir başka ilginç bug daha yakaladım: Bazı objeler (örneğin şişeler) sorunsuz düşerken, cam kadeh gibi spesifik objeler havada kalmaya devam ediyordu. Sorunun kaynağının, kadeh prefab'ının fizik motorunun (Rigidbody) ana objede değil, alt objede (child) bulunması olduğunu tespit ettim. `GetComponentInChildren<Rigidbody>()` metodunu kullanarak kodu daha dinamik hale getirdim ve `Physics.SyncTransforms()` fonksiyonu ile modellerin görsel kaymalarını (offset bozulmalarını) engelleyerek fizik sorununu kökten çözdüm.<\/p>


                                      <\/p>

                                      Günün ilerleyen saatlerinde, objelerin yürüyen banta geliş aralıklarının bozuk olduğunu (bazen üst üste, bazen de çok geç geldiklerini) fark ettim. `WasteSpawner.cs` içerisindeki çakışma önleyici `OverlapSphere` fonksiyonunun yarıçapının çok büyük (0.5m) bırakıldığını tespit ettim. Bu yarıçapı 0.15m'ye düşürerek banttaki çöplerin tamamen kusursuz ve eşit zaman aralıklarıyla doğmasını sağladım. Ek olarak Kill-Z (yok olma sınırı) hatalarını temizledim ve yürüyen banta oturan objelerin Y-ekseni hizalamalarını mükemmelleştirdim.<\/p>


                                      <\/p>

                                      Günün sonunda, yaptığım tüm bu kritik mekanik, fizik, UI düzeltmelerini ve yeni eklenen çevre tasarımlarını (Drone prefab vb.) Git üzerinde birbirine karışmayacak şekilde \"Atomic Commit\" mantığıyla 4 ayrı parçaya böldüm. Hazırladığım bu temiz commit'leri profesyonel bir Pull Request (PR) başlığı ve açıklaması altında toplayarak ana branch'e gönderdim. Bolca hata çözdüğüm, çok çalıştığım ama sistemin kusursuz aktığını gördüğümde tüm yorgunluğuma değen harika bir mesai oldu.<\/p>


                                      <\/p>


                                      <\/p>


                                      <\/p>


                                      <\/p>

                                      Git Commit Mesajları:<\/strong><\/p>

                                      1. <\/span>[13:52]<\/strong> (64a00bf<\/em>) Docs: Integrate finalized gameplay screenshots and store assets - Replaced all placeholder imagery in docs\/assets with high-fidelity, finalized in-game screenshots. - Added layered logo components (foreground\/background) required for the Meta Quest App Lab submission. - Visually completed the README.md to accurately reflect the final aesthetic, UI, and gameplay mechanics of the project.<\/li>
                                      2. <\/span>[19:26]<\/strong> (51f2068<\/em>) fix: resolve conveyor belt object alignment and Kill-Z destruction issues - BeltItem.cs: Implemented dynamic surface alignment using Collider.bounds and Physics.SyncTransforms(). Spawned objects now precisely calculate the height difference and snap perfectly to the belt's top surface, eliminating all floating and sinking visual bugs. - ObjectPoolManager.cs: Removed the strict maxDistance threshold from the Kill-Z logic. This prevents false-positive destruction of objects (like bottles and cans) that spawn far from the scene origin and roll slightly. - AntigravityItem.cs: Refined physics state handling and interaction logic for antigravity-affected items to ensure stable movement.<\/li>
                                      3. <\/span>[19:54]<\/strong> (b6e42c5<\/em>) fix: refine waste spawner intervals, belt physics, and adjust difficulty curve - BeltMovement.cs: Refactored internal variables and exposed the BeltCollider property to allow items to calculate precise surface alignment dynamically. - WasteSpawner.cs: Fixed inconsistent spawn gaps by replacing random intervals with a fixed average, and added a quick 0.2s retry logic for blocked spawn points instead of skipping a full spawn cycle. - DifficultyManager.cs: Adjusted the difficulty multipliers (reduced from 1.2\/1.5\/2.0 to 1.15\/1.3\/1.45) to create a smoother, more balanced gameplay progression.<\/li>
                                      4. <\/span>[22:43]<\/strong> (2167aeb<\/em>) feat(environment): integrate new Drone prefab into the project Added and configured the Drone prefab along with its associated meta file for use in the game environment.<\/li>
                                      5. <\/span>[22:50]<\/strong> (9b1f8ea<\/em>) fix(gameplay): resolve object floating physics and stabilize spawn intervals Fixed an issue in BeltItem.cs where prefabs with Rigidbody components on child objects would float above the conveyor belt. Implemented Physics.SyncTransforms() to correctly update physics positions without disrupting local child offsets. Added a 0.1s safe delay to the physics release routine to guarantee the XR Interaction Toolkit completes its state restoration, preventing items from freezing mid-air when dropped. Decreased the OverlapSphere collision radius in WasteSpawner.cs from 0.5m to 0.15m. This eliminates false blockage detections and ensures objects spawn at perfectly consistent time intervals.<\/li><\/ol>\n\n--- DAY 21 (2026-07-30) ---\n

                                        21. Gün (30.07.2026) Çalışma Raporu<\/strong><\/p>


                                        <\/p>

                                        Bugün, projenin final aşamasına yaklaşırken test süreçlerinde tespit ettiğimiz kritik uç durum (edge-case) hatalarını çözmeye ve oyunu Meta Quest Store için derlemeye (Build) odaklandım. İlk olarak, oyuncu oyun bitmeden uygulamayı aniden kapattığında veya yeniden başlat butonuna bastığında en yüksek skorların kaydedilmediği veri kaybı problemini ele aldım. Bu sorunu çözmek için `ScoreManager.cs` scriptinde refactoring yaparak Unity'nin `OnApplicationQuit` metodunu ezdim (override). Böylece oyun kapanırken veya skor sıfırlanırken verilerin `PlayerPrefs` üzerine güvenli bir şekilde yazılması sağlandı ve veri kaybı ihtimali tamamen ortadan kaldırıldı.<\/span><\/p>

                                        Ardından projenin çekirdeğini oluşturan fizik motoru ve bellek yönetimi (Object Pooling) üzerindeki kronik sorunları çözmeye yoğunlaştım. Konveyör bandı üzerinde çöplerin üst üste binmesinden kaynaklanan fizik kilitlenmelerini (deadlock) ve mesh kaymalarını engellemek için mesafe ölçüm (sqrMagnitude) kontrolleri ekledim. Hızlı fırlatılan objelerin yerçekiminden kaçıp banttan düşmesi (object tunneling) ve `FloorZone` üzerindeki 3 saniyelik silinme hatalarını (despawn bug) giderdim. Ayrıca Unity 6'nın verdiği fizik uyarılarını susturmak ve RAM şişmesini önlemek adına, obje yaratma ve yok etme döngülerini (lifecycle) tamamen Object Pool (Obje Havuzu) sistemiyle senkronize ettim.<\/span><\/p>

                                        Fizik sorunları çözüldükten sonra, oyunun yaşam döngüsü ve kullanıcı arayüzü (UI) tarafındaki görsel hatalara yöneldim. Oyun ilk açıldığında, henüz ana menüdeyken öğretici (tutorial) sistemine ait yönlendirme okunun erkenden ekranda belirmesi hiyerarşiyi bozuyordu. Bu sorunu çözmek için `TutorialManager` içerisindeki durum yönetimini optimize ettim ve göstergenin aktif olma şartını sadece oyunun başlamaya hazır olduğu `GameState.ReadyToStart` durumuna bağladım. Buna ek olarak, XR Interaction Toolkit örnek prefab'larını güncelledim ve \"Oyun Bitti\" ile \"Duraklat\" panellerindeki çıkış butonlarının dinamik bağlanma (Auto-binding) işlemlerini koda dökerek sahneler arası geçişlerde butonların sorunsuz çalışmasını sağladım.<\/span><\/p>

                                        Oyun içi hatalar temizlendikten sonra, projeyi Meta Store standartlarına uygun olarak derlemek için `Player Settings` üzerinden ciddi optimizasyonlar gerçekleştirdim. VR performansı için doku sıkıştırmasını `ASTC` olarak ayarladım. Meta'nın zorunlu tuttuğu 64-bit mimari gereksinimini karşılamak adına Scripting Backend yapısını `Mono`'dan `IL2CPP`'ye, hedef mimariyi ise `ARM64`'e güncelledim. Yayınlama güvenliği için özel bir dijital imza (Keystore) oluşturup projeye tanımladım ve günün sonunda hata almadan, yüksek performanslı `RecycleRushVR.apk` dosyasını başarıyla oluşturdum.<\/span><\/p>

                                        Günün son aşamasında ise sürüm kontrol ve dokümantasyon süreçlerini tamamladım. Projenin GitHub reposundaki `README.md` dosyasını güncelleyerek kullanılmayan eski görsel taslakları projeden temizledim. Gün boyu yaptığım tüm fizik, UI, kodlama ve dokümantasyon güncellemelerini parçalara bölerek profesyonel commit başlıklarıyla GitHub'a işledim. Son olarak `v1.0.0 Release Candidate` başlığıyla ana projeye yönelik kapsamlı bir Pull Request (PR) açarak geliştirmeleri ana dala entegre ettim ve projenin aktif geliştirme fazını başarıyla noktaladım.<\/span><\/p>


                                        <\/p>


                                        <\/p>


                                        <\/p>

                                        Git Commit Mesajları:<\/strong><\/p>

                                        1. <\/span>[09:59]<\/strong> (71bf643<\/em>) fix(ui): activate exit button and support editor play mode termination - Auto-Binding: Implemented logic in UIManager to automatically find and bind the 'QuitApplication' method to the Exit button within the Game Over panel, preventing missing reference issues. - Editor Support: Added preprocessor directives (#if UNITY_EDITOR) to gracefully stop Play Mode when the Exit button is triggered during Editor testing.<\/li>
                                        2. <\/span>[10:16]<\/strong> (2dfd05b<\/em>) fix(ui): implement auto-binding for exit buttons in pause and game over panels - Dynamic UI Binding: Added logic to UIManager to automatically search, find, and bind the 'QuitApplication' method to the Exit\/Quit buttons inside both the Game Over and Pause panels, eliminating the need for manual Inspector assignments. - Editor Testing Support: Added preprocessor directives (#if UNITY_EDITOR) to correctly terminate Play Mode when an Exit button is pressed within the Unity Editor.<\/li>
                                        3. <\/span>[13:38]<\/strong> (f19569a<\/em>) chore: Auto-update XR Interaction Toolkit sample prefabs Commit automatic Unity editor changes and serialization updates to the XR Origin and Teleport Interactor prefabs. These are standard under-the-hood updates made by the engine.<\/li>
                                        4. <\/span>[13:45]<\/strong> (a95cf35<\/em>) fix: Resolve object tunneling and FloorZone 3-second despawn bug Created a massive dynamic BoxCollider trigger for FloorZone to replace flat MeshColliders, ensuring the 3-second grace period always triggers. Added a 1m thick physical SafetyFloor at Y=-0.5 to prevent high-velocity objects from tunneling through the map.<\/li>
                                        5. <\/span>[13:46]<\/strong> (8c9bccb<\/em>) fix: Object pooling lifecycle alignment and Unity 6 physics warnings Fixed spawn alignment by setting transform positions before SetActive(true). Silenced Unity 6 kinematic linearVelocity console warnings by safely toggling isKinematic states during rigidibody factory reset.<\/li>
                                        6. <\/span>[13:48]<\/strong> (7034e9d<\/em>) fix: Conveyor belt traffic jams, mesh sliding, and edge fall physics Overhauled BeltMovement to track root transforms. Fixed edge stalling by calculating true geometric bounds. Switched to ForceMode.VelocityChange to guarantee mass-independent falling speeds (fixed Scroll shooting and Paper stalling). Added DetachFromBelt logic and prefab initial transform caching to prevent mesh offset sliding.<\/li>
                                        7. <\/span>[13:57]<\/strong> (56a9a27<\/em>) fix: Prevent overlapping waste spawns and improve game state handling Added OverlapSphere checks to WasteSpawner to prevent objects from spawning inside each other. Optimized spawn intervals and updated GameManager state listener logic.<\/li>
                                        8. <\/span>[16:21]<\/strong> (88dd4f0<\/em>) fix: prevent physics deadlock on conveyor belt Resolved a physical deadlock issue on the conveyor belt caused by simultaneously spawned waste objects overlapping. Added a distance check (sqrMagnitude) to prevent objects from continuously pushing each other when their positions are virtually identical. The belt flow is now perfectly smooth.<\/li>
                                        9. <\/span>[16:22]<\/strong> (b42923b<\/em>) refactor: optimize tutorial lifecycle and fix UI pointer timing Overhauled the tutorial lifecycle. Switched from raw Instantiate to ObjectPoolManager to prevent physics glitches. Resolved the double-spawn bug by introducing an _isSpawning flag and restored the retry mechanic to work flawlessly with object pooling logic (activeInHierarchy). Additionally, delayed the yellow UI pointer appearance until the ReadyToStart state, preventing it from floating in the void during MainMenu.<\/li>
                                        10. <\/span>[16:22]<\/strong> (ff06b4f<\/em>) fix: ensure high scores are saved on restart and application quit Prevented data loss in the save system, which previously only triggered upon timer expiration (GameOver). Integrated save triggers into ResetScore() (for restarts) and OnApplicationQuit() (for abrupt exits). High scores are now reliably recorded and displayed on the TV board even if the player restarts or exits before the game ends.<\/li>
                                        11. <\/span>[17:45]<\/strong> (0ec3a67<\/em>) docs: clean up unused image placeholders from README Removed unfinished concept art and placeholder image sections (VR Mockups, UI Concepts, Controller Interactions) from the README.md to maintain a clean, professional, and up-to-date documentation structure.<\/li>
                                        12. <\/span>[20:18]<\/strong> (3db2f0b<\/em>) chore: apply latest hierarchy and component updates to main scene` Saved the latest hierarchy and component state to reflect recent script and reference updates (TutorialManager and ScoreManager changes).<\/li><\/ol>\n\n--- DAY 22 (2026-07-31) ---\n

                                          22. Gün (31.07.2026) Çalışma Raporu<\/strong><\/p>


                                          <\/p>


                                          <\/p>


                                          <\/p>

                                          Bugün, stajımızın ilk 20 günlük periyodunu başarıyla tamamlayıp Recycle Rush projesinin MVP sürümünü Meta Store Alpha kanalına yüklememizin ardından, takım arkadaşımla birlikte ikinci ayın planlamasını ve yol haritasını oluşturmaya odaklandım. Sıfırdan yeni bir projeye başlamak ile mevcut projeyi geliştirmek arasındaki zaman\/maliyet (Time-to-Market) analizini detaylıca tartıştık. Yeni bir projeye başlamanın; sıfırdan uyumlu 3D modeller aramak, arayüz (UI) tasarlamak ve Obje Havuzu (Object Pooling) gibi temel mimarileri baştan kurmak açısından kısıtlı zamanımızı verimsiz kullanmamıza neden olacağına karar verdim. Bunun yerine, çalışan ve test edilmiş hazır kod mimarimizin üzerine kat çıkarak projeyi ölçeklendirme (scaling) stratejisini seçtim.<\/p>


                                          <\/p>

                                          Bu strateji doğrultusunda oyunumuzun vizyonunu tamamen değiştirecek kritik bir mimari karar aldım. İlk ay konveyör bandı üzerinde yaşanan ve çözümü saatler süren kompleks fizik kilitlenmelerini (deadlock) ve sürtünme hatalarını tamamen ortadan kaldırmak amacıyla projeyi Sanal Gerçeklikten (VR), Meta'nın Passthrough (Dış Kamera) teknolojisini kullanan bir Karma Gerçeklik (AR - Mixed Reality) deneyimine geçirmeye karar verdim. Konveyör bandı mekaniğini iptal edip, bunun yerine Spatial Anchors (Uzamsal Çapalar) kullanarak geri dönüşüm kutularını doğrudan oyuncunun fiziksel odasına yerleştiren, çok daha stabil ve performansı yüksek bir oyun döngüsü kodlamayı planladım.<\/p>


                                          <\/p>

                                          Gün sonunda, aldığımız bu mimari kararları projenin ana dizininde `STAJ_2_AY_PLAN.md` isimli bir dokümantasyon dosyasına dökerek GitHub'a işlemeye geçtim. Ancak, dün gönderdiğim sürüm adayı (Release) Pull Request'i staj sorumlumuz tarafından henüz onaylanıp (Merge) ana dala (main) katılmamıştı. Kod çakışmalarını önlemek ve ana dalı kirletmemek adına staj sorumlumuzun tavsiyesi üzerine \"Bağımlı Değişiklikler (Stacked Pull Requests)\" yöntemini uyguladım. Yeni AR planlama dalımı `main` yerine dünkü bekleyen dalımın (branch) üzerinden filizlendirdim. GitHub Desktop üzerinden resmi \"Start a pull request stack\" özelliğini kullanarak, dünkü kodların üzerine binen zincirleme ve bağımlı bir PR açarak versiyon kontrol sürecini kusursuz bir şekilde tamamladım.<\/p>


                                          <\/p>


                                          <\/p>


                                          <\/p>


                                          <\/p>


                                          <\/p>

                                          Git Commit Mesajları:<\/strong><\/p>

                                          1. <\/span>[19:31]<\/strong> (84438c9<\/em>) docs: add phase 2 architectural transition plan to AR Documented the team's decision to pivot the project from VR to AR (Mixed Reality) for the second month of development. Outlined the architectural shift from complex conveyor belt mechanics to spatial anchors (Passthrough technology) to ensure zero physics deadlocks, higher stability, and better scalability.<\/li><\/ol>\n\n--- DAY 23 (2026-08-03) ---\n

                                            23. Gün (03.08.2026) Çalışma Raporu<\/strong><\/p>


                                            <\/p>


                                            <\/p>

                                            Konu:Projenin Karma Gerçeklik (MR) Mimarisine Taşınması ve Passthrough Entegrasyonu<\/p>


                                            <\/p>

                                            Bugün, projenin vizyonu doğrultusunda \"Recycle Rush\" oyununu tamamen kapalı bir Sanal Gerçeklik (VR) deneyiminden, gerçek dünya ile etkileşime giren Karma Gerçeklik (MR) yapısına geçirmeye başladım.<\/p>


                                            <\/p>

                                            Güne, yapılacak tüm teknik işleri planlayarak GitHub üzerinde **\"[Phase 0] AR Scene Foundation and Passthrough Integration\"** başlıklı detaylı bir Issue oluşturarak başladım. Hataları izole edebilmek adına doğrudan ana kod üzerinde çalışmak yerine `feature\/ar-setup-and-passthrough` isminde yeni bir çalışma dalı (branch) açtım.<\/p>


                                            <\/p>

                                            İlk adım olarak, ilerleyen süreçlerde farklı bilgisayarlarda veya ortamlarda sürüm\/ayar farklılığı yaşanmaması için VS Code (IDE) ve Unity Package Manager konfigürasyon dosyalarını standart hale getirip projeye dahil ettim `[chore(config)]`. Ardından projenin Android platformunda dış kamera desteği verebilmesi için gerekli olan OpenXR başlangıç ayarlarını (Settings Initializer) kurdum `[chore(xr)]`.<\/p>


                                            <\/p>

                                            Altyapı hazırlandıktan sonra asıl görev olan AR sahnesinin inşasına geçtim. Eski VR projemin ana sahnesini bozmamak adına kopyalayarak `MainGame_AR` adında tamamen bağımsız yeni bir sahne oluşturdum. Odak noktam artık oyuncunun gerçek odası olacağı için; eski sahnede bulunan kapalı depo duvarlarını, tavanı ve sahte zemin kaplamalarını (blockout modelleri) tamamen temizledim. Bu sayede gereksiz obje çizimlerini (draw calls) engelleyerek projede ciddi bir performans optimizasyonu sağladım.<\/p>


                                            <\/p>

                                            Gerçek dünyayı (Passthrough) gözlükte görebilmek için Universal Render Pipeline (URP) kamerasının Skybox ayarını iptal ettim ve arka planı tamamen saydam (Alpha 0) olacak şekilde Solid Color formatına geçirdim. Teknik entegrasyon aşamasında eski nesil ağır SDK'lar kullanmak yerine, projenin mevcut yapısına en uygun ve modern standart olan **AR Foundation** paketini (AR Session, AR Camera Manager ve AR Camera Background bileşenleri) kullanarak dış kamera akışını başarılı bir şekilde oyuna bağladım. Yeni sahneyi derleme (Editor Build Settings) listesine ekledim `[feat(core)]`.<\/p>


                                            <\/p>

                                            Günün sonunda, yaptığım tüm bu işleri birbirine karıştırmadan 3 ayrı \"Atomic Commit\" (parçalı gönderim) halinde GitHub'a yükledim. Kodların ana projeye dahil edilmesi için İngilizce açıklamalı ve standartlara uygun detaylı bir **Pull Request (PR)** oluşturdum. Yaptığım son kontrollerin ardından PR'ı `main` dalına (branch) başarıyla birleştirdim (merge) ve günün başında açtığım Issue'yu kapattım.<\/p>


                                            <\/p>


                                            <\/p>

                                            Git Commit Mesajları:<\/strong><\/p>

                                            1. <\/span>[13:33]<\/strong> (553cc34<\/em>) chore(config): update IDE and project configuration files - Added VS Code configuration files (extensions, launch, settings) for debugging and IDE integration. - Updated Unity Package Manager local settings.<\/li>
                                            2. <\/span>[15:23]<\/strong> (52f3cb5<\/em>) chore(xr): initialize Android XR settings - Initialized Android XR settings for OpenXR passthrough support. - Updated OpenXR feature sets and configurations.<\/li>
                                            3. <\/span>[18:48]<\/strong> (f471745<\/em>) feat(core): setup AR scene skeleton and passthrough integration - Duplicated main VR scene to create new MainGame_AR scene. - Removed legacy VR environment and blockout models. - Configured Main Camera for passthrough (Solid Color, Alpha 0). - Integrated AR Foundation components (AR Session, Camera Manager, Camera Background).<\/li><\/ol>\n\n--- DAY 24 (2026-08-04) ---\n

                                              24. Gün (04.08.2026) Çalışma Raporu<\/strong><\/p>


                                              <\/p>


                                              <\/p>

                                              Konu: Karma Gerçeklik (MR) Donanım İzinlerinin Yapılandırılması ve Uzamsal Çapa (Spatial Anchor) ile Obje Yerleştirme Sisteminin Geliştirilmesi<\/p>


                                              <\/p>

                                              Yapılan İşler ve Açıklaması:<\/p>

                                              Bugün, projenin geleneksel sanal gerçeklik (VR) altyapısından karma gerçeklik (MR) altyapısına geçişinin en kritik adımlarından biri olan cihaz donanım izinleri ve uzamsal sabitleme (Anchor) mekanikleri üzerine çalıştım. Süreci profesyonel bir şekilde yönetmek adına güne GitHub üzerinde bir Issue oluşturarak başladım ve geliştirmelerimi yapmak üzere `feature\/ar-spatial-anchors-and-permissions` adlı yeni bir branch (dal) açtım.<\/p>


                                              <\/p>

                                              İlk aşamada projenin Unity tarafındaki Android derleme ayarlarını güncelleyerek \"Android XR\" doğrulama hatalarını (validation errors) giderdim. Meta Quest cihazının dış kameralarını ve fiziksel ortam algılama yeteneklerini kullanabilmesi için \"Custom Main Manifest\" dosyası oluşturdum ve projeye `CAMERA`, `USE_ANCHOR_API` ile `PASSTHROUGH` donanım izinlerini manuel olarak koda enjekte ettim. Olası bir veri kaybını veya sahne bozulmasını önlemek adına, projenin AR çekirdeğini oluşturan `XR Origin`, `AR Session` ve `AnchorManager` objelerini `AR_Core` adlı klasör altında Prefab (şablon) haline getirerek mimariyi güvence altına aldım.<\/p>


                                              <\/p>

                                              İkinci aşamada, sanal oyun objelerinin (çöp kutuları ve taşıma bandı) oyuncunun gerçek odasındaki fiziksel koordinatlara kilitlenmesini ve kaymamasını sağlamak amacıyla C# dili ile `SpatialAnchorManager` sınıfını kodladım. Bu sınıf, AR Foundation API'sini kullanarak belirlenen pozisyonlara kalıcı uzamsal çapalar atılmasını yönetmektedir.<\/p>


                                              <\/p>

                                              Günün son görevi olarak, oyuncunun oyun başında eşyaları kendi odasına kendi ergonomisine göre dizebilmesi için interaktif bir \"Oda Kurulum Sihirbazı\" (Setup Wizard) geliştirdim. `ARPlacementManager` adını verdiğim bu yeni yönetici script sayesinde, oyuncunun kontrolcüsünden (kumanda) çıkan sanal lazeri, zemin algılama (Plane Detection) sistemiyle senkronize ettim. Oyuncunun tetiğe basarak sahnede gizli olarak bekleyen objeleri sırayla yanına çağırmasını ve bu objeleri bulunduğu fiziksel konuma kalıcı olarak sabitlemesini sağladım.<\/p>


                                              <\/p>

                                              Tüm bu geliştirmeleri, bağımlılıkları birbirine karıştırmadan modüler (atomic) yapıya uygun olarak 4 farklı commit paketi halinde GitHub'a gönderdim. Günün sonunda geliştirdiğim sistemin testlerini tamamlayarak tüm değişiklikleri detaylı bir Pull Request (PR) üzerinden projenin `main` (ana) branch'ine başarıyla merge ettim (birleştirdim).<\/p>


                                              <\/p>


                                              <\/p>

                                              Git Commit Mesajları:<\/strong><\/p>

                                              1. <\/span>[07:59]<\/strong> (ef8e68e<\/em>) chore(config): resolve Android XR validation errors - Disabled HDR and Post Processing for Android XR compliance. - Updated core ProjectSettings.<\/li>
                                              2. <\/span>[12:42]<\/strong> (4600c6d<\/em>) feat(android): generate custom manifest with MR permissions - Generated Android directory structure in Plugins. - Injected CAMERA and USE_ANCHOR_API permissions. - Enforced PASSTHROUGH feature requirement.<\/li>
                                              3. <\/span>[12:55]<\/strong> (3ee8d54<\/em>) chore(ar): secure core AR systems as prefabs and add spatial anchor logic - Created AR_Core prefab directory. - Converted AR Session, XR Origin, and AnchorManager to prefabs for data safety. - Added SpatialAnchorManager script to handle runtime anchoring.<\/li>
                                              4. <\/span>[15:49]<\/strong> (6454916<\/em>) feat(ar): implement sequential object placement and room setup - Created ARPlacementManager to handle sequential placing of existing scene objects. - Configured AR Raycast and Plane Managers on XR Origin. - Bound XR right controller trigger to the placement action for intuitive setup.<\/li>
                                              5. <\/span>[16:26]<\/strong> (669349e<\/em>) chore(scene): configure AR placement manager and controller inputs - Bound existing scene objects (Conveyor, Bins) to ARPlacementManager. - Integrated AR Raycast Manager and AR Plane Manager into XR Origin. - Linked right controller Activate action to the placement sequence.<\/li><\/ol>\n\n--- DAY 25 (2026-08-05) ---\n

                                                25. Gün (05.08.2026) Çalışma Raporu<\/strong><\/p>


                                                <\/p>


                                                <\/p>

                                                AR Mimari Geçişi ve VFX Entegrasyonu<\/p>


                                                <\/p>

                                                Bugün, projemizin 2. ay \"Karma Gerçeklik (MR) Planlaması\" doğrultusunda, oyunumuzun temelini VR'dan (Sanal Gerçeklik) AR'a (Karma Gerçeklik) taşımak için kritik mimari değişiklikler ve görsel efekt (VFX) entegrasyonları gerçekleştirdim.<\/p>


                                                <\/p>

                                                1. Proje Yönetimi ve Branch (Dal) Yapılandırması<\/p>

                                                Güne her zamanki standartlarımıza uyarak başladım. Öncelikle GitHub Projects (Kanban) panosu üzerinde bugünün görevleri için yeni bir \"Issue\" oluşturdum. Ardından `main` dalını korumak adına doğrudan `main` üzerinde çalışmak yerine `feature\/virtual-portal-vfx` adında yeni bir çalışma dalı (branch) açarak kodlama sürecine güvenli bir başlangıç yaptım.<\/p>


                                                <\/p>

                                                2. Prosedürel Animasyon ve PortalAnimator Geliştirmesi<\/p>

                                                Çöplerin oyuncunun gerçek odasına düşeceği \"Sanal Portal\" mekaniğinin kodlamasını yaptım. Performans kaybı (FPS Drop) yaşatmamak adına Unity'nin ağır Animator bileşeni yerine, matematiksel `Mathf.Sin` dalgalarını kullanan `PortalAnimator.cs` kodunu yazdım. Bu sayede portalın kendi etrafında dönmesi ve organik bir şekilde \"nefes alması (pulsing)\" sıfır performans kaybıyla sağlandı. İleriye dönük (future-proof) olarak bu koda Particle System (Kıvılcım) ve Audio Source (Ses) eklentilerini destekleyecek AAA standartlarında altyapılar ekledim.<\/p>


                                                <\/p>

                                                3. Görsel Efekt (VFX) Entegrasyonu<\/p>

                                                Portalın görselliğini profesyonel seviyeye taşımak için \"TwirlDistortion\" adlı 2 boyutlu (Sprite) uzay-zaman sarmalı efektini projeye dahil ettim. Testlerim sırasında 2D resmin 3D uzayda dönerken kaybolması (Perspective Culling) sorunuyla karşılaştım. Bu sorunu çözmek için ebeveyn-çocuk (parent-child) hiyerarşisini yeniden yapılandırdım ve yerel Rotation (dönüş) değerlerini sıfırlayarak (0,0,0) hatasız bir yörünge dönüşü sağladım.<\/p>


                                                <\/p>

                                                4. Mimari Yeniden Yapılandırma (Scene Refactoring) ve Prefab Optimizasyonu<\/p>

                                                Oyunumuzu tamamen MR oda-ölçeğine (room-scale) geçirmek adına devasa bir temizlik yaptım. Önceki fazda fiziksel sürtünme hatalarına (Deadlock) sebep olan tüm konveyör bant sistemini (`ConveyorSystem_Module`) sahnemizden kalıcı olarak sildim. Çöp üretim merkezimizi (`WasteSpawner.cs`) doğrudan Sanal Portal'ın içine taşıdım. Böylece çöplerin bandın ucundan değil, doğrudan oyuncunun odasının tavanından halıya düşmesini sağlayacak yeni oyun döngüsünü oturttum. Taşıma ve yeniden kullanılabilirliği (Modularity) artırmak için bu portalı ve içindeki spawner'ı tek bir `VirtualPortal.prefab` paketi haline getirdim.<\/p>


                                                <\/p>

                                                5. Pull Request (PR) Açılışı ve İnceleme Süreci<\/p>

                                                Günün sonunda yaptığım bu 4 farklı işlemi, GitHub üzerinde \"Atomic Commit\" prensibine uyarak parça parça commit'ledim (Sırasıyla: *feat, style, build, refactor*). Tüm bu mimari geçişi ve kodlamaları, proje yöneticilerinin ve danışman hocalarımın incelemesi için tek başıma bir Pull Request (PR) haline getirdim. Kodların nasıl çalıştığını görsel olarak kanıtlamak amacıyla Unity Recorder üzerinden 720p HD kalitesinde optimize edilmiş bir oynanış (Gameplay) videosu çekerek PR açıklamasına ekledim ve günü başarıyla tamamladım.<\/p>


                                                <\/p>


                                                <\/p>

                                                Git Commit Mesajları:<\/strong><\/p>

                                                1. <\/span>[11:00]<\/strong> (abd0a7e<\/em>) feat(vfx): implement animated virtual portal for waste spawning - Created PortalAnimator.cs for idle rotation and pulsing scale effects. - Added a visual green energy portal (Cylinder + PortalMat) to the AR scene. - Applied emission material to simulate a sci-fi wormhole effect.<\/li>
                                                2. <\/span>[13:24]<\/strong> (06218fe<\/em>) style(vfx): integrate TwirlDistortion asset for virtual portal - Replaced the basic prototype cylinder with the high-quality TwirlDistortion sprite. - Adjusted parent-child hierarchy to ensure correct orbital pivot around the spawn point. - Zeroed out local rotations to fix perspective culling issues during animation.<\/li>
                                                3. <\/span>[14:52]<\/strong> (10c9723<\/em>) feat(vfx): implement portal animator and spawner logic - Created PortalAnimator script with procedural rotation and scaling. - Added AAA polish support (Audio & Particles) for future use. - Updated WasteSpawner to trigger the portal burst effect on spawn.<\/li>
                                                4. <\/span>[17:33]<\/strong> (70ecf87<\/em>) build(vfx): create modular VirtualPortal prefab with integrated spawner - Packaged TwirlDistortion VFX and WasteSpawner into a single reusable VirtualPortal prefab. - Configured parent-child hierarchy to ensure correct orbital rotation and zeroed local offsets. - Designed as an independent module to allow easy placement on AR surfaces (ceilings) without breaking spawner logic.<\/li>
                                                5. <\/span>[17:40]<\/strong> (dd30e33<\/em>) refactor(scene): remove conveyor system for true MR room-scale transition - Deleted legacy ConveyorSystem_Module to eliminate physics deadlocks and friction bugs. - Transitioned game design to drop waste directly onto the player's physical floor. - Placed the new VirtualPortal prefab at the ceiling level to act as the primary waste source. - Cleaned up hierarchy to enforce the new AR-first architecture described in the Phase 1 plan.<\/li><\/ol>\n\n--- DAY 26 (2026-08-06) ---\n

                                                  26. Gün (06.08.2026) Çalışma Raporu<\/strong><\/p>


                                                  <\/p>

                                                  **Konu:** AR Fizik Optimizasyonu, Kapsamlı \"Tunneling\" (İçinden Geçme) Çözümü ve Prefab Mimari Temizliği<\/span><\/p>


                                                  <\/p>

                                                  Bugünkü mesaime, dünkü testlerde gözlemlediğim AR fizik hatalarını ve objelerin zeminden geçme problemlerini çözmek amacıyla GitHub üzerinde **\"AR Physics Stability and Tunneling Bug\"** adında kapsamlı bir Issue (Görev) oluşturarak başladım.<\/span><\/p>


                                                  <\/p>

                                                  İlk olarak Unity AR Foundation'ın ürettiği zeminlerin (Plane) varsayılan olarak kağıt inceliğinde bir `MeshCollider` ile geldiğini ve bu durumun yüksek hızda düşen objelerde \"Tunneling\" (objenin zemini delip geçmesi) sorununa yol açtığını tespit ettim. Bu sorunu kökten çözmek için `ARSurfaceConfigurator.cs` adında yeni bir yönetici (Manager) script yazdım. Bu script sayesinde, ortamda tespit edilen AR zeminlerinin ince MeshCollider'larını dinamik olarak devre dışı bırakıp, yerlerine 5 cm kalınlığında (0.05f) etli bir `BoxCollider` ördüm. Ayrıca zemin tipine (Halı veya Masa) göre dinamik sürtünme katsayıları tanımlayarak AR fizik kalitesini AAA oyun standartlarına çektim.<\/span><\/p>


                                                  <\/p>

                                                  İkinci büyük aşamada, sahnede yere düşen ancak garip fiziksel tepkiler veren çöp objelerinin (Waste) mimarilerini analiz ettim. Yaptığım analiz sonucunda, 12 farklı prefab'ın (şişe, yay, defter vb.) alt (Child) objelerinde hatalı ve mükerrer şekilde `Rigidbody` ile `XRGrabInteractable` bileşenlerinin unutulduğunu fark ettim. Unity'nin fizik motoru kurallarına aykırı olan bu durumu düzeltmek için tüm prefab'ların içine girerek bu fazlalıkları manuel olarak sildim ve objeleri \"Compound Collider\" (Tek merkezli fizik) standartlarına uygun hale getirdim.<\/span><\/p>

                                                  Fizik motorunu daha da stabil kılmak için `BeltItem.cs` içerisindeki objelerin serbest düşüşe geçtiği anlardaki çarpışma modunu `ContinuousDynamic` olarak zorlayarak olası son hataların da önüne geçtim. Ek olarak, VR gözlük olmadan editör üzerinden hızlı fizik testleri yapabilmek adına sınırları ve merkezi (Center Y: -0.5) görsel zeminle kusursuz hizalanmış bir `EditorTestFloor` prefab'ı hazırladım.<\/span><\/p>


                                                  <\/p>

                                                  Son olarak oyun akışında (Game Flow) tasarımsal bir iyileştirmeye gittim. Sahnedeki fiziksel başlatma kolu (Lever) kaldırıldığı için, `GameManager` üzerindeki state machine (durum makinesi) mantığını güncelledim ve `ReadyToStart` adımını pas geçip oyunun doğrudan `Countdown` (Geri sayım) evresiyle başlamasını sağladım.<\/span><\/p>


                                                  <\/p>

                                                  Gün sonunda, tüm bu köklü değişiklikleri tek bir yığın halinde atmak yerine \"Best Practice\" kurallarına uygun olarak 4 farklı atomik (parçalara ayrılmış) commit halinde GitHub'a push'ladım ve günün başında açtığım Issue'yu referans göstererek başarılı bir **Pull Request (PR)** oluşturdum. Benim açımdan hem fizik motorunun derinliklerini kavradığım hem de yazılım mimarisi hatalarını analiz edip çözdüğüm çok verimli bir mühendislik günü oldu.<\/span><\/p>


                                                  <\/p>


                                                  <\/p>


                                                  <\/p>

                                                  Git Commit Mesajları:<\/strong><\/p>

                                                  1. <\/span>[11:41]<\/strong> (c81c63d<\/em>) feat(ar-physics): add ARWastePhysicsTuner for automatic grab\/throw calibration Created a centralized script to automatically configure Rigidbody mass, angular damping, and XR throw velocity for optimal AR room-scale interactions.<\/li>
                                                  2. <\/span>[12:01]<\/strong> (924840e<\/em>) refactor(ar-physics): apply physics tuner to all waste prefabs Attached the new ARWastePhysicsTuner component to all waste prefabs to ensure unified physics and throw mechanics across the AR environment.<\/li>
                                                  3. <\/span>[13:41]<\/strong> (32c74e6<\/em>) refactor(game-manager): bypass ReadyToStart state and jump directly to Countdown - Updated the state machine in GameManager to skip the `ReadyToStart` state and transition directly into the `Countdown` state. - This change is required because the physical start lever was removed along with the conveyor belt, making manual starts impossible. - Added `GameState.Countdown` to the UI animation conditions to ensure buttons and visual elements transition correctly during the countdown phase.<\/li>
                                                  4. <\/span>[14:41]<\/strong> (0701b6e<\/em>) fix(physics): remove duplicate Rigidbodies from child objects in waste prefabs - Removed accidental duplicate `Rigidbody` and `XRGrabInteractable` components from child mesh objects across 12 waste prefabs. - This resolves a critical physics bug where the parent object would detach from its colliders and fall infinitely through the floor upon instantiation. - Prefabs now correctly rely on a single Rigidbody on the parent object, forming a stable Compound Collider with the child mesh.<\/li>
                                                  5. <\/span>[14:42]<\/strong> (4c63ca2<\/em>) feat(ar): implement thick BoxColliders for AR planes to prevent physics tunneling - Replaced the default 0-thickness `MeshCollider` on AR planes with a dynamic 5cm thick `BoxCollider`. - This permanently solves the physics tunneling (ghosting) issue where thin objects would fall through real-world floors. - Automatically assigns high-friction PhysicsMaterials based on AR plane classification (Floor vs Table).<\/li>
                                                  6. <\/span>[15:51]<\/strong> (f3a8eae<\/em>) fix(physics): force ContinuousDynamic collision on dropped items - Added logic to explicitly set `CollisionDetectionMode.ContinuousDynamic` when an item is dropped from the conveyor belt (`isKinematic = false`). - Prevents high-velocity falling objects from clipping through the floor due to Unity's default Discrete detection mode resetting.<\/li>
                                                  7. <\/span>[15:58]<\/strong> (a4b00c9<\/em>) chore(editor): add EditorTestFloor prefab for physics testing - Added the `EditorTestFloor` prefab to simulate AR physical planes in the Unity Editor. - This enables testing of object spawning and collision physics without requiring a physical AR device. - Calibrated the BoxCollider Center Y to -0.5 to perfectly align the physical collision bounds with the visual floor, preventing the floating object bug.<\/li>
                                                  8. <\/span>[17:25]<\/strong> (1e87ac1<\/em>) refactor(physics): tune AR waste physics properties - Fine-tuned the rigid body physics parameters for waste objects to improve realism in the AR environment. - Optimized collision detection and physics material assignments to prevent clipping and jittering on real-world surfaces.<\/li>
                                                  9. <\/span>[17:30]<\/strong> (3268f62<\/em>) chore(scene): calibrate VirtualPortal height and test floor in AR scene - Adjusted the VirtualPortal spawn height to prevent waste objects from spawning directly inside the floor colliders. - Applied Center Y (-0.5) calibration to the EditorTestFloor to ensure physical boundaries perfectly match the visual plane.<\/li><\/ol>\n\n--- DAY 27 (2026-08-07) ---\n

                                                    27. Gün (07.08.2026) Çalışma Raporu<\/strong><\/p>


                                                    <\/p>


                                                    <\/p>

                                                    Konu:AAA Standartlarında Kayıt Mimarisi (SaveManager), Golden Waste Joker Mekaniği ve Dokunsal Geri Bildirim (Haptic) Sistemleri<\/p>


                                                    <\/p>

                                                    Bugünkü mesaime, projenin eksik olan temel yapı taşlarını (Core Systems) belirleyip inşa etmek amacıyla GitHub üzerinde **\"Core Systems & Mechanics: Haptics, Save Architecture, and Joker Logic\"** adında kapsamlı bir Issue (Görev) oluşturarak başladım.<\/p>


                                                    <\/p>

                                                    İlk olarak oyunun durumunu (Level, XP, Jeton) cihazın yerel hafızasına güvenli bir şekilde kaydetmek için JSON tabanlı, global erişime açık (Singleton) bir `SaveManager` mimarisi geliştirdim. Sadece veriyi yazıp geçmek yerine endüstri standartlarını (AAA) uygulayarak, oyunun kaydedilmesi sırasında yaşanabilecek elektrik kesintisi veya çökme anlarında verinin bozulmasını engellemek için üç aşamalı bir kalkan kurdum. Bu sistem sayesinde veriler önce geçici bir dosyaya (`.tmp`) yazılıyor, ardından mevcut kaydın otomatik bir yedeği (`.bak`) alınıyor ve işlem hatasız biterse asıl dosyanın üzerine yazılıyor. Ayrıca bu okuma\/yazma işlemlerine `Try-Catch` blokları ekleyerek, işletim sistemi bazlı erişim hatalarında uygulamanın donmasını kesin olarak engelledim.<\/p>


                                                    <\/p>

                                                    İkinci büyük aşamada, oyunun tekrar oynanabilirlik (Replayability) değerini artırmak için nadir çıkan \"Golden Waste (Altın Çöp)\" joker mekaniğini tasarladım. `WasteSpawner` içerisindeki havuzlama sistemine entegre ettiğim bir RNG (Rastgele Sayı Üretimi) algoritması ile Altın Çöp'ün %5 şansla sahneye çıkmasını sağladım. Ardından çöp kutularının karar mekanizmasını barındıran `BinTrigger` sınıfını güncelleyerek, bu altın çöpün doğası ne olursa olsun tüm kutular tarafından \"Evrensel Doğru\" olarak kabul edilmesini ve kazanılan puanı anlık olarak 5'e katlamasını (Multiplier) sağladım. Bu aşamada, dışarıdan projeye dahil ettiğim `.glb` uzantılı altın şişe 3D modelinin varsayılan olarak gelen ağır ve hatalı `MeshCollider` bileşenini silip, yerine performansı çok daha yüksek olan ve objelerin zeminden geçme (Tunneling) sorununu önleyen `CapsuleCollider` entegrasyonunu yaptım.<\/p>


                                                    <\/p>

                                                    Üçüncü aşamada, VR atmosferini ve oyuncu hissiyatını güçlendirmek için merkezi bir `HapticManager` sınıfı kodladım. Nesnelerin etkileşim kodları içerisine (`ARWastePhysicsTuner`) girerek, Unity'nin `XRGrabInteractable` (Tutma) event'lerine dinamik bir şekilde abone (Subscribe) oldum. Bu yapı sayesinde normal çöpler tutulduğunda kısa bir tıklama hissi gelirken, Altın Çöp tutulduğunda özel bir ritmik kalp atışı titreşimi verilmesini sağladım.<\/p>


                                                    <\/p>

                                                    Gün sonunda, tüm bu köklü değişiklikleri tek bir yığın halinde atmak yerine \"Best Practice\" kurallarına uygun olarak 6 farklı atomik (parçalara ayrılmış) commit halinde GitHub'a push'ladım ve günün başında açtığım Issue'yu referans göstererek başarılı bir **Pull Request (PR)** oluşturdum. Benim açımdan hem veri güvenliği (Data Persistence) mimarilerini hem de RNG tabanlı oyun içi dengeleme algoritmalarını başarıyla tasarlayıp birleştirdiğim, çok verimli bir mühendislik günü oldu.<\/p>


                                                    <\/p>


                                                    <\/p>

                                                    Git Commit Mesajları:<\/strong><\/p>

                                                    1. <\/span>[10:34]<\/strong> (c881f01<\/em>) feat(core): implement robust SaveManager with JSON serialization - Created a Singleton `SaveManager` to handle data persistence securely. - Defined a scalable `SaveData` structure including Level, XP, and Coin properties. - Implemented `SaveGame` and `LoadGame` routines utilizing `JsonUtility` and `Application.persistentDataPath` for reliable cross-platform local storage.<\/li>
                                                    2. <\/span>[11:29]<\/strong> (5324282<\/em>) feat(haptics): implement grab and golden waste haptic patterns - Added `TriggerGrabHaptic` to deliver a short, satisfying click feedback. - Developed `TriggerGoldenWasteHaptic` coroutine to simulate a rhythmic, heartbeat-like pulse for premium items. - Added Debug.Log support for haptic events to enable testing directly within the Unity Editor.<\/li>
                                                    3. <\/span>[11:30]<\/strong> (3137b8a<\/em>) feat(interaction): hook xr grab events to haptic manager - Subscribed to `XRGrabInteractable.selectEntered` event via code to automate haptic feedback on grab. - Ensured the grab haptics dynamically apply to all waste prefabs without manual inspector configurations.<\/li>
                                                    4. <\/span>[15:15]<\/strong> (9e947b4<\/em>) feat(assets): add golden waste 3d model and optimized prefab - Imported 'Bottle Musterd' .glb 3D model for the Golden Waste item. - Created `GoldenWaste` prefab with proper folder structure. - Replaced the default Mesh Collider with a Capsule Collider to prevent tunneling issues and optimize AR physics performance.<\/li>
                                                    5. <\/span>[16:44]<\/strong> (3331757<\/em>) feat(gameplay): implement golden waste rare spawn and joker mechanic - ARWastePhysicsTuner: Added `isGoldenWaste` flag to trigger unique rhythmic haptic feedback upon grabbing. - WasteSpawner: Added RNG logic for a rare chance to spawn the Golden Waste prefab instead of normal waste. - BinTrigger: Updated matching logic to recognize Golden Waste as a universal joker (isCorrect = true) and applied a 5x score multiplier.<\/li>
                                                    6. <\/span>[18:21]<\/strong> (4ef2104<\/em>) refactor(core): upgrade save manager to secure AAA architecture - Refactored SaveManager to use temporary files (.tmp) during the save process to prevent data corruption in case of unexpected crashes or battery failure. - Implemented automatic backup generation (.bak) for save data. - Added Try-Catch blocks to handle file I\/O exceptions securely without freezing the application. - Developed an automatic recovery system that restores data from the backup file if the main save file is missing or corrupted.<\/li>
                                                    7. <\/span>[18:26]<\/strong> (1a209d0<\/em>) chore(scene): assign golden waste prefab to ar spawner - Updated `WasteSpawner` component in MainGame_AR scene. - Linked the new `GoldenWaste` prefab to the Golden Waste Settings slot to enable spawning during gameplay.<\/li><\/ol>\n" + }, + "Ayşenur Ebrar Gündüz": { + "id": 19, + "email": "aysenurebrargunduzz@gmail.com", + "repo": "https:\/\/github.com\/AysenurGunduz\/vantage-ai", + "github_username": "AysenurGunduz", + "total_entries": 15, + "commits_count": 0, + "commits_sample": [], + "full_text": "\n--- DAY 1 (2026-07-20) ---\n

                                                      Stajımın ilk gününe ekip arkadaşlarımla gerçekleştirdiğimiz daily toplantısı ile başladım. Toplantıda ekip arkadaşlarım işleyiş hakkında bilgilendirmelerde bulundu. Kısaca tanıştıktan sonra, bugün yapılacak çalışmaları ve geçen hafta tamamlanan işleri dinledim. Her gün, bir önceki gün gerçekleştirilen çalışmaların değerlendirildiğini ve ardından o günün planlamasına geçildiğini belirttiler.<\/p>

                                                      Toplantının ardından geliştireceğim projeyi Ümit Bey'e sundum. Projemin onaylanmasının ardından geliştirme sürecine başladım. İlk olarak projenin mimari yapısını, kullanılacak teknolojileri, dört haftalık geliştirme fazlarını ve günlük görev planını içeren detaylı bir implementasyon planı hazırladım. Frontend tarafında React, TypeScript ve Vite; backend tarafında ise Node.js, Express ve TypeScript kullanılmasına karar verdim. Veritabanı, kimlik doğrulama (authentication) ve gerçek zamanlı (realtime) işlemler için Supabase kullanmayı planladım.<\/p>

                                                      Projede yer alacak yapay zekâ özellikleri kapsamında görev bölme, önceliklendirme, ekip üyelerinin çalışma tarzını analiz etme ve otomatik ilerleme özeti oluşturma işlemleri için bilgisayarımda yerel olarak çalışacak bir LLM kullanmaya karar verdim. Bu doğrultuda bilgisayarımın donanım özelliklerini inceleyerek çalıştırabileceği uygun model boyutlarını belirledim.<\/p>

                                                      Daha sonra projenin README dosyasını hazırlayarak proje hakkında temel bilgileri ve kurulum adımlarını dokümante ettim. GitHub reposunu ekip çalışma düzenine uygun şekilde yapılandırdım. Main branch'e doğrudan kod gönderilmemesi, her gün yeni bir branch oluşturularak geliştirme yapılması ve gün sonunda açılan Pull Request'in Ümit Bey tarafından incelenip birleştirilmesi (merge edilmesi) gerektiği belirtildi. Ben de bu çalışma düzenine uygun şekilde repomu düzenledim.<\/p>

                                                      Ardından GitHub Issues ve GitHub Projects yapılarını oluşturarak ilk gün yapılacak çalışmaları içeren ilk issue'yu açtım. Projenin klasör yapısını oluşturdum ve veritabanı şemasını netleştirerek buna ait görsel bir diyagram hazırladım. Ayrıca proje için bir logo tasarımı üzerinde çalıştım. Birkaç farklı tasarım denemesinin ardından son hâline karar vererek logoyu README dosyasına ekledim. Son olarak Supabase üzerinde projemi oluşturarak gerekli başlangıç yapılandırmalarını tamamladım.<\/p>

                                                      Gün boyunca yaptığım çalışmaları düzenli aralıklarla GitHub'a commit ettim. Gün sonunda ise o gün tamamladığım tüm geliştirmeleri içeren bir Pull Request oluşturarak incelemeye gönderdim.<\/p>


                                                      <\/p>


                                                      <\/p>

                                                      Git Commit Mesajları:<\/strong><\/p>

                                                      1. <\/span>[10:50]<\/strong> (f6af153<\/em>) Initial commit<\/li>
                                                      2. <\/span>[11:15]<\/strong> (674bc32<\/em>) Add implementation plan and README for Vantage Outlines architecture decisions (React\/Vite frontend, Node\/Express backend, Supabase, local LLM via Ollama), DB schema draft, folder structure, and the 20-day (4-week) development schedule. Co-Authored-By: Claude Sonnet 5<\/li>
                                                      3. <\/span>[11:21]<\/strong> (35301f9<\/em>) Clarify git workflow: no direct pushes to main Document the branch-only workflow: all changes go through feature branches, main is only updated via PR, and PRs are opened once a chunk of work is complete rather than per commit. Co-Authored-By: Claude Sonnet 5<\/li>
                                                      4. <\/span>[11:50]<\/strong> (de9f2a2<\/em>) Rename docs to lowercase and polish plan\/readme content - Rename IMPLEMENTATION_PLAN.md -> implementation_plan.md and README.md -> readme.md - Add a table of contents to the implementation plan - Fix a malformed table in the local LLM strategy section - Remove assistant-voice phrasing so the docs read as first-party project documentation - Drop an emoji from the day-by-day schedule - Add a placeholder comment in the readme for the project logo - Update cross-file links to the renamed files Co-Authored-By: Claude Sonnet 5<\/li>
                                                      5. <\/span>[13:06]<\/strong> (9447609<\/em>) Remove internship duration and advisor from docs Remove incorrect sections from implementation_plan.md and readme.md and clean up project documentation.<\/li>
                                                      6. <\/span>[13:28]<\/strong> (a50b8e4<\/em>) Scaffold frontend\/backend folder structure for Day 1 Add the frontend and backend directory tree from implementation_plan.md section 5 (empty leaf folders tracked via .gitkeep), plus docs\/adr and .github\/workflows placeholders and a root .gitignore. Actual app bootstrapping (Vite, Express, package.json, tsconfig) is intentionally left for Day 2, to be generated by the real scaffolding tools instead of hand-written now. Co-Authored-By: Claude Sonnet 5<\/li>
                                                      7. <\/span>[13:48]<\/strong> (5a059a1<\/em>) Add env variable templates for frontend and backend Document the expected Supabase and Ollama configuration variables ahead of Day 2's actual app bootstrap, without any real secret values. Co-Authored-By: Claude Sonnet 5<\/li>
                                                      8. <\/span>[14:03]<\/strong> (b0725a7<\/em>) Liven up the readme Add tech-stack\/status badges, a \"Neden Vantage?\" highlights section, and tighten the overall flow. Co-Authored-By: Claude Sonnet 5<\/li>
                                                      9. <\/span>[15:35]<\/strong> (4cc7954<\/em>) Add Vantage logo to the readme Co-Authored-By: Claude Sonnet 5<\/li>
                                                      10. <\/span>[15:37]<\/strong> (9ed52a9<\/em>) Finalize the database ERD and SQL schema Add a Mermaid entity-relationship diagram (docs\/erd.md) and a runnable Postgres schema (backend\/src\/db\/schema.sql) implementing the tables drafted in implementation_plan.md section 4, with enums, foreign keys, and indexes. Link both from the plan. Co-Authored-By: Claude Sonnet 5<\/li>
                                                      11. <\/span>[15:56]<\/strong> (c216cc2<\/em>) Switch logo to transparent SVG and expand the readme Replace docs\/logo.png with the transparent-background docs\/logo.svg. Add an architecture diagram (Mermaid) and a roadmap table summarizing the 4-week plan to give the readme more substance.<\/li>
                                                      12. <\/span>[16:22]<\/strong> (98df7e8<\/em>) Replace logo with the transparent PNG version<\/li>
                                                      13. <\/span>[17:41]<\/strong> (50a5f4e<\/em>) Address PR review: rename to README.md, add API endpoints section<\/li>
                                                      14. <\/span>[17:56]<\/strong> (1649ec4<\/em>) Make the API endpoints section explanatory and drop the stale Next Step section<\/li>
                                                      15. <\/span>[18:46]<\/strong> (4e3d393<\/em>) Add UI mockups to docs<\/li>
                                                      16. <\/span>[18:58]<\/strong> (c0b0b45<\/em>) Add remaining mockups and Deliverables section to the plan<\/li><\/ol>\n\n--- DAY 2 (2026-07-21) ---\n

                                                        Güne ekip arkadaşlarımla gerçekleştirdiğimiz daily toplantısı ile başladık. Toplantıda bir önceki gün tamamladığımız çalışmaları değerlendirdik ve bugün üzerinde çalışacağımız görevleri paylaştık.<\/p>

                                                        İlk olarak, ikinci gün çalışmaları için yeni bir branch oluşturdum. Ardından backend tarafında Express ve TypeScript kullanarak proje iskeletini kurdum. Uygulamanın çalıştığını doğrulamak amacıyla bir health-check endpoint'i geliştirdim ve başarılı bir şekilde test ettim.<\/p>

                                                        Frontend tarafında ise Vite, React, TypeScript ve Tailwind CSS v4 kullanarak proje iskeletini oluşturdum.<\/p>

                                                        Projenin README dosyasını güncelleyerek, uygulamanın uçtan uca kullanıcı akışını gösteren bir diyagram ile yapay zekâ tarafında neden Ollama tercih edildiğini açıklayan yeni bir bölüm ekledim.<\/p>

                                                        Daha sonra frontend ve backend için ayrı ayrı Supabase bağlantılarını yapılandırdım. Oluşturduğum veritabanı şemasını Supabase projesine uyguladım. Bu süreçte karşılaştığım erişim izni sorununu analiz ederek gerekli düzenlemeleri yaptım ve problemi çözdüm.<\/p>

                                                        Gün içerisinde GitHub üzerindeki Issue kayıtlarını güncelleyerek tamamladığım ve plan dışı gerçekleştirdiğim ek çalışmaları da ilgili kayıtlara ekledim.<\/p>

                                                        Yaptığım geliştirmeleri belirli aralıklarla GitHub reposuna push ettim. Gün sonunda ise gerçekleştirilen tüm çalışmaları özetleyen bir Pull Request (PR) oluşturarak günü tamamladım.<\/p>


                                                        <\/p>


                                                        <\/p>

                                                        Git Commit Mesajları:<\/strong><\/p>

                                                        1. <\/span>[10:27]<\/strong> (3927b15<\/em>) Scaffold Express + TypeScript backend with a health-check endpoint Set up the backend package with express, cors, dotenv, and @supabase\/supabase-js, plus TypeScript tooling (tsx for dev, strict tsconfig). Adds a GET \/api\/health endpoint, verified locally.<\/li>
                                                        2. <\/span>[12:22]<\/strong> (3a2d763<\/em>) Scaffold React + Vite frontend with Tailwind v4 Bootstrap the client app (React 19, TypeScript, Vite) and wire up Tailwind through its Vite plugin, replacing the default template content with a minimal placeholder page. Also adds @supabase\/supabase-js ahead of the client-wiring task. Verified the dev server renders and Tailwind classes compile correctly.<\/li>
                                                        3. <\/span>[13:28]<\/strong> (d33f4d7<\/em>) Add User Flow and Why Ollama sections to the readme Add a Mermaid diagram walking through a project's lifecycle end to end, highlighting exactly where the AI layer participates, plus a short explanation of the technical reasoning behind choosing a local LLM over a cloud API.<\/li>
                                                        4. <\/span>[15:40]<\/strong> (982584f<\/em>) Wire up Supabase clients for frontend and backend Add a browser-side client (anon key) for the frontend and a server-side client (service_role key, no session persistence) for the backend. Extend \/api\/health to report Supabase connectivity as a quick smoke test.<\/li>
                                                        5. <\/span>[17:16]<\/strong> (85569c2<\/em>) Add a Vitest test for the health-check endpoint Split the Express app definition out of index.ts into app.ts so it can be imported in tests without binding a real port. Add a test for GET \/api\/health that mocks the Supabase client, keeping the test fast and independent of network\/environment state.<\/li><\/ol>\n\n--- DAY 3 (2026-07-22) ---\n

                                                          Güne ekip arkadaşlarımla gerçekleştirdiğimiz daily toplantısı ile başladık. Toplantıda bir önceki gün tamamladığımız çalışmaları değerlendirdik ve bugün üzerinde çalışacağımız görevleri paylaştık.<\/p>

                                                          Ardından günün branch'ini açtım ve bu sefer branch'i GitHub Issue'suna da düzgünce bağladım, bir önceki gün yarım kalan bu adımı da tamamlamış oldum.<\/p>

                                                          Bugünün ana hedefi kullanıcı girişini gerçek anlamda çalışır hale getirmekti. İlk olarak baştan sona bir giriş sistemi kurdum.<\/p>

                                                          Bunu tarayıcıda test ettim ve gerçek bir hesapla giriş\/çıkış yapabildiğimi doğruladım.<\/p>

                                                          Sonrasında sayfaları koruma altına aldım. Buradaki amacım giriş yapmamış biri korumalı bir sayfaya gitmeye çalışırsa otomatik olarak giriş ekranına yönlendirilmesi, tam tersi durumda da giriş yapmış biri tekrar giriş ekranına gidememesini sağlamaktı.<\/p>

                                                          Ardından da görev organizasyon ve proje oluşturma akışlarıyla ilgilendim. Bunun için veritabanında küçük bir eksik fark ettim; yeni kullanıcılar için otomatik profil kaydı oluşmuyordu, bunu düzelttim. Sonrasında organizasyon ve proje oluşturma işlemlerini yazdım ve testlerin gerçekleştirilmesine katkıda bulundum.<\/p>

                                                          Bunların yanında bugün ekstra olarak ön yüz tasarımına da epey zaman ayırdım: giriş\/kayıt ekranlarını ve projeyi tanıtan yeni bir tanıtım sayfasını baştan tasarladım, logo dosyasını güncelledim. Tasarım üzerinde birkaç kez revizyon yaptım, tanıtım sayfasının görsel tarafı henüz tam oturmadı, ilerleyen günlerde tekrar ele alacağım.<\/p>

                                                          Yaptığım geliştirmeleri belirli aralıklarla GitHub reposuna push ettim. Gün sonunda ise gerçekleştirilen tüm çalışmaları özetleyen bir Pull Request (PR) oluşturarak günü tamamladım.<\/p>


                                                          <\/p>


                                                          <\/p>

                                                          Git Commit Mesajları:<\/strong><\/p>

                                                          1. <\/span>[10:31]<\/strong> (e4da299<\/em>) Add end-to-end auth flow with Supabase (sign up, login, logout) Introduces an AuthContext that tracks the Supabase session and exposes signUp\/signIn\/signOut, plus Login\/Signup\/Home pages wired together with react-router-dom.<\/li>
                                                          2. <\/span>[11:09]<\/strong> (85f19d3<\/em>) Redesign auth screens with shadcn\/ui and a split-screen layout Sets up shadcn\/ui (Button, Input, Label, Card) with a path alias, and rebuilds the Login\/Signup pages as a split layout: a gradient brand panel highlighting core features on one side, and the form on the other.<\/li>
                                                          3. <\/span>[13:01]<\/strong> (9a732f8<\/em>) Add protected routes and backend JWT verification middleware Wraps app routes with ProtectedRoute\/GuestRoute on the frontend so signed-out users are redirected to \/login and signed-in users skip the auth pages. Adds a requireAuth Express middleware that validates a Supabase-issued bearer token, ready to guard upcoming API routes.<\/li>
                                                          4. <\/span>[13:54]<\/strong> (9c38809<\/em>) Restyle auth screens with an editorial paper-and-serif theme Reworks Login\/Signup to a paper-tone palette, self-hosted Source Serif 4 type, and a CSS-only CMYK misregistered-print effect on the hero headline, scoped to these two pages via an .auth-editorial class.<\/li>
                                                          5. <\/span>[15:01]<\/strong> (ad02eba<\/em>) Add organization and project creation endpoints Adds POST\/GET \/api\/organizations and POST\/GET \/api\/organizations\/:orgId\/projects, guarded by requireAuth and organization membership checks. Includes a database trigger that backfills a profiles row for every new auth user, since organizations and projects both reference profiles via foreign keys.<\/li>
                                                          6. <\/span>[16:21]<\/strong> (52e88e3<\/em>) Add a landing page and restyle the brand logo Introduces a public landing page at \"\/\" built in the same editorial theme as the auth screens, with a sticky nav and an expandable \"Neden Vantage\" section. Moves the authenticated home view to \/dashboard, swaps in a tightly-cropped logo file, and enlarges it across the auth and landing layouts.<\/li>
                                                          7. <\/span>[17:47]<\/strong> (537a976<\/em>) Refine landing page layout and button styling Makes section dividers full-bleed, drops the top-nav anchor links in favor of scrolling, enlarges nav\/kicker text, and switches CTAs to an outlined button style with colored secondary links.<\/li><\/ol>\n\n--- DAY 4 (2026-07-23) ---\n

                                                            Güne ekip arkadaşlarım ile gerçekleştirdiğimiz toplantı ile başladık. Toplantıda bir önceki gün tamamladığımız çalışmaları değerlendirdik ve bugün üzerinde çalışacağımız görevleri paylaştık.<\/p>

                                                            Ardından günün branch'ini açtım ve GitHub Issue'suna bağladım.<\/p>

                                                            Bugünün ana hedefi görev tarafını hayata geçirmekti. Veritabanında görevler için gerekli alanlar önceki günlerde zaten hazırlanmıştı, ben de bunun üzerine görevleri oluşturma, listeleme, güncelleme ve silme işlemlerini yazdım ve bunlara ait testleri gerçekleştirdim.<\/p>

                                                            Sonrasında dashboard'a bu işlemleri gerçekten kullanabileceğim bir ekran ekledim. Buradaki amacım önce bir organizasyon oluşturulmasını, ardından organizasyon içine bir proje eklenmesini, son olarak da o projeye görevlerin eklenip silinebilmesini sağlamaktı. Bunu tarayıcıda test ederek doğru çalıştığını gördüm.<\/p>

                                                            Bunların yanında bugün ekstra olarak yine tasarım tarafına epey zaman ayırdım. Girişten hemen sonra kullanıcının ne yapmak istediğini seçtiği ayrı bir karşılama ekranı ekledim. Ardından uygulamanın tamamını koyu, lacivert tonlarında yeni bir tasarıma geçirdim, yeni bir vurgu rengi ve yeni bir kod tabanlı logo kullandım.<\/p>

                                                            Yaptığım geliştirmeleri belirli aralıklarla GitHub reposuna push ettim. Gün sonunda ise gerçekleştirilen tüm çalışmaları özetleyen bir Pull Request oluşturarak günü tamamladım.<\/p>


                                                            <\/p>


                                                            <\/p>

                                                            Git Commit Mesajları:<\/strong><\/p>

                                                            1. <\/span>[10:25]<\/strong> (ed152ce<\/em>) Add Task type definition The tasks table schema was already in place from Day 1\/2; this adds the matching TypeScript type for use in upcoming task endpoints.<\/li>
                                                            2. <\/span>[12:10]<\/strong> (ac04a9e<\/em>) Add task CRUD endpoints Adds GET\/POST \/api\/projects\/:projectId\/tasks and GET\/PATCH\/DELETE \/api\/tasks\/:taskId, guarded by requireAuth and project membership checks, with Vitest coverage for each route.<\/li>
                                                            3. <\/span>[14:54]<\/strong> (e3c43de<\/em>) Add organization\/project\/task flow to the dashboard Introduces an authenticated API client and wires the dashboard to the existing backend: create\/select an organization, create\/select a project within it, and view\/create\/delete tasks in that project.<\/li>
                                                            4. <\/span>[15:45]<\/strong> (3462027<\/em>) Add a post-login welcome screen and move workspace to its own route The dashboard now shows a welcome hub (matching the welcome mockup) where the user chooses what to do next, instead of landing directly in the organization\/project\/task management view. That view moves to \/dashboard\/workspace.<\/li>
                                                            5. <\/span>[17:17]<\/strong> (51648ba<\/em>) Redesign the app with a dark theme and a code-based logo mark Replaces the paper-and-serif editorial theme across every screen (Landing, Login, Signup, welcome hub, workspace) with a dark navy background, coral accent, and Poppins type, inspired by a reference site the user shared. Introduces a small Logo component (icon + wordmark) built in code instead of an image asset, since the existing logo file wouldn't read against a dark background. Adds a decorative wave-bar visual to the landing hero.<\/li>
                                                            6. <\/span>[18:02]<\/strong> (b44f28e<\/em>) Shift the dark theme background toward navy instead of near-black The background was reading as almost black; swaps it for a clearer dark blue (#0d1b3a) across every screen using the dark theme.<\/li><\/ol>\n\n--- DAY 5 (2026-07-24) ---\n

                                                              Toplantının ardından güne, her gün olduğu gibi yeni bir branch açarak ve bunu ilgili GitHub görevine bağlayarak başladım. İlk olarak görevler için sürükle-bırak yapılabilen bir Kanban panosu kurdum; görevler artık beş durum arasında (yapılacaklar, sırada, devam ediyor, incelemede, tamamlandı) fare ile sürüklenerek taşınabiliyor ve bu değişiklik anında sunucuya kaydedilip veritabanına yansıyor. Bunu bir kart sürükleyip sayfayı yeniledikten sonra kartın hâlâ doğru yerde durduğunu görerek doğruladım.<\/p>

                                                              Bu işin ardından, günün planı biraz hafif kaldığı için ekip üyelerinin organizasyon içindeki rollerinin (sahip\/yönetici\/üye) yönetilmesi işini, aslında ileride yapılması planlanan bir günden bugüne aldım. Bir organizasyonun sahibi artık üyelerin rolünü değiştirebiliyor, bu işlem sadece sahip yetkisine sahip kişiler tarafından yapılabiliyor ve bu kısım için ayrıca test gerçekleştirdim.<\/p>

                                                              Daha sonra haftanın ilk demosunu gerçekleştirdim; kayıt olma, giriş yapma, organizasyon\/proje\/görev oluşturma ve Kanban panosunda sürükle-bırak adımlarının hepsini baştan sona deneyerek her adımın sorunsuz çalıştığını doğruladım.<\/p>

                                                              Günün geri kalanında ise uygulamanın görünümü üzerinde çalıştım. Çalışma alanı sayfasını, organizasyon ve projelerin sol tarafta bir menüde, görevlerin ise sağda ana alanda gösterildiği daha düzenli bir yapıya kavuşturdum. Görev kartlarına son tarih bilgisi ve daha belirgin bir görünüm ekledim; bir karta tıklandığında açıklama, son tarih ve öncelik gibi bilgilerin düzenlenebildiği bir detay penceresi oluşturdum. Ayrıca veriler yüklenirken sayfanın boş görünmesi yerine hafif bir yükleniyor animasyonu gösterilmesini sağladım.<\/p>

                                                              Son olarak, giriş sayfasının genel görünümünü daha profesyonel bir hale getirmeye çalıştım. Sayfa kaydırıldıkça bölümlerin yumuşakça belirmesini sağladım, özellik listelerine simgeler ekledim ve önceden yer alan soyut bir görsel süslemenin yerine uygulamanın kendisini andıran küçük bir Kanban önizlemesi koydum. Arka plan rengini de sabit bir lacivert yerine yavaşça hareket eden bir gradyan haline getirdim. Gün boyunca yaptığım her değişikliği küçük parçalar halinde commit'leyip GitHub'a gönderdim ve günün sonunda tüm bu çalışmaları özetleyen bir pull request açtım.<\/p>


                                                              <\/p>


                                                              <\/p>

                                                              Git Commit Mesajları:<\/strong><\/p>

                                                              1. <\/span>[10:54]<\/strong> (dcf93a9<\/em>) Add a drag-and-drop Kanban board for tasks Replaces the plain task list in the workspace with a dnd-kit board (Backlog\/Todo\/In Progress\/Review\/Done). Dropping a card into another column calls PATCH \/api\/tasks\/:taskId to persist the new status, with an optimistic update that rolls back on failure.<\/li>
                                                              2. <\/span>[12:24]<\/strong> (3883b26<\/em>) Add organization member role management endpoints Adds GET \/api\/organizations\/:orgId\/members to list members and PATCH \/api\/organizations\/:orgId\/members\/:userId to change a member's role, restricted to organization owners. Pulled forward from Day 6 since it doesn't depend on the invite flow.<\/li>
                                                              3. <\/span>[15:19]<\/strong> (2d2eae3<\/em>) Redesign workspace page with sidebar layout and icons Split organizations\/projects into a left sidebar and moved tasks\/kanban into a main content area with a breadcrumb, replacing the previous stacked full-width sections for a more app-like layout.<\/li>
                                                              4. <\/span>[16:49]<\/strong> (b4ef19e<\/em>) Polish kanban cards, add task detail modal, loading states, and page fade-in Adds hover\/drag styling and status color dots to kanban cards and columns, a click-to-edit task detail modal for description\/due date\/priority, skeleton placeholders while org\/project\/task data loads, and a lightweight fade-in animation applied across pages.<\/li>
                                                              5. <\/span>[17:24]<\/strong> (563005e<\/em>) Give the landing page a more premium, marketing-site feel Adds a scroll-triggered reveal animation, an accent-colored headline and eyebrow badge, icon-led feature lists and why-cards, a browser-chrome framed product screenshot, and a spotlight-style closing CTA section.<\/li>
                                                              6. <\/span>[17:52]<\/strong> (a266520<\/em>) Replace hero wave decoration and add animated gradient background Swaps the abstract wave-bar decoration for a mini kanban board preview that previews the product itself, fixes the workspace header so the back link sits on its own line under the logo, and replaces the flat navy background with a slow-moving gradient across all dark-theme pages.<\/li><\/ol>\n\n--- DAY 6 (2026-07-27) ---\n

                                                                Bugüne yine ekip içi günlük toplantıda Cuma günkü ilerlemeyi paylaşarak başladım.<\/p>

                                                                Bugün için hedefim, organizasyona yeni kişileri e-posta ile davet edebilmek ve kimin neyi yapabileceğini belirleyen yetki kurallarını netleştirmekti.<\/p>

                                                                Toplantının ardından güne, her zamanki gibi yeni bir branch açarak ve bunu ilgili göreve bağlayarak başladım. İlk olarak davet sistemini kurdum: bir organizasyonun sahibi ya da yöneticisi artık bir e-posta adresine davet gönderebiliyor, bu davetler listelenebiliyor ve gerekirse iptal edilebiliyor. Bunun için veritabanına yeni bir tablo eklemem gerekti, bu tabloyu oluşturan komutu birlikte veritabanı yönetim panelinden çalıştırdım.<\/p>

                                                                Sonrasında davet edilen kişinin bu daveti nasıl kullanacağını kurdum: davet linkine tıklayan kişi, giriş yapmamışsa önce giriş ekranına yönlendiriliyor, giriş yaptıktan sonra otomatik olarak davet sayfasına geri dönüyor ve orada hangi organizasyona hangi rolle katılacağını görüp kabul edebiliyor.<\/p>

                                                                Ardından yetkilendirme kurallarını sıkılaştırdım: artık bir organizasyondan üye çıkarma işlemini sadece sahip ya da yöneticiler yapabiliyor, bir yönetici başka bir yöneticiyi çıkaramıyor ve organizasyonun asıl sahibi hiçbir şekilde çıkarılamıyor. Benzer şekilde, bir görevi artık sadece projenin yöneticisi, sahibi ya da o görevi oluşturan kişi silebiliyor.<\/p>

                                                                Günün geri kalanında bu özellikleri kullanabileceğimiz bir ekip üyeleri sayfası tasarladım: davet göndermek için bir form, mevcut üyelerin listelendiği ve rollerinin değiştirilip çıkarılabildiği bir tablo, ve bekleyen davetlerin görüldüğü ayrı bir bölüm. Kullanıcı geri bildirimleri doğrultusunda davet formunu daha dikkat çekici hale getirdim, sayfa düzenini genişleterek boş kalan kenar boşluklarını azalttım ve üst kısımdaki e-posta yazısını daha sade bir görünüm için tek harfli bir rozetle değiştirdim.<\/p>

                                                                Gün boyunca yaptığım her değişikliği küçük parçalar halinde commit'leyip GitHub'a gönderdim. PR'a incelemesi için ekip arkadaşlarımı ekleyip günün sonunda bir pull request açtım.<\/p>


                                                                <\/p>


                                                                <\/p>

                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                1. <\/span>[10:38]<\/strong> (1bd4d36<\/em>) Add organization invitation creation, listing, and acceptance flow Adds an organization_invitations table plus endpoints for owners\/admins to create, list, and revoke invitations, and a token-based lookup and accept endpoint that validates the invitation, matches it against the authenticated user's email, and creates the organization membership.<\/li>
                                                                2. <\/span>[12:18]<\/strong> (b06223a<\/em>) Add the invite acceptance page and post-login redirect Adds an \/invite\/:token page that shows the invitation's organization and role and lets the signed-in user accept it, preserves the original destination through ProtectedRoute and Login so an unauthenticated visitor returns to the invite after signing in, and adds a typed ApiError with the response status so the UI can show status-specific messages for expired, mismatched, or already-used invitations.<\/li>
                                                                3. <\/span>[13:06]<\/strong> (6a0054d<\/em>) Add role-based authorization for member removal and task deletion Adds a DELETE endpoint for removing organization members, restricted so only owners\/admins can remove members, admins can't remove other admins, and the organization owner can't be removed or remove themselves. Restricts task deletion to a project's admin\/owner or the task's creator instead of any project member.<\/li>
                                                                4. <\/span>[15:06]<\/strong> (9757ba6<\/em>) Add the team members page for inviting and managing organization members Adds a \/dashboard\/organizations\/:orgId\/team page with an invite form (email + role, with a copyable invite link since there's no email service yet), a members table with role changes and removal for owners\/admins, and a pending invitations list with revoke. Enriches the members list endpoint with each member's name and email instead of just their user id.<\/li>
                                                                5. <\/span>[16:13]<\/strong> (f788c7b<\/em>) Make the invite panel and team members link more prominent Gives the invite form a coral-tinted highlighted panel with an icon badge and glow instead of blending in with the other neutral sections, and turns the small \"Ekip\" text link in the workspace sidebar into a full-width standalone button so it's not overlooked.<\/li>
                                                                6. <\/span>[18:07]<\/strong> (8cdb68b<\/em>) Widen page layout and swap header email for an avatar initial Widens the workspace and team members containers so less horizontal space goes unused on larger screens, and replaces the raw email text in the workspace header with a single-letter avatar badge (full email still available on hover) to match the member list styling.<\/li><\/ol>\n\n--- DAY 7 (2026-07-28) ---\n

                                                                  Bugüne daily toplantıyla başladıktan hemen sonra günün branch'ini açıp ilgili göreve bağlayarak asıl işe başladım: bugünün hedefi görevlere son teslim tarihi, öncelik ve etiket eklemek, ardından bunlara göre filtreleme ve sıralama yapabilmekti.<\/p>

                                                                  İlk olarak görev oluşturma formuna öncelik seviyesi ve son teslim tarihi seçme alanları ekledim. Bu sırada tarayıcının kendi açılır menülerinde seçeneklerin beyaz bir arka planla göründüğünü fark ettim, bunu da düzelttim. Sonrasında görevlere etiket ekleme özelliğini kurdum: veritabanına yeni bir alan ekledim, sunucu tarafında bu alanı kaydedip güncelleyebilecek şekilde düzenleme yaptım. Arayüzde hem görev oluştururken hem de bir görevi açıp düzenlerken etiket ekleyip çıkarabilecek hale getirdim. Bunun üzerine Kanban panosuna önceliğe ve etikete göre filtreleme, son tarihe ve önceliğe göre sıralama, bir de hızlı arama kutusu ekledim.<\/p>

                                                                  Teknik kısmın ardından uygulamanın görünümüne yoğunlaştım. Giriş ve üye ol sayfalarının çok sade durduğunu düşünüp buralara hareketli giriş animasyonları ekledim; ilk denemede bu animasyonlar dar ekranlarda görünmüyordu, kaynağını bulup düzelttim. Sonrasında karşılama sayfasının arka planına yapay zekayı çağrıştıran, noktalardan oluşan hareketli bir ağ animasyonu tasarladım. Bunu beğenince aynısını giriş\/üye ol sayfalarına ve ana karşılama ekranına da taşıdım. Bu sırada ana ekrandaki \"Çalışma Alanına Git\" yazısını da daha doğal bir profil menüsüne çevirdim.<\/p>

                                                                  Günün geri kalanında çalışma alanı sayfasını baştan tasarladım. Önce kapsamlı bir tasarım değerlendirmesi yaptım: renk paleti, sayfa düzeni, kart ve panel görünümleri, kenar yuvarlaklıkları gibi başlıklarda neyin değişebileceğini belirledim. Ardından bunların hepsini uyguladım. Kenar çubuğunu tek bir açılır-kapanır ağaç yapısına indirdim, görev kartlarındaki silme ikonunu üzerine gelince beliren bir hale getirdim. Panonun sabit bir yatay kaydırma çubuğu olmadan ekranı doldurmasını sağladım ve son olarak bu sayfaya da aynı ağ animasyonunu ekleyip \"Çıkış Yap\" butonunun üzerine gelince metninin görünmez olduğu küçük bir hatayı giderdim.<\/p>

                                                                  Gün boyunca yaptığım her değişikliği küçük parçalar halinde commit'leyip GitHub'a gönderdim ve günün sonunda tüm bu çalışmaları özetleyen ve demo videosu içeren bir pull request açtım.<\/p>


                                                                  <\/p>


                                                                  <\/p>

                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                  1. <\/span>[11:50]<\/strong> (787532e<\/em>) Add priority and due date to task creation, fix dropdown option colors Lets a priority and due date be set when creating a task instead of only after the fact through the detail modal. Also gives native elements explicit dark colors, since Tailwind's opacity-based background utilities don't render correctly in the browser's native select dropdown popup.<\/li>
                                                                  2. <\/span>[13:12]<\/strong> (c6bb695<\/em>) Add task tags and kanban filtering\/sorting Adds a tags column to tasks, lets tags be set at creation and edited in the task detail modal, and displays them on kanban cards. Adds a filter\/sort bar above the kanban board to filter by priority or tag and sort by due date or priority.<\/li>
                                                                  3. <\/span>[15:24]<\/strong> (52b551b<\/em>) Add animated network background and staggered entrance animations Adds a lightweight canvas-based particle network (moving, connected dots) behind the landing page hero, floating glow blobs across the auth pages, and staggered fade-in-up entrances for the login\/signup form fields and the auth layout's feature list. Extends Reveal with a delay option and an \"as\" prop so it can render as a list item.<\/li>
                                                                  4. <\/span>[16:54]<\/strong> (492176b<\/em>) Add network background to auth\/home pages and redesign home CTA Adds the animated particle network to the login\/signup layout and the welcome hub. Replaces the awkwardly-worded \"Çalışma Alanına Git\" button and its adjacent sign-out button with a single prominent \"Hemen Başla\" CTA plus a profile avatar menu (top-right) that holds sign-out instead.<\/li>
                                                                  5. <\/span>[17:25]<\/strong> (9136af4<\/em>) Overhaul the kanban\/workspace UI: palette, layout, and usability Introduces CSS custom properties for a higher-contrast dark palette (solid surface colors instead of stacked opacity backgrounds), raises border-radius across the app from 3-4px to 6-8px, and gives urgent priority its own distinct color instead of sharing coral with high. Reworks the kanban board to a flexible grid so columns fill the available width without a persistent horizontal scrollbar, collapses the workspace sidebar's three separate organization\/team\/project panels into a single expandable tree, moves the task delete button to a hover-revealed overlay so it no longer competes with the title, and adds a quick search box that filters the board by task title.<\/li>
                                                                  6. <\/span>[18:12]<\/strong> (9d13b24<\/em>) Add network background to workspace, fix outline button hover text Brings the workspace page in line with the rest of the app by adding the animated particle-network background used elsewhere. Also fixes a bug where outline-variant buttons (sign out, cancel) lost their text on hover: the base variant's hover:text-foreground rule outranked our plain text-white by CSS specificity, rendering the label almost invisible against the dark surface.<\/li><\/ol>\n\n--- DAY 8 (2026-07-29) ---\n

                                                                    Güne, her zamanki gibi Daily toplantısında bir önceki günün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım. Bugün dashboard'da görev istatistiklerinin gösterilmesi, Recharts ile grafiklerin eklenmesi ve geciken görevlerin vurgulanması planlanmıştı. Günün branch'ini açtıktan hemen sonra, önceki günün pull request'i henüz onaylanmadığı için yeni branch'i bağımsız değil, dünkü branch'in üzerine kurdum; böylece bir gün önce eklediğim animasyon ve tasarım bileşenlerini yeniden yazmak zorunda kalmadan kullanabildim.<\/p>

                                                                    İlk olarak sunucu tarafında; bir kullanıcının üye olduğu tüm projelerdeki görevleri toplayıp duruma ve önceliğe göre sayan, geciken görevleri ayrıca işaretleyen bir istatistik uç noktası kurdum. Bunun üzerine yeni bir Genel Bakış sayfası tasarladım: özet kutuları, iki farklı çubuk grafik ve geciken görevlerin öne çıktığı bir liste. Grafiklerin renklerini rastgele seçmek yerine, renk körlüğüne uygun olup olmadığını da ayrıca kontrol ettim.<\/p>

                                                                    Günün ortasında, yapılan işlerin bir gün için az kaldığını düşünüp daha neler ekleyebileceğimi değerlendirdim. Sonucunda; önümüzdeki birkaç gün içinde son tarihi gelecek görevlerin ayrıca vurgulanmasına ve görevlerin proje bazında nasıl dağıldığının gösterilmesine karar verip ikisini de aynı gün içinde tamamladım.<\/p>

                                                                    Ardından, normalde daha sonraki bir güne planlanmış olan görev geçmişi özelliğini de öne çekmeye karar verdim: Artık bir görev oluşturulduğunda ya da durumu, önceliği, son tarihi, atanan kişisi veya etiketleri değiştiğinde bu durum otomatik olarak kaydediliyor ve ayrı bir listede görüntülenebiliyor.<\/p>

                                                                    Sayfanın son hâline karar verirken birkaç kez fikir değiştirdim: Önce aktivite listesini sayfanın kenarında sabit bir panel yapmayı denedim; beğenilmeyince eski düzene döndüm ve bu listeyi tamamen ayrı bir sayfaya taşıdım. Sayfanın geri kalanını da tek uzun bir liste yerine iki sekmeli bir yapıya böldüm. Sekme sayısını ve isimlerini birkaç kez sadeleştirdikten sonra son hâline ulaştırdım.<\/p>

                                                                    Gün sonunda tüm bu çalışmaları özetleyen bir pull request açtım, ekran görüntülerini ekledim, incelemeleri için ekip arkadaşlarımı etiketledim ve görevi kendime atadım.<\/p>

                                                                    Ayrıca artık her gün staj içerisindeki arkadaşlarımızla da birbirimizin PR'larını approve ediyoruz. Bu şekilde hem birlikte bir çalışma yapmış oluyor hem de kod okumayı öğreniyoruz.<\/p>


                                                                    <\/p>


                                                                    <\/p>

                                                                    Git Commit Mesajları:<\/strong><\/p>

                                                                    1. <\/span>[10:43]<\/strong> (5204157<\/em>) Add dashboard stats and charts with an overdue task highlight Adds a \/api\/dashboard\/stats endpoint that aggregates a user's tasks across every project they belong to, breaking them down by status and priority and flagging anything past its due date and not done. Adds a new Overview page (recharts bar charts for the status\/priority breakdowns, stat tiles, and a highlighted overdue list) linked from the Home and Workspace pages. Chart colors are picked from a validated categorical palette rather than the app's existing priority colors, which fail a colorblind-safety check when placed side by side as bars.<\/li>
                                                                    2. <\/span>[11:54]<\/strong> (fa1b6fc<\/em>) Add due-soon highlighting and per-project breakdown to the dashboard Extends the dashboard stats endpoint to also flag tasks due within the next 3 days (separate from already-overdue) and to group task counts by project, so users can see which project is carrying the load. Adds matching sections to the Overview page: a due-soon list beside the overdue one, and a proportional bar list of tasks per project.<\/li>
                                                                    3. <\/span>[14:26]<\/strong> (3f47195<\/em>) Add task activity logging and a recent-activity feed Pulls the activity-log piece of Day 9 forward: every task creation and every change to status, priority, due date, assignee, or tags now writes a row to task_activity_log (already in the schema, unused until now), tagged with who made the change and what it was. Adds a \/api\/dashboard\/activity endpoint that returns the 15 most recent entries across a user's projects with the task title attached, and a matching \"Son Aktiviteler\" section on the Overview page.<\/li>
                                                                    4. <\/span>[16:10]<\/strong> (0b7306c<\/em>) Fix truncation and header wrapping on the Overview page The task-alert and activity list rows were flex children with no min-width, so the truncate class never actually kicked in on long titles — the row overflowed instead of ellipsizing. Also lets the header wrap instead of squeezing on narrow viewports.<\/li>
                                                                    5. <\/span>[17:58]<\/strong> (6125993<\/em>) Move the activity feed into a sticky sidebar on the Overview page Son Aktiviteler was the last section in a single vertical stack, so it sat below several rows of charts and lists and needed a lot of scrolling to reach. Splits the page into a two-column layout on large screens: stats\/charts\/breakdowns on the left, the activity feed pinned in a sticky right column so it stays visible while scrolling. Falls back to a normal single-column stack below the lg breakpoint.<\/li>
                                                                    6. <\/span>[18:22]<\/strong> (498f54c<\/em>) Split recent activity into its own page and tab the Overview page Reverts the sticky-sidebar layout in favor of the original single- column stack, then moves the activity feed out entirely: it's now its own \/dashboard\/activity page reached via a button, instead of competing for space at the bottom of Overview. Also splits Overview into two tabs (Genel \/ Detaylar) so the charts and the overdue\/due-soon\/per-project breakdowns don't all have to be scrolled through in one long stack.<\/li><\/ol>\n\n--- DAY 9 (2026-07-30) ---\n

                                                                      Güne, her zamanki gibi Daily toplantısında bir önceki günün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım. Bugünün hedefi Kanban panosuna canlı senkronizasyon ve aktivite günlüğü kazandırmak. Bir önceki günün pull request'i henüz onaylanmadığı için, dünkü gibi bugünün branch'ini de o branch'in üzerine kurarak başladım.<\/p>

                                                                      İlk olarak Realtime senkronizasyonu kurdum: bir kullanıcı bir görevi taşıdığında ya da düzenlediğinde, aynı projeye bakan başka kullanıcıların ekranı sayfa yenilenmeden güncellensin diye Supabase'in canlı veri akışı özelliğini açtım. Bunu güvenli yapabilmek için önce veritabanına, bir kullanıcının sadece kendi üyesi olduğu projenin görevlerini görebilmesini sağlayan bir yetkilendirme kuralı eklemem gerekti; aksi halde bu özellik herkesin birbirinin verisini görebilmesine yol açabilirdi. Ardından, iki kişinin aynı görev üzerinde aynı anda değişiklik yapması durumunda birinin işleminin diğerini silmemesi için küçük bir düzeltme yaptım. Son olarak, görev detayına o görevin geçmişini gösteren bir liste ekledim. Ve bu sırada kayıt formunun zaten kayıtlı bir e-postayla sessizce \"başarılı\" görünmesi gibi ayrı bir hatayı da fark edip düzelttim.<\/p>

                                                                      Günün planlanan işleri erken bitince, ileriki bir güne ait olan test geçişi ve hata ayıklama çalışmasını öne çektim. Kod tabanını baştan sona tarayıp dört gerçek hata buldum ve hepsini düzelttim: bunlardan biri; geciken görev hesabının saat dilimine göre yanlış sonuç verebilmesiydi.<\/p>

                                                                      Günün geri kalanında arayüz tarafına döndüm: uygulamanın her yerinde kullanılan jenerik bir ikon yerine, daha önceden hazırlanmış ama hiç kullanılmayan gerçek Vantage logosunu devreye aldım. Ayrıca çalışma alanı, genel bakış, aktiviteler ve ekip sayfalarının hepsine, hangi sayfada olduğunu net gösteren ortak bir menü ekledim.<\/p>

                                                                      Gün boyunca yaptığım her değişikliği küçük parçalar halinde commit'leyip GitHub'a gönderdim ve günün sonunda tüm bu çalışmaları özetleyen bir pull request açtım.<\/p>


                                                                      <\/p>


                                                                      <\/p>

                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                      1. <\/span>[11:08]<\/strong> (11476f9<\/em>) Add realtime kanban sync and per-task activity history Enables Supabase Realtime on the tasks table so the kanban board reflects other users' changes without a refresh. Realtime broadcasts every row change to every connected client on a table with no RLS, so this required adding a row-level security policy scoping reads to a task's project members before turning it on. Also scopes the optimistic-update rollback in handleStatusChange to the single task being changed instead of the whole list, so a failed update from one user can no longer wipe out a concurrent change from another user that arrived via realtime in the meantime. Adds a per-task activity endpoint and surfaces it as a small history list in the task detail modal.<\/li>
                                                                      2. <\/span>[11:09]<\/strong> (b439ec0<\/em>) Fix signup silently succeeding for an already-registered email Supabase returns no error from signUp() for an existing, confirmed email (an anti-enumeration measure) — instead the returned user has an empty identities array. Check for that and surface a real error instead of showing the \"check your email\" success screen.<\/li>
                                                                      3. <\/span>[13:39]<\/strong> (0bb9a76<\/em>) Fix four correctness bugs found in a bug-fix pass - Task activity log recorded a spurious \"tags changed\" entry on every edit, even when tags were untouched: the comparison used !== on two distinct array references instead of comparing contents. - A newly created task could render twice on the kanban board if the realtime INSERT event for it arrived before the POST response did; the create handler now dedupes by id like the realtime handler does. - Overdue highlighting on the task card mixed a UTC-parsed due_date with a locally-parsed \"today\", misclassifying today-due tasks as overdue in timezones behind UTC and disagreeing with the (UTC-based) overdue calculation on the Overview dashboard. Both now compare plain date strings the same way. - Switching organizations\/projects quickly could let a slower, stale fetch response overwrite the correct one that already rendered; the org->projects and project->tasks effects now ignore their result if a newer selection has since superseded them.<\/li>
                                                                      4. <\/span>[15:05]<\/strong> (d9cb672<\/em>) Use the real Vantage logo asset instead of a placeholder icon public\/logo.png has an actual designed wordmark (the V-into-arrow mark, \"Vantage\" lettering) that was sitting unused while every page rendered a generic lucide icon + plain text instead. Swaps the Logo component over to it, inverted to white for the dark theme.<\/li>
                                                                      5. <\/span>[16:39]<\/strong> (c782dfa<\/em>) Add a shared page nav so Overview is easy to find Each inner page (Workspace, Overview, Activity, Team Members) had its own inconsistent, faint text link or two for getting around, and several didn't link to Overview at all. Adds a small PageNav component - a segmented menu highlighting the current page - and places it in the header of all four.<\/li>
                                                                      6. <\/span>[18:22]<\/strong> (07277c9<\/em>) Tighten the logo crop and nudge it flush left The source PNG had asymmetric transparent padding (more at the bottom and left) that made the mark look inset from the page's left edge compared to the heading\/pill below it. Trims the image to its visible bounding box and pulls it left a bit further to sit flush with the rest of the header content.<\/li><\/ol>\n\n--- DAY 10 (2026-07-31) ---\n

                                                                        Güne, her zamanki gibi Daily toplantısında bir önceki günün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım. Hedefler konuşulduktan sonra günün branch’ini açtım. Bir önceki günün pull request'i henüz onaylanmadığı için, dünkü gibi bugünün branch'ini de o branch'in üzerine kurarak başladım. Ardından önceki günden kalan test geçişi ve bug fix işleriyle ilgilendim ve MVP checkpoint'i tamamladım. Uygulamayı uçtan uca deneyerek çekirdek proje yönetimi özelliklerinin sorunsuz çalıştığını doğruladım ve Hafta 2'yi resmen kapatmış oldum.<\/p>

                                                                        Ardından Hafta 3'ün konusu olan yapay zeka katmanına erken başladım. Bilgisayarıma Ollama'yı kurup iki aday local dil modelini (qwen2.5:3b-instruct ve llama3.2:3b) indirdim. Bu iki modeli gerçek senaryolara yakın promptlarla (görev bölme çıktısının JSON şemasına uyup uymadığı, yanıt süresi, Türkçe kalitesi) karşılaştırdım. llama3.2:3b'nin daha hızlı yüklendiğini ve verilen bilgiyi yanlış yorumlamadığını gördüğüm için bu modeli seçtim ve kararı .env üzerinden değiştirilebilecek şekilde yapılandırdım.<\/p>

                                                                        Günün geri kalanında frontend tarafında bir dizi iyileştirme yaptım. Logonun koyu tema üzerinde okunaklı görünmesini sağladıktan sonra yeni bir logo tasarımına geçtim. Ardından hem uygulama içinde hem README'de logoyu güncelledim. Landing sayfasının giriş bölümünü daha kurumsal bir B2B SaaS görünümüne kavuşturdum: iki sütunlu bir düzen, yapay zeka görev önerisini gösteren bir ürün görseli, sosyal kanıt bölümü ve üst menüye bölüm linkleri ekledim. Ayrıca aktivite geçmişi listesinin okunabilirliğini artırdım. Projeye Badge, Dialog, Dropdown Menu gibi tekrar kullanılabilir arayüz bileşenleri kazandırmaya çalıştım. Bunların yanında bir breadcrumb, profil menüsü, boş durum bileşeni ve doğrulamalı bir \"yeni proje oluştur\" penceresi ekleyip dört sayfanın üst kısmına entegre ettim.<\/p>

                                                                        Günün sonuna doğru, bir yöneticinin bir görevi birine atarken not bırakabilmesi gerektiğini fark ettim ve bunun için hem arka planda hem arayüzde yeni ve kullanışlı bir özellik geliştirmeye çalıştım. Gün boyunca yaptığım her değişikliği küçük parçalar halinde commit'leyip GitHub'a gönderdim. Tüm bu değişiklikleri test ederek doğruladıktan sonra günün pull request'ini açtım.<\/p>


                                                                        <\/p>


                                                                        <\/p>

                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                        1. <\/span>[11:57]<\/strong> (592b763<\/em>) Revert to the code-based logo mark The PNG asset's proportions weren't landing right after several adjustments; reverting to the icon+text mark until a new logo design is ready.<\/li>
                                                                        2. <\/span>[14:18]<\/strong> (18e5ebe<\/em>) Add AIProvider abstraction and pick the interactive local LLM Benchmarked qwen2.5:3b-instruct-q4_K_M and llama3.2:3b on the target 4GB VRAM hardware with representative prompts (task-splitting JSON output, Turkish delay-risk explanation). llama3.2:3b wins on cold-load time and didn't misstate the input data the way qwen did, with comparable warm inference latency and JSON schema compliance. Wires the choice through OLLAMA_MODEL_INTERACTIVE and introduces a thin AIProvider interface over Ollama so upcoming AI features aren't coupled to a specific model or to Ollama itself.<\/li>
                                                                        3. <\/span>[16:04]<\/strong> (a51b833<\/em>) Switch to the new network-mark logo Replaces the code-based icon with the new logo asset, boosted with a brightness\/saturate filter so its teal tone reads clearly against the app's dark navy header instead of blending into it. Also swaps the README's logo for the same design.<\/li>
                                                                        4. <\/span>[17:13]<\/strong> (104e4ab<\/em>) Redesign the landing hero into a premium two-column B2B layout Replaces the single-column hero with a two-column layout: refined copy and CTAs on the left, a glassmorphism task-card mockup showing the AI task-suggestion feature on the right instead of empty network space. Adds nav links to the existing sections, switches the primary CTA to a solid button, and adds a social-proof strip below the hero.<\/li>
                                                                        5. <\/span>[17:49]<\/strong> (6f1dd96<\/em>) Improve the activity log's readability Rows were flat single lines that all looked the same, making the list hard to scan. Adds a per-action icon, promotes the task title to its own bold line, renders status changes as colored dots matching the Kanban column colors, and separates rows with dividers instead of plain spacing.<\/li>
                                                                        6. <\/span>[18:55]<\/strong> (dbbcc3a<\/em>) Add a design-system component set and let managers note a task assignment Adds Badge\/Dialog\/DropdownMenu (via shadcn), reskinned to Vantage's dark surface tokens since the generated defaults render as light-mode popups, plus new Breadcrumb, ProfileMenu, EmptyState, and a Zod + React Hook Form validated project-creation dialog. Wires breadcrumb and profile menu into the Workspace\/Overview\/Activity\/TeamMembers headers and replaces the inline sidebar quick-add with the new dialog. Also adds an assignee picker to the task detail modal (there was no way to actually assign a task to someone before this) and lets a manager attach a note when reassigning. The note is stored on the relevant activity-log entry and surfaces in both the task's own activity history and the global Activity page.<\/li><\/ol>\n\n--- DAY 11 (2026-08-03) ---\n

                                                                          Güne, her zamanki gibi Daily toplantısında cuma gününün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım. <\/span>Ardından bir önceki günün akşamında açtığımız Ollama entegrasyonu ve tasarım sistemi çalışmasının üzerine, yeni bir branch açarak başladım. Cuma günkü işin PR'ı henüz onaylanmamıştı, bu yüzden bugünkü çalışmayı da onun üzerine zincirleyerek ilerledim.<\/p>

                                                                          Günün asıl hedefi, yapay zekanın bir proje açıklamasını okuyup bunu otomatik olarak alt görevlere bölmesiydi. Bunun için backend tarafında, kurduğumuz yerel yapay zeka modelini çağıran ve ondan görev listesi öneren yeni bir uç nokta (endpoint) yazdım. Kullanıcı bir görev açıklaması girdiğinde model bunu anlamlı alt görevlere bölüyor, bu öneriler veritabanına \"bekliyor\" durumunda kaydediliyor. Ardından bu öneriyi onaylayıp gerçek görevlere çevirebilen ya da reddedebilen ikinci bir uç nokta ekledim. Her iki uç nokta için de üye olmayan birinin erişememesi, geçersiz verilerin reddedilmesi gibi durumları kapsayan testler yaptım.<\/p>

                                                                          Backend tarafı bittikten sonra, aslında bir sonraki güne planlanmış olan arayüz kısmına da bugünden başladım. Kullanıcının görev açıklamasını yazıp öneri isteyebildiği, gelen alt görevleri düzenleyip onaylayabildiği ya da reddedebildiği bir pencere tasarladım ve bunu çalışma alanı sayfasına bağladım.<\/p>

                                                                          Bunların yanında, günün ortasında sayfanın genel görünümüyle ilgili bir fikrim oldu: koyu lacivert temanın çok kurumsal durmadığını düşünüp açık tonlu bir tema denemek istedim. Önce sadece çalışma alanı sayfasında deneme yaptım, beğenilince aynı temayı giriş\/kayıt ekranlarından açılış sayfasına kadar uygulamanın tüm sayfalarına yaydım. Arka plan rengini de rastgele seçmek yerine, logomuzun kendi renginden türeterek daha bütünlüklü bir görünüm elde etmeye çalıştım.<\/p>

                                                                          Bu değişiklikleri test ederken profil ikonuna tıklayınca menünün hiç açılmadığını fark ettim. İncelediğimde, kullandığımız arayüz kütüphanesinin zorunlu tuttuğu bir sarmalayıcı eksik olduğu için menünün her seferinde sessizce hata verip çöktüğünü buldum; bunu düzelttim ve profil menüsü artık düzgün açılıyor.<\/p>

                                                                          Gün boyunca yaptığım her değişikliği küçük parçalar halinde commit'leyip GitHub'a gönderdim. Tüm bu değişiklikleri test ederek doğruladıktan sonra günün pull request'ini açtım.<\/p>


                                                                          <\/p>


                                                                          <\/p>

                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                          1. <\/span>[11:21]<\/strong> (1586129<\/em>) Add the backend for AI-assisted task splitting Adds a prompt that asks the interactive local model to break a task or project description into subtasks as strict JSON, a POST endpoint that generates and stores the suggestion as pending, and a PATCH endpoint that creates the real tasks (flagged ai_generated) on accept or just updates the status on reject. Edited subtask lists are re-validated against the schema before anything is created. The suggest\/review\/edit\/approve UX that consumes these endpoints is tomorrow's work — today only covers the backend half.<\/li>
                                                                          2. <\/span>[14:52]<\/strong> (6d173d0<\/em>) Start the AI task-split suggest\/review\/approve UI Adds a \"Yeni görev başlığı\" adjacent \"AI ile Öner\" button that opens a dialog: describe the work, get a suggested subtask list back from the backend, edit titles\/hours or add\/remove rows, then accept (creates the real tasks, picked up by the existing Kanban realtime subscription) or reject. Wires the AITaskSuggestion type through. This is a head start on tomorrow's planned frontend work; polish continues then.<\/li>
                                                                          3. <\/span>[17:26]<\/strong> (fea8e01<\/em>) Trial a light theme on the Workspace page Adds a .light-theme token set alongside the existing dark one and converts Workspace and everything it renders (Kanban board\/cards, task detail modal, project\/AI-suggestion dialogs, empty states, breadcrumb, profile menu, skeletons, logo) off hardcoded white\/black opacity utilities onto the shared CSS variables, so they follow whichever theme class wraps them. Portaled dialog\/dropdown content gets the theme applied explicitly since portals sit outside the page's own wrapper in the DOM. Scoped to Workspace only, to gauge the direction before touching the rest of the app.<\/li>
                                                                          4. <\/span>[18:05]<\/strong> (502cc5f<\/em>) Tint the light theme's background from the logo's own color Softens the logo for light backgrounds (brightness-150 saturate-75 instead of the dark-theme brightness-200 saturate-150) so it doesn't read as too heavy against a pale surface, and changes the light theme's page background from a neutral gray to a very pale tint of the logo's teal, with white cards on top — the same relationship Jira's own light theme has to its blue mark.<\/li>
                                                                          5. <\/span>[18:20]<\/strong> (c3caa0b<\/em>) Extend the light theme to every remaining page Auth screens, Home, Overview, Team Members, Activity, invite-accept, and the public landing page now use the same light-theme tokens and Logo\/ProfileMenu light variants as the Workspace trial page, instead of the dark navy gradient background.<\/li>
                                                                          6. <\/span>[18:37]<\/strong> (a0f0204<\/em>) Fix profile menu not opening due to missing Menu.Group wrapper Base UI's Menu.GroupLabel throws when rendered without a Menu.Group ancestor, which silently crashed the whole dropdown (and its parent tree) every time the profile avatar was clicked. Wrapping the email label in DropdownMenuGroup fixes it.<\/li><\/ol>\n\n--- DAY 12 (2026-08-04) ---\n

                                                                            Güne, her zamanki gibi Daily toplantısında bir önceki günün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım.<\/p>

                                                                            Ardından önce dünün üzerine zincirlediğim yeni dalı açtım, ama bu sırada beklenmedik bir şey fark ettim: son iki günün onaylanan işleri aslında ana koda hiç ulaşmamış, her biri bir önceki günün dalına birleşmiş kalmıştı. Bunu netleştirip bugünkü çalışmayı yine zincirleyerek sürdürmeye, ama gün sonunda açacağım pull request'i doğrudan ana kola yönlendirmeye karar verdim, böylece üç günün birikmiş işi tek seferde ana koda taşınmış olacaktı.<\/p>

                                                                            İlk iş olarak artık kullanılmayan eski bir logo dosyasını temizledim. Ardından açılış sayfasında iki sorunu düzelttim: üst kısımda gereksiz büyük bir boşluk vardı, bunun sebebinin içerik hizalamasından kaynaklandığını bulup düzelttim. Ayrıca sayfada duran Kanban görseli çok eski ve uygulamanın güncel görünümüyle uyuşmuyordu, onu kaldırıp uygulamanın kendi renkleriyle kodla çizilmiş bir önizlemeyle değiştirdim.<\/p>

                                                                            Sonra yapay zeka özelliklerimiz üzerine araştırmalar yaptım, hangi özelliğin ne zaman geleceğini gözden geçirdim. Bu sırada planda olmayan yeni bir fikir düşündüm: tamamlanan görevlerden tek tıkla, paylaşılabilir bir sprint özeti üreten bir özellik. Bunu ileri bir güne ertelemek yerine bugüne, mevcut günün kapsamına ek olarak ekledim. Backend tarafında görevleri toplayıp yapay zekaya özetleten bir uç nokta, arayüzde de bunu tetikleyip sonucu kopyalanabilir şekilde gösteren bir pencere yaptım.<\/p>

                                                                            Bu özelliği test ederken, daha önce kurduğumuz görev bölme özelliğinin bazen bozuk Türkçe kelimeler ürettiğini fark ettim. Araştırınca, kullandığımız küçük modelin Türkçe karakterlerde zorlandığını gördüm. Hem modeli daha güçlü Türkçe üreten bir alternatifle değiştirdim hem de üretimdeki rastgeleliği azalttım, bu ikisi birlikte sorunu gerçek anlamda çözdü.<\/p>

                                                                            Bir ara sistemin yavaşladığını fark ettim. İlk başta yapay zeka modelinden şüphelendim ama araştırınca asıl sebebin, gün içinde birkaç kez yeniden başlattığım sunucuların düzgün kapanmayıp arka planda birikmesi olduğunu gördüm; gereksiz olanları kapatınca sorun çözüldü.<\/p>

                                                                            Günün sonlarına doğru, sayfanın kurumsal görünümünü daha da geliştirmek için karanlık ve aydınlık tema arasında geçiş yapabilen bir anahtar ekledim. Kullanıcının tercihi tarayıcıda hatırlanıyor. İlk denemede koyu tema fazla siyaha kaçmıştı, geri bildirim üzerine daha doygun, gerçek bir lacivert tonuna çevirdim.<\/p>

                                                                            Gün sonunda, son üç günün tüm işini kapsayan pull request'i ana kola karşı açtım, çakışma olmadığını da kontrol edip teyit ettim.<\/p>


                                                                            <\/p>


                                                                            <\/p>


                                                                            <\/p>

                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                            1. <\/span>[10:36]<\/strong> (01346d6<\/em>) Remove the unused old logo asset frontend\/public\/logo.png was the previous arrow-wordmark logo; the app now uses logo2.png everywhere, so this file was dead weight.<\/li>
                                                                            2. <\/span>[12:57]<\/strong> (26c7e56<\/em>) Fix landing page hero spacing and replace the stale Kanban mockup The hero's two-column grid was vertically centering both columns, which pushed the headline down to match the taller product mockup's height and left a large empty gap above it. Switched to top-aligned columns instead. Also swapped the static kanban-board.png (an old mockup that didn't match the app's current branding) for a hand-coded preview built with the same tokens as the rest of the light theme.<\/li>
                                                                            3. <\/span>[14:12]<\/strong> (afb0469<\/em>) Add a one-click AI sprint summary feature Generates a short, copyable release-notes-style summary from tasks completed in the last 7 days for a project. Unlike task splitting, this is read-only (no suggest\/approve step) since it doesn't create or modify any data.<\/li>
                                                                            4. <\/span>[15:26]<\/strong> (a0b53d7<\/em>) Fix garbled Turkish output from the interactive AI model llama3.2:3b was hallucinating malformed Turkish words and non-Turkish characters in generated task titles (e.g. \"işlevelleri\", \"Yapă\"). Switched the interactive model to qwen2.5:3b-instruct-q4_K_M, which produces grammatically correct Turkish, and lowered the generation temperature to 0.3 to further reduce hallucinated wording.<\/li>
                                                                            5. <\/span>[18:05]<\/strong> (d3a4371<\/em>) Remove the unused old Kanban mockup image The landing page now renders its Kanban preview with real components instead of this static screenshot.<\/li>
                                                                            6. <\/span>[18:32]<\/strong> (3ce88c0<\/em>) Add a dark\/light theme toggle and richen the dark palette Adds a ThemeProvider (persisted to localStorage) and a toggle in the profile menu across the dashboard pages and the Home welcome screen. Also reworked the dark theme's background\/surface colors into a richer navy instead of the previous near-black gray.<\/li><\/ol>\n\n--- DAY 13 (2026-08-05) ---\n

                                                                              Güne, her zamanki gibi Daily toplantısında bir önceki günün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım.<\/p>

                                                                              Bugünün hedefi, plana göre gecikme riski skorlaması olduğu için önce yeni bir çalışma dalı açtım. Bu branch’i dünküne zincirleme yöntemiyle bağlayarak açtım çünkü dünden kullanmam gereken özellikler vardı.<\/p>

                                                                              Asıl işe, gecikme riskini hesaplayan bir motor yazarak başladım. Risk skorunu yapay zekaya hesaplattırmak yerine, sayısal ve kural tabanlı bir mantıkla hesapladım. Bir görevin son tarihine ne kadar kaldığına, beklenen ilerlemeye göre ne kadar geride olduğuna ve o projede geçmişte görevlerin ortalama ne kadar sürede tamamlandığına bakarak 0 ile 100 arasında bir risk puanı üretiyor. Yapay zekanın rolünü ise bu puanı kullanıcıya doğal, anlaşılır bir Türkçe cümleyle açıklamakla sınırlı tuttum. Çünkü sayısal tahminlerde yapay zekaya güvenmek yerine kesin kurallara dayanmak daha sağlıklı.<\/p>

                                                                              Bu skoru hesapladıktan sonra, panel ekranına seviyesi en yüksek görevleri listeleyen bir bölüm ekledim. Her görevin yanına, tıklanınca yapay zekadan \"bu görev neden riskli\" açıklamasını isteyen bir buton koydum.<\/p>

                                                                              Gün planındaki asıl hedefi bitirdikten sonra, aklıma gelen bir fikri yapmaya karar verdim : Görevlere harcanan zamanı takip etme özelliği. Bunun için veritabanına yeni bir tablo eklemem gerekti ve görev detay ekranına hem manuel süre girişi hem de başlat-durdur şeklinde çalışan bir kronometre ekledim. Böylece bir görev için \"tahmini 4 saat, şu ana kadar harcanan 6 saat\" gibi bir karşılaştırma görülebiliyor. Bu veriyi de boşa harcamayıp risk motoruna bağladım. Bir görevde harcanan süre tahmini aşıyorsa risk puanı da buna göre yükseliyor, ama henüz hiç süre girilmemiş görevlerde eski hesaplama aynen çalışmaya devam ediyor.<\/p>

                                                                              Son olarak da birden fazla projesi olan kullanıcılar için risk panelini proje bazında filtreleyebilme imkânı ekledim. Panelin kullanılabilirliğini artırmayı amaçladım.<\/p>

                                                                              Gün boyunca yaptığım her değişikliği küçük parçalar halinde commit'leyip pushladım. Gün sonunda bugün yapılan her şeyi özetleyen PR'ı açtım. Bu PR'ı da, aynı zincirleme mantığıyla, dünkü tamamlanmamış PR'ın üzerine kurdum; o PR merge olduğunda bugünkü PR'ın hedefi otomatik olarak ana dala dönecek.<\/p>


                                                                              <\/p>


                                                                              <\/p>

                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                              1. <\/span>[10:39]<\/strong> (622523a<\/em>) Add a rule-based delay risk scoring engine Scores tasks 0-100 for delay risk using deadline proximity, progress lag against the expected pace, and the project's historical completion velocity. Pure function, no LLM involved.<\/li>
                                                                              2. <\/span>[12:11]<\/strong> (d6a1443<\/em>) Add an AI-generated natural-language explanation for task delay risk New POST \/api\/tasks\/:taskId\/risk-explanation endpoint: computes the rule-based risk score for a task, then has the interactive LLM turn it into a short Turkish explanation of why the task is (or isn't) at risk.<\/li>
                                                                              3. <\/span>[15:09]<\/strong> (7929638<\/em>) Surface delay risk scores on the dashboard New GET \/api\/dashboard\/risk endpoint lists the current user's tasks sorted by delay risk score. Added a panel to the Overview page's Detaylar tab showing that list, with a per-task button to request an AI explanation on demand.<\/li>
                                                                              4. <\/span>[15:59]<\/strong> (ebca1df<\/em>) Add task time tracking and factor logged effort into delay risk Adds a task_time_entries table plus GET\/POST \/api\/tasks\/:taskId\/time-entries for manual effort entries and a stop\/start timer in the task detail modal, alongside an estimated vs. spent hours comparison. The delay risk engine now takes an optional effort factor: time logged beyond a task's estimate raises its risk score. The factor is excluded entirely (not just zeroed) when no time-tracking data exists yet, so the existing risk scores are unaffected until someone starts logging time. The AI risk explanation prompt also surfaces the estimated vs. spent comparison when available.<\/li>
                                                                              5. <\/span>[17:20]<\/strong> (54626b9<\/em>) Let the delay risk panel be filtered by project GET \/api\/dashboard\/risk now accepts an optional projectId query param, filtered server-side before the top-N cutoff so a risky task in one project can't get crowded out by another project's tasks. The Overview page's risk panel gains a project dropdown, shown only when the user belongs to more than one project.<\/li><\/ol>\n\n--- DAY 14 (2026-08-06) ---\n

                                                                                Güne, her zamanki gibi Daily toplantısında bir önceki günün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım. Bugünün hedefi, yapay zeka tarafındaki hata yönetimini güçlendirmek olduğu için önce yeni bir çalışma dalı açtım. Bu branch'i de dünküne zincirleme yöntemiyle bağlayarak açtım, çünkü dünkü PR henüz onaylanmamıştı ve bugünkü işler onun üzerine kurulu olacaktı.<\/p>

                                                                                Asıl işe, modele gönderdiğim talimatları tek tek gözden geçirerek başladım. Görev bölme, sprint özeti ve risk açıklaması gibi özelliklerde modelin bazen cevabına yanlışlıkla sayı ya da İngilizce kelime karıştırdığını fark etmiştim. Bunu önlemek için talimatlara daha net sınırlar koydum; örneğin modele ham sayılar yerine \"yüksek\", \"orta\", \"düşük\" gibi sözel ifadeler vererek, sayıları kendi cümlesine karıştırmasının önüne geçtim.<\/p>

                                                                                Sonra modelden gelen cevapların beklediğim formatta olup olmadığını kontrol etme şeklimi değiştirdim. Daha önce bunu elle yazdığım kontrollerle yapıyordum, ama bu yöntem hem bakımı zor hem de hata mesajları belirsizdi. Bunun yerine, gelen her cevabı ortak bir şablona göre doğrulayan hazır bir kütüphaneye geçtim. Böylece hem kod sadeleşti hem de bir cevap şablona uymadığında tam olarak hangi alanın neden hatalı olduğunu görebiliyorum.<\/p>

                                                                                Bu doğrulamayı kurduktan sonra, model şablona uymayan bir cevap verdiğinde sistemin sadece hata verip durmasını istemedim. Bunun yerine, hata oluştuğunda modele kendi hatasını gösterip bir kez daha deneme fırsatı veren bir düzeltme mekanizması ekledim. Böylece küçük bir format hatası yüzünden kullanıcının elle tekrar denemesi gerekmiyor. Ayrıca yerel modele giden isteklere bir zaman sınırı koydum; model bir sebeple çok uzun süre cevap vermezse sistem sonsuza kadar beklemek yerine belirli bir süre sonra hatayı bildirip devam ediyor.<\/p>

                                                                                Gün planındaki asıl hedefi bitirdikten sonra, kullanım sırasında fark ettiğim iki küçük arayüz sorununu da düzeltmeye karar verdim. Görev detay penceresi dikeyde çok uzamıştı, onu daha yatay ve ferah bir iki sütunlu görünüme kavuşturdum. Ayrıca giriş yaptıktan sonra karşılaşılan karşılama ekranından ana sayfaya geri dönebilecek bir yol olmadığını fark ettim, oraya da bir bağlantı ekledim.<\/p>

                                                                                Gün boyunca yaptığım her değişikliği küçük parçalar halinde commit'leyip pushladım. Gün sonunda bugün yapılan her şeyi özetleyen PR'ı açtım. Bu PR'ı da, aynı zincirleme mantığıyla, dünkü tamamlanmamış PR'ın üzerine kurdum; o PR merge olduğunda bugünkü PR'ın hedefi otomatik olarak ana dala dönecek.<\/p>


                                                                                <\/p>


                                                                                <\/p>


                                                                                <\/p>

                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                1. <\/span>[11:34]<\/strong> (a822ea7<\/em>) Improve prompts for task splitting, sprint summaries, and risk explanations Task split: bound subtask count to 2-6, require Turkish, forbid vague \"description is unclear\" non-answers, and disallow prose outside the JSON payload. Sprint summary: forbid preamble sentences, cap bullet count, and forbid inventing tasks not in the completed list. Risk explanation: the model was echoing raw scores and English level names (e.g. \"75\/100\", \"high\") back into its Turkish explanation. Feed it qualitative Turkish labels instead of numbers and tell it explicitly not to use digits, percentages, or English words. Verified against the live Ollama model.<\/li>
                                                                                2. <\/span>[12:49]<\/strong> (30d6274<\/em>) Validate AI JSON responses against a shared Zod schema Replaces the hand-rolled isValidSuggestion type guard in the task split route with a Zod schema (ai\/schemas.ts) and a small parseAIResponse helper (ai\/parseAIResponse.ts) that both the AI's raw suggestion and a user's edited version are checked against. The main win is error quality: failures used to collapse into a generic \"doesn't match the expected schema\" message, now they name the exact field and reason (e.g. \"subtasks.0.title: Too small: expected string to have >=1 characters\").<\/li>
                                                                                3. <\/span>[14:14]<\/strong> (7321345<\/em>) Add request timeouts and a schema-correction retry for AI calls OllamaProvider now aborts a request after 45s instead of letting it hang indefinitely if the local model stalls. The task split endpoint retries once with a correction prompt (the Zod validation error fed back to the model) when the AI's JSON fails schema validation, instead of failing immediately. Transient errors (network, timeout) skip the retry since a correction prompt wouldn't help there.<\/li>
                                                                                4. <\/span>[16:47]<\/strong> (63918e6<\/em>) Widen the task detail modal into a two-column layout The modal had grown tall as fields (estimated hours, time tracking) were added, and the time-tracking row's note input was getting truncated. Split it into two columns (main content vs. metadata sidebar) and widened it (max-w-lg -> max-w-2xl), which trades the height for width and gives the time-tracking row enough room. Also capped the modal at 90vh with scroll as a safety net.<\/li>
                                                                                5. <\/span>[17:35]<\/strong> (070d966<\/em>) Trim landing nav and add a way back from the welcome screen Drop the pricing link from the landing navbar and move Solutions before Features. Make the logo on the post-login welcome page a link back to the landing page, since there was previously no way to navigate back to it.<\/li><\/ol>\n\n--- DAY 15 (2026-08-07) ---\n

                                                                                  Güne, her zamanki gibi Daily toplantısında bir önceki günün özetini paylaşarak ve bugünün hedeflerini belirleyerek başladım. Bugünün hedefi yeni bir özellik eklemek değil, önceki üç günde yazdığım yapay zekâ özelliklerini gerçek senaryolarla test etmek ve demoya hazırlamaktı. Bu yüzden yeni branch'imi dünkü branch'in üzerine zincirleyerek açtım, çünkü test edeceğim şeylerin çoğu tam olarak dünkü değişikliklere dayanıyordu.<\/p>

                                                                                  İlk olarak görev bölme akışını baştan sona hem API üzerinden hem de tarayıcıda gerçek yapay zekâ modeliyle denedim. Ardından gecikme riski skorunu farklı senaryolarla test ettim: vadesi geçmiş görevler, efor aşımı olan görevler, vadesi olmayan görevler gibi. Bu testler sırasında bir görevin harcanan süresinin tahmini aştığı durumda, yapay zekanın açıklamasına ham sayıların sızdığını fark ettim; oysa bu sayıları modele hiç göstermeyip sözel bir ifadeyle anlatmam gerekiyordu, onu düzelttim. Sonra boş, çok kısa ve çok uzun açıklama gibi uç durumları denedim; kısa açıklamalarda modelin, promptta örnek olarak verdiğim bir başlığı gerçek öneriymiş gibi kopyaladığını gördüm, o örneği kaldırıp modelin açıklamaya özgü kalmasını istedim. En sonunda hata ve yedek mekanizmalarını gerçek model çağrılarıyla tek tek doğruladım.<\/p>

                                                                                  Bunların arasında sprint özeti özelliğini de tarayıcıda test ederken daha ciddi bir sorunla karşılaştım: tek bir görev tamamlanmışken yapay zekâ üç görev listelemiş, ikisini uydurmuştu. Bunu, modele listede kaç görev olduğunu açıkça söyleyip fazladan görev icat etmemesini isteyerek düzelttim ve gerçek modelle tekrar test ederek doğruladım.<\/p>

                                                                                  Planlı testleri bitirdikten sonra iki küçük ekstra özellik daha yaptım. Birincisi, uygulamanın her yerinden Ctrl +K ile açılabilen bir komut paleti; sayfalar arası hızlı geçiş, tema değiştirme ve çıkış yapma gibi işlemleri klavyeden yapabiliyorsun artık. İkincisi, görevleri birbirine \"bekliyor\", \"ilgili\" ya da \"kopyası\" olarak bağlayabildiğim bir özellik; bir görevde eklenen bağlantı, karşı görevde de otomatik olarak ters yönden görünüyor, böylece bir görevin başka bir görevi engellediğini her iki taraftan da görebiliyorsun.<\/p>

                                                                                  Gün boyunca yaptığım her değişikliği küçük parçalar halinde commit'leyip pushladım. Gün sonunda bugün yapılan her şeyi özetleyen PR'ı açtım.<\/p>


                                                                                  <\/p>


                                                                                  <\/p>


                                                                                  <\/p>

                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                  1. <\/span>[12:13]<\/strong> (b5511eb<\/em>) Stop two AI prompts from leaking raw content into their output Found via live end-to-end testing with real Ollama: - The risk explanation prompt fed raw estimated\/spent hours to the model while also telling it not to use any numbers; the model often echoed the raw hours anyway. Replaced them with the same qualitative labels used for the other risk factors. - The task-split prompt's example subtask title (\"Giriş formunu tasarla\") sometimes got copied verbatim into real suggestions, especially for vague or short descriptions. Replaced the example with an instruction to stay specific to the given description.<\/li>
                                                                                  2. <\/span>[14:36]<\/strong> (7aa6753<\/em>) Stop the sprint summary prompt from inventing completed tasks Live testing surfaced two issues in the same call: the model sometimes prefixed its answer with the exact intro sentence the prompt named as forbidden (\"İşte özet:\"), and with a single real completed task it fabricated two more that never happened. Reworked the rules to avoid quoting the banned phrase (naming it seems to invite the model to echo it, as seen in today's other prompt fixes) and to state the exact number of tasks the output must cover.<\/li>
                                                                                  3. <\/span>[16:07]<\/strong> (60b93aa<\/em>) Add a Ctrl\/Cmd+K command palette for quick navigation Available on every authenticated page: jump to a section, toggle theme, or sign out without leaving the keyboard.<\/li>
                                                                                  4. <\/span>[17:32]<\/strong> (aca73b3<\/em>) Add a backend for linking tasks to each other New task_dependencies table plus GET\/POST\/DELETE routes for blocked_by, relates_to, and duplicates relations between two tasks in the same project. A task's dependency list includes both directions (what it depends on and what depends on it) so a blocking relationship shows up on both tasks.<\/li>
                                                                                  5. <\/span>[18:19]<\/strong> (a06a8a1<\/em>) Show task dependencies in the task detail modal Lets a task be linked to another as blocked-by, related, or a duplicate, from the same modal used for everything else on a task. A dependency shows on both linked tasks (e.g. \"blocked by\" on one side, \"blocking\" on the other), so the relationship is visible either way it's opened.<\/li><\/ol>\n" + }, + "Hakan Üzer": { + "id": 20, + "email": "hakanuzer1@gmail.com", + "repo": "https:\/\/github.com\/Emresatil\/Recycle-Rush-VR\/tree\/feature\/ar-golden-spawner-rewards", + "github_username": "Hakan460", + "total_entries": 26, + "commits_count": 0, + "commits_sample": [], + "full_text": "\n--- DAY 1 (2026-07-01) ---\n

                                                                                    Konu: <\/strong>Unity VR Proje İskeletinin Oluşturulması ve Versiyon Kontrol (Git) Ayarları<\/p>

                                                                                    Yapılan Çalışmalar:<\/strong><\/p>


                                                                                    <\/p>

                                                                                    1. <\/span>Recycle Rush VR projemizin geliştirme süreçlerine başlamak adına, performans ve stabilite göz önünde bulundurularak projenin ana iskeleti Unity 3D (LTS) sürümü üzerinden başarıyla oluşturuldu.<\/li>
                                                                                    2. <\/span>Ekip içi versiyon kontrol süreçlerinin (Git & GitHub) sorunsuz ve temiz ilerlemesi amacıyla projeye Unity mimarisine uygun standart .gitignore dosyası eklendi.<\/li>
                                                                                    3. <\/span>Bu sayede; Unity'nin otomatik olarak oluşturduğu ve cihazlara özel olan \"Library\", \"Temp\", \"Logs\", \"Obj\" gibi gereksiz ve yüksek boyutlu geçici klasörlerin Git deposuna gönderilmesi (commit edilmesi) engellendi.<\/li>
                                                                                    4. <\/span>Proje dizin yapısı (Assets klasör düzeni vb.), \"Faz 0\" mimari planlama kurallarımıza uygun olarak geliştirilmeye hazır ve temiz bir hale getirildi.<\/li><\/ol>


                                                                                      <\/p>

                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                      1. <\/span>[19:18]<\/strong> (8ce8e8b<\/em>) Initial commit<\/li>
                                                                                      2. <\/span>[21:15]<\/strong> (b324d33<\/em>) build(core): initialize Unity VR project and add .gitignore Initialized the base Unity 3D (LTS) project for Recycle Rush VR and added the standard Unity .gitignore file to ensure temporary files (Library, Temp, Logs, etc.) are excluded from version control.<\/li><\/ol>\n\n--- DAY 2 (2026-07-02) ---\n

                                                                                        Konu:<\/strong> Unity VR Projenin Sadeleştirlmesi ve XR Altyapısının Yapılandırılması<\/p>

                                                                                        Yapılan Çalışmalar:<\/p>


                                                                                        <\/p>

                                                                                        Proje İskeletinin Temizlenmesi ve Kurulumu:<\/strong> Recycle Rush VR projesinin geliştirme süreçlerinin temiz ve optimize ilerlemesi amacıyla, başlangıçta kullanılan VR şablonunun (VR Template) getirdiği ve kullanılmayacak olan ağır örnek sahneler, öğretici dosyalar (Tutorial) ve gereksiz bileşenler (VRTemplateAssets, CompositionLayers vb.) projeden tamamen temizlendi.<\/p>

                                                                                        Mimari Yapının Kurulması: implementation_plan.md dökümanında (Tek Doğruluk Kaynağı - SSOT) belirlenen katı klasör mimarisine sadık kalınarak Assets\/_App\/ dizini altındaki çekirdek klasör yapıları (Scenes, Scripts, Prefabs vb.) oluşturuldu.<\/p>

                                                                                        Versiyon Kontrol Optimizasyonu: GitHub üzerindeki gereksiz dosya kalabalığını önlemek amacıyla, Unity standartlarına uygun .gitignore dosyası eklendi; böylelikle yalnızca proje ayarları (ProjectSettings) ve kütüphane bağımlılıkları (manifest.json) Git takibine alındı.<\/p>


                                                                                        <\/p>

                                                                                        VR Altyapısının (XR) Yapılandırılması:<\/strong> Projenin Meta Quest (Android) ortamında çalışabilmesi için XR Plug-in Management üzerinden \"OpenXR\" aktif edildi. Etkileşim profillerine \"Oculus Touch Controller Profile\" eklenerek gözlük ve kontrolcü destekleri sağlandı.<\/p>


                                                                                        <\/p>

                                                                                        Ana Sahne (MainGame) Düzenlemeleri:<\/strong> Oyunun temel sahnesine sanal gerçeklik oyuncusunu temsil eden XR Origin (VR) ve etkileşimleri yönetecek olan XR Interaction Manager objeleri eklendi. Görüntü çakışmalarını (Rendering Conflict) önlemek amacıyla Unity'nin varsayılan \"Main Camera\" objesi sahneden kaldırıldı ve URP performans ayarları optimize edildi.<\/p>


                                                                                        <\/p>

                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                        1. <\/span>[12:51]<\/strong> (15c5bfb<\/em>) build(core): initialize clean Unity VR project and set proper .gitignore Initialized the base Unity 3D (LTS) project for Recycle Rush VR. To address the previous review feedback and maintain a clean repository: - Removed all bloated VR Template sample files (`VRTemplateAssets`, `CompositionLayers`, etc.). - Set up the strict directory structure exactly as defined in the `implementation_plan.md`. - Added standard Unity `.gitignore` to prevent tracking `Library\/`, `Temp\/`, and `Logs\/`. - Only essential configurations (`ProjectSettings`, `manifest.json`) and the base folder structures are committed.<\/li>
                                                                                        2. <\/span>[15:57]<\/strong> (80816c8<\/em>) feat(core): configure XR Interaction Toolkit and OpenXR Configured the XR Plugin Management and OpenXR settings for Meta Quest development. - Ensured OpenXR is selected as the active plugin for the Android build target. - Added 'Oculus Touch Controller Profile' to the Interaction Profiles. - Enabled 'Meta Quest Support' in OpenXR Feature Groups. - Set up the foundational VR environment in `MainGame` scene: - Added `XR Origin (VR)` to handle the headset and controllers. - Added `XR Interaction Manager` to handle future grab\/throw events. - Removed the default `Main Camera` to prevent rendering conflicts.<\/li><\/ol>\n\n--- DAY 3 (2026-07-03) ---\n

                                                                                          Versiyon Kontrol (Git) Çakışmalarının Çözümlenmesi ve 3D Çevre\/Obje Tasarımlarının Projeye Entegre Edilmesi<\/strong><\/p>

                                                                                          1. <\/span>Git Çakışmalarının (Merge Conflict) Çözümü:<\/strong> Ekip arkadaşımla eş zamanlı yürütülen çalışmalar sonucunda ProjectSettings.asset dosyasında (OpenXR ve build ayarları kaynaklı) oluşan \"Merge Conflict\" sorunu tespit edildi. Çakışan kod satırları GitHub Web arayüzü üzerinden manuel olarak incelendi ve doğru ayarların üzerine yazılması engellenerek sorunsuz bir şekilde main dalı ile feature\/unity-setup dalı birleştirildi (Merge işlemi).<\/li><\/ol>


                                                                                            <\/p>

                                                                                            1. <\/span>3D Sanat Yönetimi ve Optimizasyon:<\/strong> Proje dokümanında (Faz 0, Gün 3) belirtilen hedef doğrultusunda, cihazda yüksek FPS (akıcılık) sağlayacak olan Low-Poly (düşük poligonlu) 3D modeller araştırıldı ve projeye dâhil edildi.<\/li><\/ol>


                                                                                              <\/p>

                                                                                              1. <\/span>Sahne Materyallerinin Yüklenmesi:<\/strong><\/li>
                                                                                              2. <\/span>Oyuncunun içinde bulunacağı depo\/fabrika (Environment) çevre modelleri projeye eklendi.<\/li>
                                                                                              3. <\/span>Oyunun temel \"Core Loop\" mekaniğini oluşturacak olan 4 farklı renkteki (Mavi, Yeşil, Kırmızı, Sarı) geri dönüşüm kutuları projeye dâhil edildi.<\/li>
                                                                                              4. <\/span>Üretim bandından (Spawner) akacak olan farklı tipteki atıkları temsil etmesi amacıyla cam ve metal atık modelleri eklendi.<\/li><\/ol>


                                                                                                <\/p>

                                                                                                1. <\/span>Klasör Hiyerarşisi:<\/strong> İndirilen tüm bu 3D hazır varlıkların (Assets), projenin kendi kodlarından izole kalması adına Assets\/ThirdParty\/ dizinine yerleştirilmesi sağlandı. Böylece projenin temiz mimarisi korundu.<\/li><\/ol>


                                                                                                  <\/p>

                                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                                  1. <\/span>[10:25]<\/strong> (a9567a7<\/em>) Merge branch 'main' into feature\/unity-setup<\/li>
                                                                                                  2. <\/span>[18:03]<\/strong> (1d62a76<\/em>) design(env): import low-poly environment and waste assets Imported essential 3D assets to build the core visual environment for Recycle Rush VR. All models are optimized (Low-Poly) for standalone VR performance and comply with the SSOT implementation plan structure. - **Environment:** Imported the main place layout to serve as the player's surroundings. - **Recycling Bins:** Added 4 colored recycle bins (Blue, Green, Red, Yellow) which will act as the target trigger zones for the core gameplay loop. - **Waste Items:** Imported glass and metal waste models to be used by the spawner system. - **Folder Structure:** Ensured all external downloaded assets are strictly placed inside the `Assets\/ThirdParty` directory to keep our core `_App` folder clean.<\/li><\/ol>\n\n--- DAY 4 (2026-07-06) ---\n

                                                                                                    VR Sahne Tasarımı (Blockout) ve Editor-İçi Cihaz Simülasyonu (XR Device Simulator) Kurulumu<\/strong><\/p>


                                                                                                    <\/p>

                                                                                                    1. Temel Sahne Düzenlemesi (Scene Blockout):<\/strong> Projenin \"Faz 0\" planlaması doğrultusunda, daha önce içeri aktardığımız (import) Low-Poly 3D modeller kullanılarak MainGame isimli ana sahnemizin mekânsal tasarımı (Blockout) gerçekleştirildi. Bu aşamada sanal gerçeklik (VR) ergonomisi göz önünde bulundurularak:<\/p>

                                                                                                    Oyuncunun sabit duracağı merkez noktası belirlendi.<\/p>

                                                                                                    Atıkların akacağı taşıma bandı (conveyor belt) oyuncunun rahatça erişebileceği (kol mesafesi) bir konuma yerleştirildi.<\/p>

                                                                                                    Oyunun ana mekaniğini oluşturacak olan Mavi, Yeşil, Kırmızı ve Sarı geri dönüşüm kutuları, oyuncunun atıkları rahat fırlatabileceği açılar hesaplanarak sahneye dizildi. Bu sayede projenin kodlanabilir temel fiziksel iskeleti kurulmuş oldu.<\/p>


                                                                                                    <\/p>

                                                                                                    2. XR Device Simulator Entegrasyonu:<\/strong> Sanal gerçeklik projelerinde her bir kod değişikliğini test etmek için fiziksel gözlüğü (Meta Quest) kafaya takıp çıkarmak ve cihaza APK derlemek (build almak) ciddi bir zaman kaybı yaratmaktadır. Geliştirme hızını (Development Cycle) artırmak amacıyla:<\/p>


                                                                                                    <\/p>

                                                                                                    Unity XR Interaction Toolkit paketi içerisinden \"XR Device Simulator\" modülü projeye entegre edildi ve yapılandırmaları yapıldı.<\/p>

                                                                                                    Bu simülatör sayesinde, oyun motorunun içindeyken (Play Mode) klavye (Shift ve Space tuşları) ve fare yardımıyla Meta Quest'in sağ ve sol kontrolcülerinin (ellerin) pozisyonu, rotasyonu ve tetik tuşları (Trigger\/Grip) simüle edilebilir hale getirildi.<\/p>


                                                                                                    <\/p>

                                                                                                    3. Doğrulama ve Test İşlemleri:<\/strong> Kurulan simülatör sistemi Unity Editor içerisinde başarılı bir şekilde test edildi. Sanal ellerin kameraya göre doğru açıda çalıştığı, hareket yeteneklerinin aktif olduğu doğrulandı.<\/p>


                                                                                                    <\/p>

                                                                                                    Sonuç ve Kazanımlar:<\/strong> Bugünkü çalışmalar neticesinde, oyunun görsel çevre düzenlemesi tamamlanmış ve projenin \"Faz 0 - Kurulum ve Proje İskeleti\" aşaması resmi olarak bitirilmiştir. Özellikle XR Device Simulator'ın projeye dâhil edilmesiyle birlikte, yarın başlanacak olan \"Faz 1 - Çekirdek Mekanikler\" sürecinde atıkların tutulması (Grab) ve fırlatılması (Throw) gibi mekaniklerin gözlüğe ihtiyaç duyulmadan çok daha hızlı bir şekilde kodlanıp test edilebilmesi için harika bir altyapı sağlanmıştır.<\/p>


                                                                                                    <\/p>

                                                                                                    Git Commit Mesajları:<\/strong><\/p>

                                                                                                    1. <\/span>[13:09]<\/strong> (6ef5039<\/em>) design(env): setup scene blockout and xr device simulator Completed the Day 4 objectives by finalizing the initial scene blockout and setting up the in-editor testing environment for Recycle Rush VR. - **Scene Blockout:** Placed the imported low-poly environment, conveyor belt, and colored recycling bins into the `MainGame` scene to establish the core spatial layout. - **Testing Setup:** Imported and configured the `XR Device Simulator` from the XR Interaction Toolkit package. - **Verification:** Successfully tested and verified the simulation of Meta Quest controllers (using Shift\/Space keys and mouse) directly within the Unity Editor, ensuring we can test interactions without always needing the physical headset.<\/li><\/ol>\n\n--- DAY 5 (2026-07-07) ---\n

                                                                                                      Taşıma Bandı (Conveyor Belt) Fizik Sisteminin İyileştirilmesi ve Hata Ayıklama (Debugging)<\/strong><\/p>


                                                                                                      <\/p>

                                                                                                      Yapılan Çalışmalar ve Teknik Detaylar:<\/strong><\/p>

                                                                                                      Bugün, \"Faz 1 - Çekirdek Mekanikler\" aşamasına giriş yapılarak oyunun ana döngüsünü (Core Loop) oluşturacak taşıma bandı sistemi üzerinde çalışılmıştır. Ekip arkadaşım Sabri tarafından BeltMovement.cs scripti kullanılarak bandın temel itme mekaniği (Treadmill tekniği) kaba hatlarıyla kurgulanmıştı. Ancak VR ortamındaki testler sırasında, bandın üzerine düşen cam şişe gibi yüksek ağırlık merkezine sahip dar\/uzun objelerde \"sekme (bouncing)\", \"titreme (jittering)\" ve \"yüzeyin içinden geçme (micro-clipping)\" gibi ciddi fiziksel stabilite sorunları tespit edilmiştir.<\/p>


                                                                                                      <\/p>

                                                                                                      Mekaniklerin VR standartlarında pürüzsüz çalışabilmesi için kodu devralarak aşağıdaki spesifik fizik iyileştirmelerini (Refactoring) gerçekleştirdim:<\/p>


                                                                                                      <\/p>

                                                                                                      1. Çarpışma ve Sekme Kontrolü (Anti-Bounce & Clipping Fix):<\/strong> Objelerin banda yukarıdan düştüğü ilk anda (OnCollisionEnter) meydana gelen düzensiz sekmeleri engellemek adına, objenin dikeydeki düşüş hızı (Y ekseni) koda müdahale edilerek anında sıfırlandı. Ayrıca Unity'nin varsayılan \"Discrete\" çarpışma algılaması, obje banda temas ettiği an \"Continuous\" (Sürekli) moda çekildi. Bu sayede objelerin bandın ince yüzeyinden aşağıya sızması (clipping) engellendi.<\/p>


                                                                                                      <\/p>

                                                                                                      2. Titreme ve Devrilme (Anti-Jitter) Optimizasyonu:<\/strong> Bandın hareket tekniği sürtünme kuvvetine dayandığı için objelerin alt tabanı çekilirken üst kısımları geride kalarak devrilmelerine sebep oluyordu. Bu sorunu çözmek için Unity'nin RigidbodyConstraints yapısı koda entegre edildi. Objeler banda değdiği saniye rotasyonları sıfırlanıp kod üzerinden otomatik olarak kilitlendi (FreezeRotation). Böylece manuel bir Inspector ayarına gerek kalmadan, spawner'dan üretilecek onlarca farklı atığın bant üzerinde dimdik ve sıfır titreme ile akması garanti altına alındı.<\/p>


                                                                                                      <\/p>

                                                                                                      3. VR Etkileşim Uyumluluğu:<\/strong> Objelerin rotasyonlarının kilitlenmesi, oyuncunun onları eline aldığında (Grab) veya fırlattığında doğal hareket etmelerini engelleyecekti. Bu durumu aşmak için OnCollisionExit metodu yazılarak, obje bandın üzerinden ayrıldığı anda (oyuncu eline aldığında veya banttan düştüğünde) konulan tüm rotasyon kilitlerinin otomatik olarak kaldırılması sağlandı.<\/p>


                                                                                                      <\/p>

                                                                                                      Sonuç:<\/strong> Başlangıç seviyesindeki taşıma bandı kodu, VR fizikleriyle %100 uyumlu, pürüzsüz ve stabil çalışan dinamik bir sisteme dönüştürüldü. Atıkların üretim bandında kusursuzca akması sağlandı ve bir sonraki aşama olan \"Atık Üretim Sistemi (Waste Spawner)\" için sağlam bir zemin hazırlandı.<\/p>


                                                                                                      <\/p>

                                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                                      1. <\/span>[14:05]<\/strong> (d6171b0<\/em>) feat(env): implement physics-based conveyor belt movement Implemented the core conveyor belt logic (`BeltMovement.cs`) to transport physical objects smoothly along the X-axis for Recycle Rush VR. - **Treadmill Movement:** Utilized Rigidbody `MovePosition` within `FixedUpdate` for reliable surface friction dragging without moving the actual belt GameObject. - **Stability Fixes (Anti-Jitter & Anti-Bounce):** - Added `OnCollisionEnter` to zero out vertical velocity upon landing, preventing objects from bouncing off the belt. - Automatically applied `RigidbodyConstraints.FreezeRotation` on impact to completely eliminate top-heavy object tipping and jittering. - Enforced `CollisionDetectionMode.Continuous` to prevent micro-clipping through the belt surface. - **VR Grabbing Compatibility:** - Added `OnCollisionExit` to automatically release the rotation constraints when the player grabs the object or when it falls off the belt, allowing natural physical interactions in VR.<\/li><\/ol>\n\n--- DAY 6 (2026-07-08) ---\n

                                                                                                        Geri Dönüşüm Atıkları İçin VR Prefab Kurulumu, Fiziksel Etkileşim Ayarları ve Versiyon Kontrolü<\/strong><\/p>

                                                                                                        Yapılan Çalışmalar ve Teknik Detaylar:<\/p>


                                                                                                        <\/p>

                                                                                                        Bugün, Recycle Rush VR projesinin en temel oyun mekaniğini (Core Gameplay) oluşturacak \"Atık ve Sınıflandırma Sistemi\"nin altyapısına başlanmıştır. Geliştirme sürecini hızlandırmak adına takım arkadaşım Sabri ile iş bölümüne gidilmiş; Plastik ve Kağıt atıkların entegrasyonunu o üstlenirken, ben projedeki Cam (Glass) ve Metal atık modellerinin oyuna entegre edilip VR fizikleriyle uyumlu hale getirilmesi görevini yürüttüm.<\/p>


                                                                                                        <\/p>

                                                                                                        Çalışmalarım üç ana başlık altında gerçekleştirilmiştir:<\/p>


                                                                                                        <\/p>

                                                                                                        1. 3D Modellerin Prefab Mimarisinde Yeniden Yapılandırılması: <\/strong>Daha önceden projeye eklenmiş olan (Import) ham 3D Cam ve Metal modelleri, oyun içerisinde \"Spawner\" (üretici) sistemi tarafından sürekli olarak yaratılıp (Instantiate) yok edileceği (Destroy) için standart birer Unity Prefab dosyasına dönüştürüldü. Bu mimari yaklaşım sayesinde, atıkların oyunun her sahnesinde aynı özellikleri koruyarak tekrar kullanılabilmesi sağlandı.<\/p>


                                                                                                        <\/p>

                                                                                                        2. VR Etkileşimleri ve Fiziksel Çarpışma Kurulumları (Physics Setup):<\/strong> Atıkların dünkü görevde tamamlanan taşıma bandıyla (Conveyor Belt) doğru bir şekilde etkileşime girebilmesi ve oyuncu tarafından VR el kontrolcüleriyle (XR Controllers) sorunsuz şekilde tutulup (Grab) fırlatılabilmesi için gerekli bileşenler atandı.<\/p>


                                                                                                        <\/p>

                                                                                                        Her iki prefab'a da nesnenin uzaysal şekline tam oturan uygun Collider (çarpışma sınırları) bileşenleri eklendi.<\/p>

                                                                                                        Atıkların yerçekimi, sürtünme ve taşıma bandının uyguladığı itme kuvvetine doğru tepki vermesi için Rigidbody bileşenleri eklenerek, kütle (mass) ve sürüklenme (drag) ayarları VR standartlarına göre optimize edildi.<\/p>


                                                                                                        <\/p>

                                                                                                        3. Sınıflandırma (Sorting) Sistemi İçin Tag Entegrasyonu:<\/strong> Oyunun temel mantığı olan \"doğru çöpü doğru kutuya atma\" sisteminin çalışabilmesi için, Unity'nin etiketleme altyapısı kullanıldı. Çöp kutularına yazılacak olan algılama algoritmalarının, gelen objeyi tanıyabilmesi adına prefab'lara özel olarak Glass (Cam) ve Metal etiketleri (Tag) tanımlanıp atandı.<\/p>


                                                                                                        <\/p>

                                                                                                        4. Versiyon Kontrol (Git) Yönetimi ve Kriz Çözümü:<\/strong> Kendi branch'imde (feature\/glass-metal-prefabs) yaptığım bu geliştirmeleri ana projeye (main) birleştirmek (Merge) istediğimde bir Git çakışması (Merge Conflict) meydana geldi. Yapılan analizde, Sabri ile eş zamanlı olarak kendi bilgisayarlarımızda oluşturduğumuz Waste klasörlerinin Unity tarafından atanan gizli kimliklerinin (.meta GUID) çakıştığı tespit edildi. Sahnedeki prefab referanslarının bozulmasını engellemek adına, main dalındaki GUID korunarak (Accept Incoming Change) bu kriz profesyonel bir şekilde çözüldü ve projenin bütünlüğü sağlandı.<\/p>


                                                                                                        <\/p>

                                                                                                        Sonuç: <\/strong>Oyunun Spawner ve Ayrıştırma sistemlerinin üzerine inşa edileceği \"Etkileşimli Atık Modelleri\"nin (Cam ve Metal) altyapısı tamamen bitirildi ve ana projeye sorunsuz bir şekilde birleştirildi.<\/p>


                                                                                                        <\/p>

                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                        1. <\/span>[12:19]<\/strong> (c47babe<\/em>) feat(waste): setup glass waste prefab and physics Configured the Glass waste model for the VR recycling system. - **Prefab Creation:** Converted the imported 3D glass model into a reusable Unity Prefab. - **Physics Setup:** Added Rigidbody and Collider components to enable physical interactions with the environment (e.g., the conveyor belt) and the player's VR hands. - **Tagging:** Created and assigned the `Glass` tag to the prefab to ensure compatibility with the upcoming sorting bin logic.<\/li>
                                                                                                        2. <\/span>[14:26]<\/strong> (e64bdd1<\/em>) Merge branch 'main' into feature\/glass-metal-prefabs<\/li>
                                                                                                        3. <\/span>[15:43]<\/strong> (cfb0c2a<\/em>) feat(waste): setup metal waste prefab and physics Configured the Metal waste model for the VR recycling system. - **Prefab Creation:** Converted the imported 3D metal model into a reusable Unity Prefab. - **Physics Setup:** Added Rigidbody and Collider components to enable physical interactions with the environment and VR grabbing mechanics. - **Tagging:** Assigned the `Metal` tag to the prefab to ensure proper detection by the upcoming sorting bin system.<\/li><\/ol>\n\n--- DAY 7 (2026-07-09) ---\n

                                                                                                          VR Etkileşim Mekaniklerinin (XR Grab Interactable) Kurulumu ve \"Oyun Hissi\" (Game Feel) Optimizasyonları<\/strong><\/p>


                                                                                                          <\/p>

                                                                                                          Yapılan Çalışmalar ve Teknik Detaylar:<\/strong><\/p>

                                                                                                          Bugün, Recycle Rush VR projesindeki en temel oyuncu etkileşimi olan \"nesne tutma ve fırlatma\" (Grab & Throw) mekaniklerinin geliştirilmesine odaklanılmıştır. Takım içi görev dağılımı kapsamında, projedeki ağır siklet (Heavy Waste) atıklar olarak sınıflandırılan Cam (Glass) ve Metal atık modellerinin VR etkileşim altyapıları kurulmuş ve fiziksel gerçekçilikleri optimize edilmiştir.<\/p>


                                                                                                          <\/p>

                                                                                                          Çalışmalarım üç ana başlık altında tamamlanmıştır:<\/p>


                                                                                                          <\/p>

                                                                                                          1. Etkileşim Bileşenlerinin (XR Grab Interactable) Entegrasyonu:<\/strong> Oyuncunun hareketli taşıma bandı (Conveyor Belt) üzerinden akan atıkları sanal elleriyle alabilmesi için, tüm Cam ve Metal prefab'larına Unity XR Interaction Toolkit mimarisinin XR Grab Interactable bileşeni entegre edilmiştir. Bu entegrasyon aşamasında, her iki materyalin hacimsel farklılıkları göz önünde bulundurularak çarpışma sınırları (collider bounds) kontrol edilmiş ve objelerin elden kaymadan temiz bir şekilde tutulabilmesi sağlanmıştır.<\/p>


                                                                                                          <\/p>

                                                                                                          2. Ağırlık Simülasyonu ve Fırlatma Fiziği (Physics & Throw Tuning):<\/strong> Cam ve metal objelerin, kağıt veya plastik gibi hafif objelerden farklı hissettirmesi VR deneyiminin gerçekçiliği (Immersion) için kritik bir unsurdur.<\/p>


                                                                                                          <\/p>

                                                                                                          Bu gerçekçiliği sağlamak adına etkileşim bileşenindeki hareket tipi (Movement Type), anında kilitlenme (Kinematic) yerine \"Velocity Tracking\" (Hız Takibi) olarak ayarlanmıştır. Bu sayede objeyi tutarken ve savururken sanal bir ağırlık ve eylemsizlik (Inertia) hissi yaratılmıştır.<\/p>

                                                                                                          Oyuncunun atıkları hedef geri dönüşüm kutularına isabetli atabilmesi için fırlatma yumuşatması (Throw Smoothing) değerleri kalibre edilmiş; objenin elden çıktığı andaki açı ve hız vektörlerinin doğru hesaplanması sağlanmıştır.<\/p>


                                                                                                          <\/p>

                                                                                                          3. Doğal Tutuş Noktalarının (Attach Transform) Ayarlanması:<\/strong> 3D modellerin merkez noktaları (Pivot) genellikle objelerin en alt tabanında bulunur. Eğer özel bir ayar yapılmazsa, VR eli objeyi bu taban noktasından kavrar ve bu da son derece yapay bir görüntü oluşturur. Bu ergonomik sorunu çözmek amacıyla, her bir Cam ve Metal prefab'ının içine özel \"Tutunma Noktaları\" (Attach Transform) tanımlanmış ve konumlandırılmıştır. Böylece oyuncunun objeyi tam ağırlık merkezinden (örneğin şişenin gövdesinden) doğal bir şekilde kavraması garanti altına alınmıştır.<\/p>


                                                                                                          <\/p>

                                                                                                          Sonuç:<\/strong> Cam ve Metal atıkların VR etkileşim mekanikleri, hem hareketli zeminle (taşıma bandı) hem de oyuncuyla tam uyumlu, fiziksel olarak gerçekçi bir seviyeye getirilmiştir. Simülatör (XR Device Simulator) üzerinden yapılan testlerde objelerin sorunsuz bir şekilde alınıp fırlatılabildiği doğrulanmış ve kodlar ana projeye birleştirilmeye (Merge) hazır hale getirilmiştir.<\/p>


                                                                                                          <\/p>


                                                                                                          <\/p>

                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                          1. <\/span>[11:23]<\/strong> (509763a<\/em>) feat(vr): add XR Grab Interactable to Glass waste prefabs Enabled VR interaction for Glass waste models. - Added XR Grab Interactable component to all glass prefabs. - Configured basic grab settings to allow players to pick up glass objects directly from the moving conveyor belt.<\/li>
                                                                                                          2. <\/span>[11:57]<\/strong> (273294c<\/em>) feat(vr): add XR Grab Interactable to Metal waste prefabs Enabled VR interaction for Metal waste models. - Added XR Grab Interactable component to all metal prefabs. - Ensured grab configuration matches the physical volume of metallic objects for a natural feel when held by VR hands.<\/li>
                                                                                                          3. <\/span>[17:07]<\/strong> (ec02cc3<\/em>) feat(vr): configure grab mechanics for glass and metal waste Configured XR Grab Interactable settings for Glass and Metal prefabs to enhance VR game feel. - **Grab Physics:** Set Movement Type to Velocity Tracking to simulate realistic weight and inertia. - **Throw Tuning:** Configured throw smoothing to ensure accurate and natural trajectories when tossing objects. - **Grip Position:** Defined custom Attach Transforms to ensure players hold the objects naturally from their center points rather than the base.<\/li><\/ol>\n\n--- DAY 8 (2026-07-10) ---\n

                                                                                                            Proje Dizin Optimizasyonu, Prefab Hata Çözümü ve Geri Dönüşüm Kutusu Algılama Mantığının (BinTrigger.cs) Geliştirilmesi<\/strong><\/p>


                                                                                                            <\/p>

                                                                                                            Yapılan Çalışmalar ve Teknik Detaylar:<\/strong><\/p>

                                                                                                            Bugün, projenin sürdürülebilirliği için önemli olan temiz dosya düzeni (Refactoring & Clean Code) çalışmaları yürütülmüş, ardından oyunun temel mekaniklerinden biri olan atık ayrıştırma ve geri dönüşüm algılama sistemi sisteme dahil edilmiştir. Yapılan çalışmalar mantıksal sıraya göre aşağıda detaylandırılmıştır:<\/p>


                                                                                                            <\/p>

                                                                                                            1. Proje Klasör Hiyerarşisi ve Sahne Optimizasyonu (Refactoring):<\/strong><\/p>

                                                                                                            Proje dosya düzenini standartlaştırmak adına, dağınık durumda bulunan geri dönüşüm kutusu (Recycling Bins) prefab'ları projenin ana prefab klasörü olan Assets\/_App\/Prefabs\/ dizini altına taşınmıştır.<\/p>

                                                                                                            Proje içinde yanlışlıkla Scripts klasörü altına kaydedilmiş olan mükerrer (kopya) MainGame.unity sahne dosyası silinerek versiyon kontrol sisteminde oluşabilecek kafa karışıklıkları önlenmiştir.<\/p>

                                                                                                            MainGame ana oyun sahnesindeki kullanılmayan, atıl kalmış ve sahne boyutunu artıran gereksiz GameObject'ler hiyerarşiden silinerek sahne optimize edilmiştir.<\/p>


                                                                                                            <\/p>

                                                                                                            2. Prefab Çarpışma ve Etiket Algılama Hatasının Çözülmesi (Debugging):<\/strong><\/p>

                                                                                                            Cam ve Metal atık prefab'ları test edilirken, geri dönüşüm kutusuna atılan nesnelerin yok olmadığı (algılanmadığı) gözlemlenmiştir. Yapılan hata analizinde (Debugging), Glass ve Metal etiketlerinin (Tag) prefab'ın ana objesine (Parent) tanımlandığı, fakat fiziksel çarpışmayı gerçekleştiren Collider bileşenlerinin alt objelerde (Child) yer aldığı tespit edilmiştir.<\/p>

                                                                                                            Bu durum, kutu tetikleyicisinin çarpışma anında alt objenin etiketini okumaya çalışıp \"Etiketsiz\" (Untagged) olarak algılamasına yol açmaktaydı. Sorunu çözmek için ilgili etiketler doğrudan Collider bileşeninin olduğu alt objelere tanımlanarak hata giderilmiş ve çarpışma algılaması aktif edilmiştir.<\/p>


                                                                                                            <\/p>

                                                                                                            3. Geri Dönüşüm Kutusu Algılama Mantığının (BinTrigger.cs) Yazılması:<\/strong><\/p>

                                                                                                            Atıkların doğru\/yanlış kutulara atıldığını denetleyecek BinTrigger.cs sınıfı kodlanmıştır. Bu sınıf, Unity'nin OnTriggerEnter metodunu kullanarak kutu alanına giren objeleri yakalar.<\/p>

                                                                                                            Loose Coupling (Gevşek Bağlılık):<\/strong> Yazılım mimarisinde spagetti kodlamayı önlemek adına; puan ekleme, ses çalma veya titreşim tetikleme işlemleri doğrudan bu script içinden yapılmamıştır. Bunun yerine statik bir C# Action (OnWasteProcessed) tanımlanmış ve tetiklenme anında tüm parametreler (isCorrect, ScoreChange, HapticParameters vb.) paketlenerek (Struct) bir olay (Event Broadcast) olarak yayınlanmıştır. Diğer yönetici sınıflar (Manager'lar) bu olayı dinleyerek kendi görevlerini yerine getirecektir.<\/p>

                                                                                                            Bellek Sızıntısı (Memory Leak) Önlemi:<\/strong> Çarpışma gerçekleştiğinde sadece çarpışan alt objenin (child) silinip ana objenin sahnede asılı kalmasını (ve zamanla oyunda kasma yapmasını) önlemek adına, other.attachedRigidbody.gameObject yapısı kullanılarak atık objesinin bağlı olduğu ana prefab'ın tamamı sahneden güvenli bir şekilde silinmiştir (Destroy).<\/p>

                                                                                                            Sahnedeki tüm geri dönüşüm kutularına BinTrigger.cs atanmış, tetikleyici alanları (IsTrigger aktif BoxCollider) kurulmuş ve her kutunun hangi atığı kabul edeceği (Enum üzerinden) Inspector'dan belirlenmiştir.<\/p>


                                                                                                            <\/p>

                                                                                                            Sonuç:<\/strong> Haftanın bu son gününde, hem sahne ve dosya temizliği tamamlanmış hem de fiziksel olarak kutuya atılan nesnelerin doğru etiketlerle algılanarak başarıyla yok edilmesi ve puan\/efekt sistemlerine olay (event) fırlatılması sağlanmıştır. Proje, bir sonraki aşama olan Spawner (Atık Üretici) ve Manager (Puan\/Ses\/Haptic Yönetim) sistemlerinin kodlanmasına tamamen hazır hale getirilmiştir.<\/p>


                                                                                                            <\/p>

                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                            1. <\/span>[11:17]<\/strong> (dc62fd7<\/em>) chore(scene): clean up redundant objects in MainGame.unity Optimized the MainGame scene hierarchy by removing unnecessary GameObjects. This cleanup improves scene readability and removes unused clutter before integrating the new sorting bin mechanics.<\/li>
                                                                                                            2. <\/span>[11:42]<\/strong> (d919d02<\/em>) chore(project): organize bin prefabs and remove duplicate scene Organized project assets by restructuring prefab paths and removing redundant files. - **Asset Relocation:** Moved recycling bin prefabs to the correct `_App\/Prefabs\/` directory to ensure clean project hierarchy. - **Cleanup:** Deleted the duplicate `MainGame.unity` scene file mistakenly saved inside the `Scripts\/` folder.<\/li>
                                                                                                            3. <\/span>[12:24]<\/strong> (0230021<\/em>) fix(waste): assign correct tags to child colliders of glass and metal prefabs Fixed waste detection by moving tag assignments to the child GameObjects that contain the Collider components. - **Prefab Tagging:** Transferred the `Glass` and `Metal` tags from the parent prefabs to their respective child colliders to ensure collision detection reads them correctly. - **Verification:** Confirmed that `BinTrigger` now successfully detects the incoming tags and resolves the recycling logic.<\/li>
                                                                                                            4. <\/span>[16:52]<\/strong> (376ca0b<\/em>) feat(sorting): implement recycling bin detection and sorting logic Implemented recycling bin collision and sorting detection. - Created `BinTrigger.cs` to identify incoming waste tags using trigger colliders. - Configured a C# event to broadcast correct\/incorrect sorting results to other scripts. - Ensured full prefab destruction by targeting the object's Rigidbody. - Set up trigger colliders and scripts on all recycling bins in the scene.<\/li><\/ol>\n\n--- DAY 9 (2026-07-13) ---\n

                                                                                                              GameManager Sınıfının Geliştirilmesi, Atık Üretici Sistemiyle Entegrasyon, Sahne Düzenlemesi ve Hata Ayıklama (Debugging) Çalışmaları<\/strong><\/p>


                                                                                                              <\/p>

                                                                                                              Yapılan Çalışmalar ve Teknik Detaylar:<\/strong><\/p>


                                                                                                              <\/p>

                                                                                                              Bugün, projenin ana döngüsünü yönetecek olan durum makinesinin kurulması, sahne elemanlarının birleştirilmesi ve bir önceki çalışmadan kalan prefab hatalarının temizlenmesi üzerine odaklanılmıştır. Yapılan teknik çalışmalar sırasıyla şu şekildedir:<\/p>


                                                                                                              <\/p>

                                                                                                              1. Atık Üretici Sisteminin Sahneye Entegrasyonu:<\/strong><\/p>

                                                                                                              -Cuma günü ekip arkadaşım Sabri tarafından geliştirilen atık üretim sistemi elemanları (WasteSpawnerManager ve SpawnPoint objeleri), aktif olarak üzerinde çalıştığımız MainGame.unity sahnesine başarılı bir şekilde entegre edilmiştir.<\/p>

                                                                                                              -Atıkların bandın başlangıcından düzgün bir şekilde akışa katılması için SpawnPoint objesi taşıma bandının giriş koordinatlarına tam oturacak şekilde yerleştirilmiştir.<\/p>


                                                                                                              <\/p>

                                                                                                              2. Kağıt ve Plastik Atık Prefab'larındaki Algılama Hatasının Çözülmesi:<\/strong><\/p>

                                                                                                              -Cam ve Metal atıklarında daha önce karşılaştığımız tag algılama hatasının, Kağıt (Paper) ve Plastik (Plastic) prefab'larında da mevcut olduğu tespit edilmiştir. Çarpışmayı algılayan Collider bileşenlerinin alt nesnelerde (child) yer almasına karşın, tag atamasının ana nesneye (parent) yapılmış olmasından ötürü geri dönüşüm kutuları bu atıkları yok etmemekteydi.<\/p>

                                                                                                              -İlgili Paper ve Plastic etiketleri doğrudan Collider bileşenini taşıyan alt nesnelere atanarak hata giderilmiş, yapılan simülasyon testlerinde kutuya giren atıkların anında ve pürüzsüzce yok edildiği doğrulanmıştır.<\/p>


                                                                                                              <\/p>

                                                                                                              3. GameManager Mimarisi ve Event Tabanlı Durum Kontrolü:<\/strong><\/p>

                                                                                                              -Oyunun anlık durumlarını (Başlangıç, Oynanış, Duraklatma, Oyun Sonu) kontrol edecek olan merkezi GameManager.cs sınıfı kodlanarak projenin Managers dizinine eklenmiştir.<\/p>

                                                                                                              -Kod mimarisinde spagetti bağımlılıkları engellemek ve \"God Object\" anti-pattern'inden kaçınmak adına Singleton Tasarım Deseni uygulanmıştır. Sınıf içinde Initialization, MainMenu, Playing, Paused, GameOver durumlarını içeren bir durum makinesi (State Machine) kurulmuş ve durum değişikliklerini sisteme duyuran statik C# Action Event'leri (OnGameStateChanged) tanımlanmıştır.<\/p>

                                                                                                              -Oyunun aktif oynanış süresini kontrol etmek için geriye sayan bir zamanlayıcı (Countdown Timer) entegre edilmiştir. Süre bittiğinde (RemainingTime <= 0) oyun durumu otomatik olarak GameOver durumuna geçmektedir.<\/p>


                                                                                                              <\/p>

                                                                                                              4. GameManager - Spawner Entegrasyonu:<\/strong><\/p>

                                                                                                              -GameManager ile WasteSpawner arasındaki loose-coupling (gevşek bağlılık) bağıını kurmak adına WasteSpawner.cs scripti güncellenmiştir.<\/p>

                                                                                                              -Spawner scriptinin GameManager'ın durum değişiklik olayına abone olması (Subscribe) sağlanmıştır. Bu sayede oyun bittiğinde (GameOver) veya duraklatıldığında (Paused), spawner scripti çöp üretmeyi otomatik olarak durdurmakta (StopCoroutine); oyun tekrar aktif olduğunda ise üretime kaldığı yerden devam etmektedir.<\/p>


                                                                                                              <\/p>

                                                                                                              Sonuç: <\/strong>Oyunun genel akışını yöneten GameManager sistemi kurulmuş, sahne elemanları entegre edilmiş, tüm atık prefab'larındaki çarpışma hataları giderilmiş ve atık üretim sistemi oyun süresiyle senkronize çalışacak hale getirilmiştir. Proje, puanlama ve görsel\/işitsel geri bildirim sistemlerinin (Managers) entegrasyonuna hazır hale getirilerek ana projeye (main) Pull Request açılmıştır.<\/p>


                                                                                                              <\/p>

                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                              1. <\/span>[11:42]<\/strong> (3b842dd<\/em>) chore(scene): integrate waste spawner manager and spawn point Integrated the WasteSpawnerManager and SpawnPoint components into the MainGame scene. - Positioned the SpawnPoint GameObject at the start of the conveyor belt. - Linked the WasteSpawnerManager to the active scene to enable automated prefab spawning.<\/li>
                                                                                                              2. <\/span>[14:40]<\/strong> (1b489e2<\/em>) fix(waste): assign correct tags to paper and plastic colliders Fixed paper and plastic waste detection by moving tags to child colliders. - Transferred `Plastic` and `Paper` tags to the child GameObjects containing the Collider components. - Confirmed that the recycling bins now successfully detect and destroy these objects.<\/li>
                                                                                                              3. <\/span>[17:49]<\/strong> (8b55e76<\/em>) feat(gameplay): implement game manager and integrate with spawner Implemented the core GameManager and integrated it with the waste spawning system. - Created `GameManager.cs` to manage states (Playing, Paused, GameOver) and countdown timer. - Added C# action events to broadcast game state changes to other systems. - Updated `WasteSpawner.cs` to listen to state events and stop spawning on GameOver.<\/li><\/ol>\n\n--- DAY 10 (2026-07-14) ---\n

                                                                                                                Hatalı Atık Modellerinin Yenilenmesi, Taşıma Bandı Sonu İmha Alanının (DestroyZone) Sahne Kurulumu ve Ceza Mekaniğinin Kodlanması<\/strong><\/p>


                                                                                                                <\/p>

                                                                                                                Yapılan Çalışmalar ve Teknik Detaylar:<\/strong><\/p>

                                                                                                                Bugün, VR oyunumuzun hem kararlılığını (fizik optimizasyonu) hem de oynanış mekaniklerini (ceza puanı) doğrudan etkileyen önemli geliştirme ve hata ayıklama süreçleri yürütülmüştür. Gerçekleştirilen çalışmalar üç ana başlık altında aşağıda detaylandırılmıştır:<\/p>


                                                                                                                <\/p>

                                                                                                                1. Hatalı Atık Modellerinin Yenilenmesi ve Fizik Ayarları:<\/strong><\/p>

                                                                                                                -Proje testleri sırasında düzgün çalışmadığı ve fiziksel hatalara (sapmalar, titremeler) yol açtığı tespit edilen iki adet atık modeli tamamen silinmiş ve yerlerine kararlı çalışan yeni 3D modeller eklenmiştir.<\/p>

                                                                                                                -Yeni eklenen atık modellerinin oyuna entegre edilebilmesi için sıfırdan Unity prefab yapıları hazırlanmıştır. Bu kapsamda nesnelere yerçekimi ve çarpışma özelliklerini kazandıran Rigidbody ve Collider bileşenleri eklenmiştir.<\/p>

                                                                                                                -Oyuncunun bu nesneleri elleriyle tutabilmesini (Grab) sağlamak amacıyla XR Grab Interactable bileşeni entegre edilmiş, doğru tutuş açısı için Attach Transform ayarları yapılmıştır.<\/p>

                                                                                                                -Son olarak, bu yeni prefablar sahnedeki WasteSpawner (Atık Üretici) bileşeninin listesine (Array) dahil edilerek üretim döngüsüne katılmış ve sorunsuz çalıştıkları simülatör ile test edilmiştir.<\/p>


                                                                                                                <\/p>

                                                                                                                2. Sahne Üzerinde Atık İmha Alanının (DestroyZone) Yapılandırılması:<\/strong><\/p>

                                                                                                                -Taşıma bandından düşen ve oyuncu tarafından yakalanamayan çöplerin sonsuz boşluğa düşerek oyun motorunu (fizik hesaplamalarını) yormasını engellemek adına bandın sonuna görünmez bir bariyer kurulmuştur.<\/p>

                                                                                                                -Sahneye eklenen bir Cube nesnesinin üzerindeki Mesh Renderer silinerek oyuncu için tamamen görünmez hale getirilmiştir.<\/p>

                                                                                                                -Nesnenin Box Collider bileşeni aktif edilerek \"Is Trigger\" seçeneği işaretlenmiş ve bandın sonundan düşebilecek tüm atıkların içinden geçeceği büyüklükte (genişlikte) ölçeklendirilmiştir.<\/p>


                                                                                                                <\/p>

                                                                                                                3. Atık İmha Mantığı ve Ceza Mekanizması Kodlaması (DestroyZone.cs):<\/strong><\/p>

                                                                                                                -İmha alanına çarpan nesneleri algılayıp yönetecek olan DestroyZone.cs sınıfı yazılmıştır.<\/p>

                                                                                                                -GC Dostu Algılama: Tetikleyici alana çarpan objelerin etiketleri (Tag), Unity'nin arka planda çöp bellek (Garbage) üretmeyen en optimize tag kontrol metodu olan CompareTag ile taranarak nesnenin bir atık olup olmadığı denetlenmiştir. --Böylece el veya bant gibi çevre nesnelerin imha edilmesi önlenmiştir.<\/p>

                                                                                                                -Loose Coupling (Gevşek Bağlılık): İmha alanına düşen her atık için oyuncudan eksi puan düşülmesi hedeflenmiştir. Bu işlem, ScoreManager sınıfını doğrudan çağırmak yerine, statik bir C# Action olan OnWasteMissed olayı (Event) fırlatılarak gerçekleştirilmiştir. Sistem bu olay tetiklendiğinde dinleyici sınıflara otomatik olarak -5 ceza puanı bilgisini yayınlamaktadır.<\/p>

                                                                                                                -Bellek Sızıntısı ve Kök Temizliği: Çarpan atığın alt objelerinin (child) yok edilip ana nesnenin sahnede hayalet obje olarak kalmasını önlemek adına, other.transform.root.gameObject kodu kullanılarak ilgili prefabın tamamı sahneden silinmiştir (Destroy).<\/p>


                                                                                                                <\/p>

                                                                                                                Sonuç: <\/strong>Hatalı atıkların değiştirilmesiyle başlayan süreç, bandın sonuna kurulan imha sistemiyle tamamlanmıştır. Bu sayede hem oyuna kaçırılan çöpler için bir ceza puanı mekanizması (oyun zorluğu) eklenmiş hem de sahneden düşen çöpler anında silinerek oyunun VR cihazlardaki performansı (FPS kararlılığı) güvence altına alınmıştır.<\/p>


                                                                                                                <\/p>

                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                1. <\/span>[07:41]<\/strong> (2e8add4<\/em>) refactor(waste): replace broken waste models and update spawner Replaced two malfunctioning waste models with new functional assets. - Configured tags, colliders, rigidbodies, and XR Grab Interactable components on the new prefabs. - Added the new waste prefabs to the WasteSpawner array in the scene. - Verified physical interactions and spawning behavior.<\/li>
                                                                                                                2. <\/span>[12:45]<\/strong> (ea791f3<\/em>) chore(scene): setup destroy zone at the end of conveyor belt Created and configured the DestroyZone GameObject in the MainGame scene. - Positioned a trigger BoxCollider at the end of the conveyor belt to catch missed waste. - Expanded the collider bounds to ensure all falling waste items are captured. - Removed the Mesh Renderer to keep the zone invisible to the player.<\/li>
                                                                                                                3. <\/span>[17:31]<\/strong> (28c181b<\/em>) feat(gameplay): implement destroy zone logic and score penalty Implemented the DestroyZone script and attached it to the scene trigger. - Created `DestroyZone.cs` to handle out-of-bounds waste cleanup and prevent memory leaks. - Setup a static C# Action `OnWasteMissed` to broadcast a customizable penalty score (-5 by default). - Attached the script as a component to the DestroyZone GameObject in the scene.<\/li><\/ol>\n\n--- DAY 11 (2026-07-16) ---\n

                                                                                                                  UI Modeli Entegrasyonu, Atık Kaçırma Ceza Puanı Düzeltmesi, Makine Kolu VR Etkileşimi\/Animasyon Kurulumu, Dinamik Zorluk Algoritmasının Geliştirilmesi ve Sahnelerin Modüler Prefab Yapısına Dönüştürülmesi<\/strong><\/p>


                                                                                                                  <\/p>

                                                                                                                  Yapılan Çalışmalar ve Teknik Detaylar:<\/strong><\/p>

                                                                                                                  Bugün, VR oyununun görsel geri bildirim kalitesini artıran, oynanışı dinamik hale getiren ve projenin takım çalışmasına uygunluğunu (sahne kararlılığı) artıran çok yönlü geliştirmeler yapılmıştır:<\/p>


                                                                                                                  <\/p>

                                                                                                                  1. TV Monitörü ve UI Arayüz Entegrasyonu:<\/strong><\/p>

                                                                                                                  1. <\/span>Oyuncunun skor ve oyun durumu bilgilerini takip edebilmesi için tasarlanan 3D TV monitör modeli oyun alanına konumlandırılmıştır.<\/li>
                                                                                                                  2. <\/span>Unity'nin World Space Canvas arayüz yapısı kullanılarak hazırlanan arayüz ekranları, TV monitörünün ekran alanıyla hizalanmış ve arayüzü kontrol eden UIManager sahneye entegre edilmiştir.<\/li><\/ol>


                                                                                                                    <\/p>

                                                                                                                    2. Atık Kaçırma Puanlama Hatasının Giderilmesi (Bug Fix):<\/strong><\/p>

                                                                                                                    1. <\/span>Banttan düşen atıklar fiziksel olarak yok edilmesine rağmen skor ekranına yansımamaktaydı. Bu hatayı gidermek için ScoreManager.cs çekirdek sınıfı güncellenmiştir.<\/li>
                                                                                                                    2. <\/span>ScoreManager, imha alanından fırlatılan DestroyZone.OnWasteMissed olayına (Event) abone edilmiştir. Atık kaçırıldığında tetiklenen bu olay sayesinde, oyuncudan -5 ceza puanı düşülmesi ve bu bilginin anında güncellenerek dijital ekrana yansıtılması sağlanmıştır.<\/li>
                                                                                                                    3. <\/span>Bellek yönetimini korumak için OnEnable ve OnDisable metotlarında aboneliklerin temizlenmesi (unsubscription) sağlanarak olası bellek sızıntıları (memory leak) önlenmiştir.<\/li><\/ol>


                                                                                                                      <\/p>

                                                                                                                      3. Makine Kolu (Lever) VR Etkileşimi ve Animasyon Tasarımı:<\/strong><\/p>

                                                                                                                      1. <\/span>Hazır makine modelinin üzerinde bulunan kırmızı kolun kontrolsüzce sürekli oynamasını engellemek için Animator Controller (Machn_1_UpDown) yeniden yapılandırılmıştır.<\/li>
                                                                                                                      2. <\/span>Giriş durumunun (Entry) hemen ardına boş bir Idle durumu tanımlanarak varsayılan yapılmış ve oyun başında kolun sabit kalması sağlanmıştır. Kolun aşağı-yukarı hareketi için tek seferlik (non-looping) oynatma koşulu ve Pull trigger parametresi kurulmuştur.<\/li>
                                                                                                                      3. <\/span>Kod tarafında MachineLever.cs yazılmış, kol objesine XRSimpleInteractable (VR buton etkileşimi) ve fiziksel algılama için Collider eklenmiştir. Oyuncu VR kontrolcüsüyle bu kolu lazerle seçip tetik tuşuna bastığında kodun Animator üzerindeki Pull tetikleyicisini ateşlemesi sağlanarak etkileşim tamamlanmıştır.<\/li><\/ol>


                                                                                                                        <\/p>

                                                                                                                        4. Dinamik Zorluk Algoritmasının Entegre Edilmesi:<\/strong><\/p>

                                                                                                                        1. <\/span>Oyunun ilerleyen dakikalarında tempo artışı sağlamak amacıyla DifficultyManager.cs adında bağımsız bir yönetici sınıf kodlanmıştır. Bu sınıf, ScoreManager'dan gelen skor değişimlerini dinleyerek 50, 100 ve 200 puan eşiklerinde zorluk katsayısını (1.2x, 1.5x, 2.0x) artırır ve OnDifficultyLevelChanged event'ini fırlatır.<\/li>
                                                                                                                        2. <\/span>WasteSpawner.cs güncellenerek bu zorluk katsayısına göre atık doğma aralıklarını daraltması (daha sık atık üretmesi) sağlanmıştır.<\/li>
                                                                                                                        3. <\/span>BeltMovement.cs güncellenerek zorluk katsayısı yükseldikçe bandın kayma hızını doğrusal olarak artırması sağlanmıştır. Böylece oyun içi zorluk oyuncunun performansına göre organik olarak ölçeklenmektedir.<\/li><\/ol>


                                                                                                                          <\/p>

                                                                                                                          5. Sahne Modülerleştirme Refaktörü (Okunabilirlik & Git Optimizasyonu):<\/strong><\/p>

                                                                                                                          1. <\/span>MainGame.unity sahnesinde bağımsız duran onlarca oyun objesi, projenin büyümesiyle oluşabilecek karmaşayı ve Git sürüm kontrol çakışmalarını (Merge Conflict) engellemek adına mantıksal gruplara ayrılmıştır.<\/li>
                                                                                                                          2. <\/span>Sahnede dağınık duran tüm objeler; ConveyorSystem_Module (Bant ve Spawner), CoreSystems_Module (Yöneticiler), Environment_Module (Bina ve Çevre) ve RecyclingArea_Module (Kutular ve TV) adı altında 4 ana Prefab Modülüne dönüştürülmüştür. Sahne hiyerarşisi sadeleştirilerek sadece bu modüllerin referanslarını tutan hafif bir yapıya kavuşturulmuştur.<\/li><\/ol>

                                                                                                                            Sonuç:<\/strong> Bugünkü geliştirmeler sonucunda VR oyunumuzun arayüz geri bildirimleri tamamlanmış, puanlama mekanizmasındaki kritik bir hata giderilmiş, VR etkileşimli makine kolu çalışır hale getirilmiş ve oyun temposunu belirleyen dinamik zorluk eğrisi kurulmuştur. Sahnenin tamamen prefab modüllerine ayrılmasıyla projenin mimari altyapısı profesyonel seviyeye taşınmıştır.<\/p>


                                                                                                                            <\/p>

                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                            1. <\/span>[11:25]<\/strong> (be57a80<\/em>) chore(scene): integrate TV monitor model and UIManager components Integrated the TV monitor model and UIManager components into the scene. - Positioned the TV monitor model for the score display. - Integrated the UIManager and UI Canvas into the MainGame scene.<\/li>
                                                                                                                            2. <\/span>[12:50]<\/strong> (3533eac<\/em>) fix(score): apply score penalty when waste falls off conveyor belt Subscribed ScoreManager to the DestroyZone event to handle missed waste items. - Subscribed ScoreManager to `DestroyZone.OnWasteMissed` inside OnEnable\/OnDisable. - Implemented `HandleWasteMissed` to subtract penalty points when a waste item is missed. - Ensured clean event unsubscription to prevent memory leaks.<\/li>
                                                                                                                            3. <\/span>[15:05]<\/strong> (8619aef<\/em>) chore(animation): setup animator controller and states for machine lever Configured the Animator Controller and states for the red machine lever. - Created an Idle state as the default state to prevent autoplay on startup. - Setup transitions between the Idle and Lever Pull animation states. - Configured the 'Pull' trigger parameter and transition condition. - Disabled looping on the lever pull animation clip to ensure it plays only once per click.<\/li>
                                                                                                                            4. <\/span>[15:07]<\/strong> (40aed75<\/em>) feat(interaction): implement MachineLever script for VR interaction Created the MachineLever script to bridge VR interactions with Animator triggers. - Implemented `MachineLever.cs` to listen to VR controller selection inputs. - Subscribed to `XRSimpleInteractable`'s `selectEntered` event to trigger the Animator. - Used a customizable trigger parameter name ('Pull' by default) for the animation state transition.<\/li>
                                                                                                                            5. <\/span>[17:08]<\/strong> (489dd62<\/em>) feat(core): implement DifficultyManager for score-based scaling Created the DifficultyManager class to control game speed and progression. - Implemented `DifficultyManager.cs` to monitor score updates from `ScoreManager`. - Defined score-based thresholds (50, 100, 200 points) to step through 4 difficulty levels. - Added a static C# Action `OnDifficultyLevelChanged` to broadcast difficulty multipliers.<\/li>
                                                                                                                            6. <\/span>[17:13]<\/strong> (3d511eb<\/em>) refactor(spawner): scale waste spawn intervals based on difficulty level<\/li>
                                                                                                                            7. <\/span>[17:14]<\/strong> (ee11a5a<\/em>) refactor(belt): scale conveyor belt speed based on difficulty level<\/li>
                                                                                                                            8. <\/span>[22:38]<\/strong> (6e67976<\/em>) refactor(scene): modularize scene hierarchy into system prefabs Grouped scene objects into modular prefabs to simplify the hierarchy and prevent Git conflicts. - Created ConveyorSystem, CoreSystems, Environment, and RecyclingArea module prefabs. - Cleaned up MainGame.unity scene by replacing loose GameObjects with their modular prefabs.<\/li><\/ol>\n\n--- DAY 12 (2026-07-17) ---\n

                                                                                                                              UI Font Güncellemesi, Ses Varlıklarının Entegrasyonu ve Makine Kolu ile Tetiklenen Oyun Başlangıç Akışının Kodlanması<\/strong><\/p>


                                                                                                                              <\/p>

                                                                                                                              Yapılan Çalışmalar ve Teknik Detaylar:<\/strong><\/p>

                                                                                                                              Bugün, VR oyunumuzun arayüz estetiğini ve oyun akış kalitesini artıracak üç ana başlık üzerinde çalışılmış ve projenin başlangıç mekanikleri daha profesyonel bir yapıya kavuşturulmuştur:<\/p>


                                                                                                                              <\/p>

                                                                                                                              1. Arayüz Yazı Tipi (Typography) Güncellemesi:<\/strong><\/p>

                                                                                                                              1. <\/span>VR (Sanal Gerçeklik) ortamında ekran piksellerinin yakınlığı nedeniyle standart yazı tiplerinin okunabilirliği düşebilmektedir. Bunu engellemek adına endüstri standardı olan ve uzaktan okunabilirliği yüksek, kalın hatlara sahip ChakraPetch-Medium yazı tipi projeye dahil edilmiştir.<\/li>
                                                                                                                              2. <\/span>İndirilen yazı tipi dosyası Assets\/_App\/UI\/Fonts\/ dizinine yerleştirilmiş ve Unity TextMesh Pro (TMP) sistemi kullanılarak bir SDF (Signed Distance Field) Font Asset'ine dönüştürülmüştür.<\/li>
                                                                                                                              3. <\/span>Hazırlanan bu yeni font, arayüzü oluşturan ana prefablarımıza (CoreSystems_Module ve RecyclingArea_Module) uygulanarak skor ekranı ve metinlerin VR ortamında daha net ve keskin görünmesi sağlanmıştır.<\/li><\/ol>


                                                                                                                                <\/p>

                                                                                                                                2. Ses Varlıkları (Audio Assets) ve Versiyon Yönetimi:<\/strong><\/p>

                                                                                                                                1. <\/span>Oyunda makine etkileşimi sırasında kullanılacak olan işitsel geri bildirim varlıkları projeye kazandırılmıştır. Bu kapsamda, kol çekildiğinde çalacak mekanik klik sesi ile makine çalışırken arka planda kesintisiz dönecek olan motor\/bant gürültüsü (Engine Loop) ses dosyaları ilgili ses dizinine (Assets\/_App\/Audio\/) eklenmiştir.<\/li>
                                                                                                                                2. <\/span>Yükleme sırasında oluşan ufak bir sürüm kontrol hatası, ilgili commit geri alınarak (revert) ve dosyalar en temiz haliyle tekrar commit edilerek çözülmüş; Git geçmişinin temiz kalması sağlanmıştır.<\/li><\/ol>


                                                                                                                                  <\/p>

                                                                                                                                  3. Makine Kolu ile Başlayan Oyun Akışı (Gameplay Flow):<\/strong><\/p>

                                                                                                                                  1. <\/span>Oyunun açıldığı anda otomatik olarak başlamasını engelleyen ve oyuncuyu fiziksel bir kol etkileşimiyle oyunu başlatmaya teşvik eden oyun başlangıç akışı kodlanmıştır.<\/li>
                                                                                                                                  2. <\/span>GameManager.cs sınıfı güncellenerek oyunun ilk aşamada otomatik olarak StartGame() metodunu çağırması iptal edilmiş ve oyunun bir bekleme durumunda (GameState.MainMenu) kalması sağlanmıştır.<\/li>
                                                                                                                                  3. <\/span>MachineLever.cs scripti güncellenmiştir. VR kontrolcüyle kola ilk tıklandığında GameManager.Instance.StartGame() çağrısı yapılarak zamanlayıcı, spawner ve taşıma bandı aktif hale getirilmiştir.<\/li>
                                                                                                                                  4. <\/span>Oyun başladıktan sonra kolun tekrar çekilmesi durumu optimize edilmiştir. Kol tekrar çekildiğinde oyuna duraklatma (Pause) gibi oyun akışını kesintiye uğratacak bir müdahalede bulunulmamakta; sadece kolun çalışma animasyonu tetiklenmekte ve işitsel geri bildirim üretilmektedir.<\/li>
                                                                                                                                  5. <\/span>AudioManager ile haberleşmeyi sağlamak amacıyla MachineLever.cs içerisine OnLeverPulledAction C# Event yapısı eklenmiştir. Böylece kol her çekildiğinde fırlatılan bu sinyal sayesinde arayüz ve ses sistemlerinin eşzamanlı çalışması garanti altına alınmıştır.<\/li><\/ol>

                                                                                                                                    Sonuç:<\/strong> Bugün yapılan geliştirmelerle oyunun açılışındaki otomatik başlama hatası giderilmiş, oyun döngüsünün başlama kararı oyuncunun fiziksel etkileşimine bağlanmıştır. UI fontlarının güncellenmesi ve ses altyapısının kurulmasıyla kullanıcı deneyimi (UX) güçlendirilmiştir.<\/p>


                                                                                                                                    <\/p>

                                                                                                                                    Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                    1. <\/span>[11:35]<\/strong> (9157bd9<\/em>) design(ui): import ChakraPetch font and apply it to UI prefabs<\/li>
                                                                                                                                    2. <\/span>[18:06]<\/strong> (f1b2962<\/em>) chore(audio): import lever click and machine engine loop sound assets<\/li>
                                                                                                                                    3. <\/span>[18:08]<\/strong> (87f3a7e<\/em>) Revert \"chore(audio): import lever click and machine engine loop sound assets\" This reverts commit f1b2962e54e2df37da181f4fb28eec1782fea724.<\/li>
                                                                                                                                    4. <\/span>[18:09]<\/strong> (5b9a3a9<\/em>) chore(audio): import lever click and machine engine loop sound assets<\/li>
                                                                                                                                    5. <\/span>[18:14]<\/strong> (78725e8<\/em>) feat(gameplay): implement lever-activated game start flow Updated GameManager and MachineLever to wait for user interaction before starting the game. - Modified `GameManager.cs` to start in the MainMenu state instead of starting automatically. - Updated `MachineLever.cs` to trigger `GameManager.Instance.StartGame()` upon the first lever pull. - Added the `OnLeverPulledAction` C# event to notify the AudioManager when the lever is clicked. - Subsequent lever pulls trigger the animation and event but do not pause or restart the running game.<\/li><\/ol>\n\n--- DAY 13 (2026-07-20) ---\n

                                                                                                                                      Derleme Hatası Giderme, Kombo ve Katlayıcı (Combo & Multiplier) Mantığının Kodlanması, Arayüz Lerp Pop Animasyon Entegrasyonu ve İki Aşamalı Anti-Cheat (Hile Koruması) Sisteminin Geliştirilmesi<\/strong><\/p>


                                                                                                                                      <\/p>

                                                                                                                                      Yapılan Çalışmalar ve Teknik Detaylar:<\/strong><\/p>

                                                                                                                                      Bugün, VR projemizin eğlence katsayısını artıracak oyun içi kombo sistemleri kurulmuş ve oyuncuların oyundaki mekanik açıkları (exploit) kullanmasını engelleyecek güvenlik çözümleri geliştirilmiştir:<\/p>


                                                                                                                                      <\/p>

                                                                                                                                      1. Hata Giderme ve Kod Temizliği:<\/strong><\/p>

                                                                                                                                      1. <\/span>Önceki geliştirme aşamasından kalan ve derleme aşamasında kırmızı hata veren MachineLever.cs içerisindeki mükerrer OnLeverPulledAction event tanımı temizlenmiş (CS0102 derleyici hatası giderilmiş), kod tabanının stabil şekilde çalışması sağlanmıştır.<\/li><\/ol>


                                                                                                                                        <\/p>

                                                                                                                                        2. Kombo ve Katlayıcı (Combo & Multiplier) Sisteminin Kodlanması:<\/strong><\/p>

                                                                                                                                        1. <\/span>Oyunda peş peşe yapılan doğru eşleştirmeleri ödüllendirmek amacıyla ScoreManager.cs sınıfı güncellenmiştir. Sınıfa ComboCount ve CurrentMultiplier özellikleri eklenmiştir.<\/li>
                                                                                                                                        2. <\/span>Skor Katlama Mantığı: Peş peşe yapılan doğru atışlarda kombo sayacı artmakta; 3 doğru atışta puanlar 2x, 5 ve üzeri doğru atışlarda 3x çarpanı ile eklenmektedir. Yanlış kutuya atış yapıldığında veya atık kaçırıldığında kombo anında 0'a sıfırlanmaktadır.<\/li>
                                                                                                                                        3. <\/span>Sistemler arası gevşek bağlılığı (Loose Coupling) korumak adına kombo durumundaki değişimleri duyuran OnComboChanged Action event'i fırlatılmıştır.<\/li><\/ol>


                                                                                                                                          <\/p>

                                                                                                                                          3. Görsel Arayüz (UI Pop) Animasyon Entegrasyonu:<\/strong><\/p>

                                                                                                                                          1. <\/span>RecyclingArea_Module prefabı içerisine ScreenSpace Overlay modunda çalışan yeni bir ComboText TextMeshPro bileşeni eklenmiştir.<\/li>
                                                                                                                                          2. <\/span>UIManager.cs scripti OnComboChanged olayını dinleyecek şekilde güncellenmiştir. Katlayıcı aktifleştiğinde (x2, x3) ekranda altın sarısı (#FFD700) renkte metin belirmekte ve \"Lerp\" matematiği kullanılarak 0.15 saniyede %50 büyüyüp (Scale Up) 0.25 saniyede yavaşça normal boyutuna küçülen (Scale Down) bir \"Pop\" (patlama) animasyonuyla oyuncuya dinamik bir görsel geri bildirim sunulmaktadır.<\/li><\/ol>


                                                                                                                                            <\/p>

                                                                                                                                            4. İki Aşamalı Anti-Cheat (Hile Koruması) Mimarisi:<\/strong><\/p>

                                                                                                                                            1. <\/span>Zemin Bölgesi Koruması (FloorZone.cs): Oyuncuların atıkları bandın sonuna düşürmeyip yere atarak süreyi geçirmelerini engellemek amacıyla yeni bir FloorZone.cs sınıfı yazılmıştır. Zemindeki objelerin Collider'ı Is Trigger yapılarak bu script Environment_Module.prefab zeminine atanmıştır. Yere düşen atıklar için 3 saniyelik bir hoşgörü süresi tanımlanmıştır. VR oyuncusu çöpü 3 saniye içinde tekrar eline almazsa (XRGrabInteractable.isSelected kontrolü), çöp yok edilerek oyuncudan ceza puanı (-5) düşülmüş ve kombosu sıfırlanmıştır.<\/li>
                                                                                                                                            2. <\/span>Süre Sonu Puanlama Engeli (BinTrigger.cs): Oyuncuların süre bittikten sonra yerdeki veya ellerindeki atıkları kutulara atarak puan kazanmasını engellemek amacıyla BinTrigger.cs içerisine güvenlik duvarı eklenmiştir. Oyun durumu GameState.Playing olmadığı sürece kutulara giren atıklar yoksayılmaktadır.<\/li><\/ol>


                                                                                                                                              <\/p>

                                                                                                                                              5. Dal Birleştirme ve Çakışma Yönetimi:<\/strong><\/p>

                                                                                                                                              1. <\/span>Yapılan geliştirmeler sonucunda main dalındaki son değişiklikler feature\/haptic-feedback-system dalı ile sorunsuz şekilde birleştirilmiş (Merge), prefab YAML çakışmaları başarıyla çözülmüştür.<\/li><\/ol>


                                                                                                                                                <\/p>

                                                                                                                                                Sonuç:<\/strong> Bugün tamamlanan geliştirmelerle oyun tekdüzelikten çıkarılarak heyecanlı bir \"Arcade\" yapısına kavuşturulmuş; görsellik dinamik animasyonlarla desteklenmiş ve oyun dengesini bozabilecek tüm suistimal yolları tamamen kapatılmıştır.<\/p>


                                                                                                                                                <\/p>


                                                                                                                                                <\/p>

                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                1. <\/span>[11:01]<\/strong> (abd4074<\/em>) fix(lever): remove duplicate event definition to resolve CS0102 compiler error<\/li>
                                                                                                                                                2. <\/span>[13:23]<\/strong> (3ebaf6a<\/em>) feat(ui): add combo text display and Lerp pop animation in UIManager<\/li>
                                                                                                                                                3. <\/span>[13:27]<\/strong> (e07c1c3<\/em>) feat(ui): add ComboText UI element and bind reference to UIManager<\/li>
                                                                                                                                                4. <\/span>[14:54]<\/strong> (a975b36<\/em>) feat(score): implement combo counter and score multiplier logic Updated ScoreManager to track consecutive successful sorts and scale score rewards. - Added `ComboCount` and `CurrentMultiplier` properties to calculate score multipliers. - Implemented multiplier scaling thresholds (3 consecutive = 2x, 5+ consecutive = 3x). - Added the `OnComboChanged` C# Action event to broadcast combo updates to UI components. - Added combo reset logic when an incorrect bin is targeted or waste is missed.<\/li>
                                                                                                                                                5. <\/span>[18:24]<\/strong> (602526d<\/em>) fix(gameplay): ignore waste sorting in BinTrigger when game is not active<\/li>
                                                                                                                                                6. <\/span>[18:25]<\/strong> (974fd97<\/em>) feat(environment): implement FloorZone anti-cheat script and setup floor prefab collider Created FloorZone script and configured Environment_Module prefab to prevent waste hoarding exploits. - Implemented `FloorZone.cs` to track waste items dropped onto the floor. - Added a 3-second grace period before destroying dropped waste and invoking `OnWasteMissedFloor` penalty event. - Added logic to ignore waste items currently held (`isSelected`) by the VR player. - Set floor collider `isTrigger` to true and attached the `FloorZone` component in `Environment_Module.prefab`.<\/li>
                                                                                                                                                7. <\/span>[21:31]<\/strong> (4d3954f<\/em>) Merge branch 'main' into feature\/haptic-feedback-system<\/li><\/ol>\n\n--- DAY 14 (2026-07-21) ---\n

                                                                                                                                                  Faz 3 - Gün 14: İnteraktif Öğretici (Tutorial) Sistemi, Ses\/Animasyon Senkronizasyonu ve UI Cilalama<\/strong><\/p>


                                                                                                                                                  <\/p>

                                                                                                                                                  🛠️ Yapılan Teknik Çalışmalar ve Adımlar<\/strong><\/p>


                                                                                                                                                  <\/p>

                                                                                                                                                  1. UI ve Kullanıcı Deneyimi (UX) Biçimlendirmeleri<\/strong><\/p>

                                                                                                                                                  1. <\/span>Zamanlayıcı Formatı: <\/strong>TV ekranında yer alan geri sayım sayacının başına \"Time: \" ön eki eklenerek oyuncunun kalan süreyi daha net anlaması sağlandı (Time: 60).<\/li>
                                                                                                                                                  2. <\/span>Kombo Yazısı Zamanlayıcısı:<\/strong> Ekranda beliren 2x COMBO! metninin ölçeklenme (Lerp Pop) animasyonu bittikten sonra ekranda takılı kalmaması için UIManager içerisine 1 saniyelik otomatik gizleme zamanlayıcısı eklendi.<\/li><\/ol>


                                                                                                                                                    <\/p>

                                                                                                                                                    2. Ses Asset Yönetimi ve Senkronizasyon<\/strong><\/p>

                                                                                                                                                    1. <\/span>Kayıp Seslerin İçe Aktarılması:<\/strong> Önceki birleştirme (merge) sürecinde ezilerek kaybolan motor döngüsü (engine loop) ve kol klik ses dosyaları projeye tekrar dahil edildi.<\/li>
                                                                                                                                                    2. <\/span>Ses Senkronizasyonu (AudioManager):<\/strong> Oyun ilk açıldığında arka planda zamansız çalışan motor sesi kontrol altına alındı. Motor sesinin yalnızca oyuncu kolu çekip Playing veya Tutorial durumuna geçtiğinde çalması, GameOver veya MainMenu durumlarında ise otomatik durması sağlandı.<\/li><\/ol>


                                                                                                                                                      <\/p>

                                                                                                                                                      3. Görsel Animasyon ve Çark Kontrolü (MachineRotator)<\/strong><\/p>

                                                                                                                                                      1. <\/span>Makine üzerindeki dönen çarkların\/pervanelerin oyun başlamadan çalışmasını engellemek amacıyla MachineRotator.cs bileşeni yazıldı. Dönme hareketi GameManager durumuna bağlandı.<\/li><\/ol>


                                                                                                                                                        <\/p>

                                                                                                                                                        4. İnteraktif Öğretici (Tutorial) Sisteminin Kurulması<\/strong><\/p>

                                                                                                                                                        1. <\/span>Durum Entegrasyonu (GameManager):<\/strong> GameState enum yapısına Tutorial evresi eklendi. Öğretici esnasında genel geri sayım sayacı donduruldu ve rastgele atık üretimi durduruldu.<\/li>
                                                                                                                                                        2. <\/span>Yönlendirici Mantık (TutorialManager):<\/strong> Oyuncuyu sırasıyla \"Kolu Çek\", \"Banttaki Atığı Al\" ve \"Doğru Kutuya At\" adımlarıyla yönlendiren modül geliştirildi. İlk tamamlama sonrasında verinin PlayerPrefs ile kaydedilerek tekrar gösterilmemesi sağlandı.<\/li>
                                                                                                                                                        3. <\/span>Dinamik 3D İşaretçi (Pointer):<\/strong> Oyuncunun etkileşime geçeceği objelerin (Kol, Atık, Kutu) üzerinde süzülen 3D ok işareti (\"▼\") kodsal olarak oluşturuldu. Objenin fiziki sınırları (Collider.bounds) taranarak ok işaretinin objelerin içine saplanması önlendi ve her açıdan görünmesi için kameraya bakma (Billboard) mantığı entegre edildi.<\/li>
                                                                                                                                                        4. <\/span>Güvenlik Esnetmesi (BinTrigger):<\/strong> Öğretici modundayken atılan atıkların yok olması ve sürecin ilerlemesi için atık kontrol duvarı Tutorial durumunu kapsayacak şekilde güncellendi.<\/li><\/ol>


                                                                                                                                                          <\/p>

                                                                                                                                                          5. Sahne Entegrasyonu ve Testler<\/strong><\/p>

                                                                                                                                                          1. <\/span>Hazırlanan TutorialManager ve MachineRotator scriptleri MainGame sahnesi ve ilgili modül prefab'larına (CoreSystems_Module, ConveyorSystem_Module) bağlandı.<\/li>
                                                                                                                                                          2. <\/span>XR Simulator ve VR cihazı ile öğretici akışı, ses tetikleyicileri ve ok işaretlerinin takibi başarıyla test edilerek gün tamamlandı.<\/li><\/ol>


                                                                                                                                                            <\/p>

                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                            1. <\/span>[11:04]<\/strong> (239deb3<\/em>) style(ui): format countdown display with 'Time:' prefix and integrate TV UI components<\/li>
                                                                                                                                                            2. <\/span>[15:04]<\/strong> (118833e<\/em>) chore(audio): re-import missing sound files overwritten during merge<\/li>
                                                                                                                                                            3. <\/span>[15:59]<\/strong> (2b65724<\/em>) feat(audio\/environment): synchronize machine engine audio and rotation with game state - Created MachineRotator script to restrict gear rotation to active game states. - Updated AudioManager engine loop to play only when lever is pulled and stop on GameOver\/MainMenu.<\/li>
                                                                                                                                                            4. <\/span>[16:09]<\/strong> (d6b9cde<\/em>) fix(ui): update tutorial status prompts and add auto-hide timer to combo display - Added 1-second auto-hide delay to ComboPopAnimation in UIManager after pop animation completes. - Updated main menu status display to guide first-time players to pull the lever.<\/li>
                                                                                                                                                            5. <\/span>[17:47]<\/strong> (e314ded<\/em>) feat(tutorial): implement interactive step-by-step tutorial manager and state integration - Added Tutorial state to GameState enum and updated GameManager start flow. - Implemented TutorialManager to guide players step-by-step with dynamic 3D visual pointers. - Updated BinTrigger to allow waste processing during Tutorial state.<\/li>
                                                                                                                                                            6. <\/span>[18:15]<\/strong> (81216db<\/em>) chore(scene): bind tutorial components and update module prefabs in main scene - Wired TutorialManager, MachineRotator, and UI references in MainGame scene and module prefabs. - Saved updated scene and prefab state for end-of-day checkpoint.<\/li><\/ol>\n\n--- DAY 15 (2026-07-22) ---\n

                                                                                                                                                              Faz 3 - Gün 15: Fiziksel VR Buton Modülü, Zincirleme Oyun Akışı ve Çevresel VFX\/Model Entegrasyonu<\/strong><\/p>


                                                                                                                                                              <\/p>

                                                                                                                                                              Özet<\/strong><\/p>

                                                                                                                                                              Bugünkü çalışmanın temel amacı; VR projemizde oyuncunun oyunu başlatması, ayarları yönetmesi ve duraklatması için sahnede yer alan fiziksel 3D butonları XR etkileşimli hale getirmektir. Ayrıca oyuna giriş akışını daha doğrusal ve profesyonel bir zincire (Play Butonu -> Kol Çekme -> Vardiya Başlangıcı) bağlamak ve çevreye yönelik görsel geri bildirim (VFX\/İkon) kalitesini artırmak hedeflenmiştir.<\/p>


                                                                                                                                                              <\/p>

                                                                                                                                                              💻 Yapılan Teknik Çalışmalar<\/strong><\/p>


                                                                                                                                                              <\/p>

                                                                                                                                                              1. Zincirleme Oyun Başlangıcı ve Durum Yönetimi (State Machine)<\/strong><\/p>

                                                                                                                                                              1. <\/span>GameState durum yapısına ReadyToStart adında yeni bir durum entegre edildi.<\/li>
                                                                                                                                                              2. <\/span>Oyunun doğrudan kırmızı kolla (Lever) başlaması engellendi. MachineLever.cs güncellenerek kolun çekilme tetikleyicisi sadece oyun ReadyToStart durumundayken çalışacak şekilde kilitlendi.<\/li>
                                                                                                                                                              3. <\/span>GameManager.cs üzerinde PrepareToStart() metodu yazılarak, Play butonuna basıldığında sistemin kol çekme aşamasına geçişi sağlandı.<\/li>
                                                                                                                                                              4. <\/span>UIManager.cs güncellenerek TV ekranlarındaki durum bildirimleri (\"PRESS PLAY BUTTON\" ve \"PULL THE LEVER\") bu doğrusal akışa göre düzenlendi.<\/li><\/ol>


                                                                                                                                                                <\/p>

                                                                                                                                                                2. Fiziksel VR Buton Altyapısı, Animasyon ve Geri Bildirimler<\/strong><\/p>

                                                                                                                                                                1. <\/span>PhysicalVRButton.cs scripti; otomatik GameManager aksiyonlarını (Play, Pause, Retry) gerçekleştirecek, uzaktan XR Raycast ve yakından fiziksel Poke (dokunma) etkileşimlerini destekleyecek şekilde genişletildi.<\/li>
                                                                                                                                                                2. <\/span>Butona basıldığı an sahne üzerinden otomatik olarak silinmek yerine, buton panelinin (Buttons_Module) kendi yerel taban ekseni etrafında geriye doğru domino tarzı (1 saniye içinde ivmelenerek) devrilmesini sağlayan matematiksel bir Coroutine animasyon motoru yazıldı.<\/li>
                                                                                                                                                                3. <\/span>Butona basılma hissiyatını artırmak amacıyla HapticManager aracılığıyla VR kontrolcülerine anlık dokunsal titreşim (Haptic Impulse) gönderildi.<\/li>
                                                                                                                                                                4. <\/span>Butonların basılma anında yoktan var edilip (Instantiate) süresi dolunca otomatik silinen (Destroy) duman ve toz partikül sistemleri (VFX Prefab) bağlandı.<\/li><\/ol>


                                                                                                                                                                  <\/p>

                                                                                                                                                                  3. Çevre Tasarımı ve Prefab Modifikasyonları<\/strong><\/p>

                                                                                                                                                                  1. <\/span>Atıkların banttan düştüğü bölgeye (Destroy Zone) havada kaybolmayı önlemek amacıyla endüstriyel bir 3D atık borusu (Disposal Chute) modeli entegre edildi.<\/li>
                                                                                                                                                                  2. <\/span>Geri dönüşüm kutusu prefab'larına (TrashbinBlue\/Green\/Red\/Yellow) oyuncunun atıkları doğru ayırmasını kolaylaştırmak amacıyla 3D kategori sembolleri (ikonlar) yerleştirildi.<\/li>
                                                                                                                                                                  3. <\/span>Sahne üzerindeki Buttons_Module bileşeni GameManager'a referans olarak atandı ve hiyerarşideki tüm BoxCollider \/ XRSimpleInteractable katman çakışmaları çözülerek sahne kaydedildi.<\/li><\/ol>


                                                                                                                                                                    <\/p>

                                                                                                                                                                    💡 Öğrenilen \/ Pekiştirilen Kavramlar ve Teknolojiler<\/strong><\/p>

                                                                                                                                                                    Quaternion ve RotateAround Matematiksel Rotasyonu:<\/strong> Pivot noktası sıfırda olan objeleri kendi görsel merkezleri etrafında bozmadan döndürebilmek için kod tabanlı dinamik pivot hesaplama yöntemleri.<\/p>


                                                                                                                                                                    <\/p>


                                                                                                                                                                    <\/p>

                                                                                                                                                                    Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                    1. <\/span>[11:11]<\/strong> (e3a9a9e<\/em>) feat(environment): add waste category icons to recycling bins<\/li>
                                                                                                                                                                    2. <\/span>[11:13]<\/strong> (06bca14<\/em>) Revert \"feat(environment): add waste category icons to recycling bins\" This reverts commit e3a9a9ebc6f54b6e95351d8189aaa67ae5088297.<\/li>
                                                                                                                                                                    3. <\/span>[11:18]<\/strong> (bfb73f9<\/em>) feat(environment): add waste category icons to recycling bins<\/li>
                                                                                                                                                                    4. <\/span>[12:53]<\/strong> (9ba206d<\/em>) feat(environment): add disposal pipe model and modularize VR buttons prefab - Added Pipe 3D model at the end of the conveyor belt for realistic waste disposal. - Created Buttons_Module prefab to modularize physical VR button setup.<\/li>
                                                                                                                                                                    5. <\/span>[18:11]<\/strong> (b2a9e10<\/em>) feat(environment\/vfx): add bin category icons and import custom feedback VFX - Attached 3D category icons to Trashbin Blue\/Green\/Red\/Yellow prefabs for visual bin clarity. - Imported and configured yellow star and hit feedback particle prefab assets.<\/li>
                                                                                                                                                                    6. <\/span>[18:15]<\/strong> (67616d7<\/em>) feat(core\/interaction): implement modular VR button logic and sequential start flow - Updated PhysicalVRButton to support ButtonType actions, auto-instantiating VFX prefabs, and triggering global haptics. - Updated GameManager with a new ReadyToStart state to bridge the Play Button press with the Lever pull. - Implemented a procedural domino-style falling animation for the buttons module. - Locked MachineLever trigger to only fire when game state is ReadyToStart. - Updated UIManager to display step-by-step guidance on TV screens.<\/li>
                                                                                                                                                                    7. <\/span>[18:17]<\/strong> (19ee77d<\/em>) chore(scene\/prefabs): integrate physical VR buttons and update main game layout - Configured BoxCollider and XRSimpleInteractable settings on Button_Play and Button_Setting prefabs. - Saved main scene layout modifications including the conveyor disposal pipe. - Assigned Buttons_Module reference to GameManager in the MainGame scene.<\/li><\/ol>\n\n--- DAY 16 (2026-07-23) ---\n

                                                                                                                                                                      Faz 3 - Gün 16: VR World Space UI Entegrasyonu, Ses Yönetimi, Girdi (Input) Kontrolleri ve Atık Nesne Fizik Optimizasyonları<\/strong><\/p>


                                                                                                                                                                      <\/p>

                                                                                                                                                                      Özet<\/strong><\/p>

                                                                                                                                                                      Bugünkü çalışmanın temel amacı; VR projemizde kullanıcı deneyimini (UX) ve oyun içi kontrolü üst seviyeye çıkarmak adına 3D World Space Ayarlar (Settings) ve Duraklatma (Pause) panellerini oluşturmak, ses seviyelerini canlı olarak yönetebilecek bir ses altyapısı kurmak, VR menü tuşu (Input System) entegrasyonunu sağlamak ve fiziksel nesnelerde yaşanan etkileşim hatalarını gidermektir.<\/p>


                                                                                                                                                                      <\/p>

                                                                                                                                                                      1. VR 3D World Space Arayüz (UI) ve Panel Mimarisi<\/strong><\/p>

                                                                                                                                                                      1. <\/span>Klasik 2D arayüz sistemleri VR dünyasında derinlik algısını bozduğu için sahnede oluşturulan Ayarlar ve Duraklatma panelleri World Space moduna geçirilmiştir.<\/li>
                                                                                                                                                                      2. <\/span>Arayüzün VR kontrolcülerinden çıkan lazer ışınları (XR Ray Interactor) ile etkileşime girebilmesi için varsayılan tıklayıcı bileşeni kaldırılmış, yerine TrackedDeviceGraphicRaycaster bileşeni entegre edilmiştir.<\/li>
                                                                                                                                                                      3. <\/span>Hierarchy üzerindeki EventSystem bileşeni VR odaklı XR UI Input Module yapısına dönüştürülmüş; panel ölçekleri (Scale: 0.001) VR ergonomisine uygun olarak göz hizasına konumlandırılmıştır.<\/li><\/ol>


                                                                                                                                                                        <\/p>

                                                                                                                                                                        2. Ses Yöneticisi (AudioManager) ve Canlı Ayar Çubukları<\/strong><\/p>

                                                                                                                                                                        1. <\/span>AudioManager.cs sınıfı genişletilerek SetBGMVolume (Müzik) ve SetSFXVolume (Ses Efektleri) metotları yazılmıştır.<\/li>
                                                                                                                                                                        2. <\/span>Ayarlar panelinde yer alan müzik ve ses ikonları eklenmiş, UI Slider'ların OnValueChanged olayları doğrudan ses yöneticisine bağlanmıştır. Böylece oyuncunun VR içinden ses seviyelerini canlı olarak kısıp açabilmesi sağlanmıştır.<\/li><\/ol>


                                                                                                                                                                          <\/p>

                                                                                                                                                                          3. VR Menü Tuşu, Duraklatma ve Fiziksel Buton Yaylanma Mantığı<\/strong><\/p>

                                                                                                                                                                          1. <\/span>GameManager.cs içerisinde oyun akışını donduran (Time.timeScale = 0f) ve tekrar başlatan TogglePauseGame() fonksiyonu yazılmıştır.<\/li>
                                                                                                                                                                          2. <\/span>Sol veya sağ VR kontrolcüsündeki menü tuşuna basıldığında (ve PC testlerinde ESC tuşuna basıldığında) duraklatma panelinin otomatik açılması için Unity InputSystem (InputActionReference) altyapısı kurulmuştur.<\/li>
                                                                                                                                                                          3. <\/span>Fiziksel taş butonlara lazer pointer ile tıklandığında butonların çöktükten sonra aşağıda takılı kalmasını önlemek amacıyla PhysicalVRButton.cs içerisine 0.2 saniyelik Otomatik Yaylanma (Auto-Release) coroutine mekanizması eklenmiştir.<\/li><\/ol>


                                                                                                                                                                            <\/p>

                                                                                                                                                                            4. Atık Nesne Fizik Düzeltmeleri ve Sahne Temizliği<\/strong><\/p>

                                                                                                                                                                            1. <\/span>Cam (Şişe, Kadeh vb.) ve Metal (Kutu, Metal Çubuk vb.) atık prefablari elle tutulduğunda (Grab) nesnelerin aniden ortadan kaybolması (clipping\/disappearance) hatası tespit edilmiştir. İlgili prefablardaki XR Grab Interactable, Rigidbody ve Collider çakışma katmanları yeniden yapılandırılarak sorun çözülmüştür.<\/li>
                                                                                                                                                                            2. <\/span>Sahnede mükerrer oluşturulmuş ve referans hatalarına (NullReferenceException) sebep olan ikinci UIManager bileşeni temizlenerek kod mimarisi stabil hale getirilmiştir.<\/li><\/ol>


                                                                                                                                                                              <\/p>

                                                                                                                                                                              Not<\/strong><\/p>

                                                                                                                                                                              World Space Canvas & Tracked Graphic Raycaster:<\/strong> VR gözlük içinde 3D arayüz oluşturma ve lazer ışınlarıyla buton\/slider etkileşimi sağlama tecrübesi.<\/p>


                                                                                                                                                                              <\/p>

                                                                                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                              1. <\/span>[13:26]<\/strong> (4634269<\/em>) fix(interaction\/prefabs): fix glass and metal waste items disappearing when grabbed - Resolved clipping\/disappearance issue when grabbing Glass and Metal waste prefabs in VR hands. - Updated XR Grab Interactable, Rigidbody, and Collider settings across Glass (Bottle, Hurricane, Wine Glass, etc.) and Metal (Soda Can, Metal Bars, Cat Food, etc.) item prefabs. - Updated Button_Setting prefab settings for menu interaction integration.<\/li>
                                                                                                                                                                              2. <\/span>[17:21]<\/strong> (65d1882<\/em>) feat(assets\/ui): add music\/sound icons and button feedback particle FX - Added UI icons for BGM and SFX volume sliders in the Settings panel. - Imported Hit_04 particle prefab asset for physical button visual feedback.<\/li>
                                                                                                                                                                              3. <\/span>[17:23]<\/strong> (e99efe7<\/em>) feat(scene\/prefabs): integrate Settings\/Pause panels and update MainGameH layout - Integrated 3D World Space Settings and Pause UI panels into MainGameH scene. - Cleaned up duplicate UIManager component from RecyclingArea_Module prefab. - Configured Tracked Device Graphic Raycaster and EventSystem for VR laser UI interaction.<\/li>
                                                                                                                                                                              4. <\/span>[17:35]<\/strong> (cf6661b<\/em>) feat(ui\/logic): implement Settings & Pause panel logic, audio volume controls, and VR auto-release buttons - Added SetBGMVolume and SetSFXVolume handlers in AudioManager. - Implemented TogglePauseGame state management in GameManager. - Expanded UIManager to manage Settings\/Pause panel visibilities, UI Pause button, and VR menu input action. - Added auto-release spring mechanics in PhysicalVRButton for raycast\/pointer clicks.<\/li><\/ol>\n\n--- DAY 17 (2026-07-24) ---\n

                                                                                                                                                                                Faz 3 - Gün 17: GameOverPanel Arayüzü, Skor Sıfırlama Mekanizması, Fiziksel 3D Çıkış Butonu ve Lider Tablosu Entegrasyonu<\/strong><\/p>


                                                                                                                                                                                <\/p>

                                                                                                                                                                                Özet<\/strong><\/p>

                                                                                                                                                                                Bugünkü çalışmanın temel amacı; VR projemizde oyun döngüsünün (Game Loop) son aşaması olan GameOverPanel arayüzünün yapılması, oyun bittiğinde elde edilen nihai skorun dinamik olarak oyuncuya sunulması, oyunu ve skorları sıfırlayan yeniden başlatma (Restart) altyapısının kurulması, fiziksel 3D Çıkış (Exit) butonunun sahneye entegrasyonu ve takım arkadaşıyla ortaklaşa nesne havuzu (ObjectPoolManager) iyileştirmelerinin gerçekleştirilmesidir.<\/p>


                                                                                                                                                                                <\/p>

                                                                                                                                                                                1. GameOverPanel Arayüzü ve Dinamik Skor Gösterimi<\/strong><\/p>

                                                                                                                                                                                1. <\/span>Oyun süresi bittiğinde (GameState.GameOver) otomatik olarak tetiklenen 3D World Space GameOverPanel arayüzü UIManager.cs mimarisine entegre edilmiştir.<\/li>
                                                                                                                                                                                2. <\/span>Vardiya sonunda oyuncunun topladığı puan ScoreManager.Instance.CurrentScore verisinden çekilerek panel üzerindeki gameOverFinalScoreText bileşenine dinamik olarak (FINAL SCORE: X) yazdırılmıştır.<\/li>
                                                                                                                                                                                3. <\/span>Oyuncunun yeniden oynama isteğini karşılamak amacıyla RestartGameUI() metodu tanımlanmış; bu buton tetiklendiğinde GameManager.PrepareToStart() çağrılarak oyun süresi yeniden 60 saniyeye ayarlanmış ve arayüz ReadyToStart durumuna geçirilmiştir.<\/li><\/ol>


                                                                                                                                                                                  <\/p>

                                                                                                                                                                                  2. Skor Sıfırlama ve Oyun Mantığı İyileştirmeleri<\/strong><\/p>

                                                                                                                                                                                  1. <\/span>ScoreManager.cs sınıfına ResetScore() metodu eklenerek yeni tura başlandığında mevcut puanın ve kombo katlayıcılarının sıfırlanması sağlanmıştır.<\/li>
                                                                                                                                                                                  2. <\/span>GameManager.cs içerisindeki PrepareToStart() metodu güncellenerek oyun süresinin (RemainingTime = 60f) ve ekrandaki zamanlayıcı yayınlarının (OnGameTimeUpdated) anında ilk haline döndürülmesi garantilenmiştir.<\/li><\/ol>


                                                                                                                                                                                    <\/p>

                                                                                                                                                                                    3. Fiziksel 3D Çıkış (Exit) Butonu ve Çoklu Platform Çıkış Mantığı<\/strong><\/p>

                                                                                                                                                                                    1. <\/span>Projeye closeBtn.glb 3D modeli aktarılarak Button_Close adında yeni bir fiziksel buton prefab'ı oluşturulmuş ve sahnedeki Buttons_Module grubuna dahil edilmiştir.<\/li>
                                                                                                                                                                                    2. <\/span>PhysicalVRButton.cs scriptindeki ButtonType enum yapısına Exit seçeneği eklenmiştir.<\/li>
                                                                                                                                                                                    3. <\/span>Çıkış butonuna basıldığında uygulamanın VR gözlükte\/Build sürümünde kapanması (Application.Quit()), Unity Editor testlerinde ise oynamayı durdurması (EditorApplication.isPlaying = false) amacıyla önkoşullu derleme (#if UNITY_EDITOR) altyapısı yazılmıştır.<\/li><\/ol>


                                                                                                                                                                                      <\/p>

                                                                                                                                                                                      4. Ses (SFX), Lider Tablosu ve Takım Çalışması<\/strong><\/p>

                                                                                                                                                                                      1. <\/span>CoreSystems_Module içerisindeki AudioManager bileşenine kombo eşiklerine ulaşıldığında tetiklenen ses efekti (comboClip) tanımlanmıştır.<\/li>
                                                                                                                                                                                      2. <\/span>Takım arkadaşımın geliştirdiği en yüksek ilk 3 skoru listeleyen Lider Tablosu (scoreboard) MainGameH.unity sahnesine başarıyla entegre edilmiştir.<\/li>
                                                                                                                                                                                      3. <\/span>Ekran paylaşımı üzerinden takım arkadaşıyla eş zamanlı çalışılarak nesne havuzundan (ObjectPoolManager) doğan atıkların taşıma bandından kontrolsüzce fırlamasına sebep olan Rigidbody hız sıfırlama sorunu giderilmiştir.<\/li><\/ol>


                                                                                                                                                                                        <\/p>

                                                                                                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                        1. <\/span>[10:52]<\/strong> (5b02af0<\/em>) feat(audio\/ui): integrate combo SFX to AudioManager and add ranking leaderboard to main scene<\/li>
                                                                                                                                                                                        2. <\/span>[18:07]<\/strong> (825beee<\/em>) feat(assets\/prefabs): add physical Exit button 3D model and update Buttons_Module - Imported 3D close\/exit button model (closeBtn.glb). - Created Button_Close prefab for physical exit interaction. - Updated Buttons_Module prefab to include the physical Exit button.<\/li>
                                                                                                                                                                                        3. <\/span>[18:08]<\/strong> (aca626c<\/em>) feat(ui\/logic): implement GameOver panel, score resetting, and physical Exit button type - Added ResetScore method in ScoreManager to reset score and combos on game restart. - Added ButtonType.Exit support in PhysicalVRButton with Editor\/Application quit handling. - Extended GameManager.PrepareToStart to reset score and game timer to 60. - Expanded UIManager to handle GameOverPanel visibility, final score display, and restart triggers.<\/li>
                                                                                                                                                                                        4. <\/span>[18:09]<\/strong> (7e8c761<\/em>) feat(scene): integrate GameOverPanel UI and physical Exit button in MainGameH scene<\/li><\/ol>\n\n--- DAY 18 (2026-07-27) ---\n

                                                                                                                                                                                          Faz 3 - Gün 18: Sahne Çevre Modelleri (TV Askısı & Pano Entegrasyonu), Domino Animasyonu Pivot Düzeltmesi ve Spawner Fizik İyileştirmeleri<\/strong><\/p>


                                                                                                                                                                                          <\/p>

                                                                                                                                                                                          Özet<\/strong><\/p>

                                                                                                                                                                                          Bugünkü çalışmanın temel amacı; VR fabrikamızın görsel kalitesini ve atmosferini artırmak amacıyla yeni 3D modellerin (tvholder, pano) projeye kazandırılması, fiziksel buton modülüne 3. buton (Button_Exit) eklendiğinde bozulan devrilme animasyonu matematiksel hesabının düzeltilmesi, taşıma bandı atık üreticisindeki (WasteSpawner) kayma payının (offset) kaldırılarak fizik kararlılığının sağlanması ve oyun içi geliştirici künyesi ile 3D başlık yazılarının sahneye entegre edilmesidir.<\/p>


                                                                                                                                                                                          <\/p>

                                                                                                                                                                                          1. Domino Devrilme Animasyonu Pivot Hesabı Düzeltmesi (GameManager.cs)<\/strong><\/p>

                                                                                                                                                                                          1. <\/span>Buttons_Module grubuna 3. bir fiziksel buton (Button_Exit) dahil edildiğinde, HideButtonsRoutine içerisindeki geometrik merkez ortalaması (center) kaydığı için butonların havaya doğru savrulma bug'ı tespit edilmiştir.<\/li>
                                                                                                                                                                                          2. <\/span>GameManager.cs içerisindeki matematiksel pivot hesaplama algoritması refactor edilmiştir. Merkez hesabı strictly sadece \"Play\" ve \"Setting\" butonlarının pozisyonlarını baz alacak şekilde güncellenmiştir.<\/li>
                                                                                                                                                                                          3. <\/span>Bu sayede modüle 3. bir buton eklense dahi devrilme aksı (rotationAxis) korunmuş ve butonların geriye doğru domino taşı gibi kusursuzca yere devrilmesi sağlanmıştır. Ayrıca Button_Close prefab adı standartlara uygun olarak Button_Exit şeklinde yeniden adlandırılmıştır.<\/li><\/ol>

                                                                                                                                                                                            2. Çevre 3D Modelleri ve Prefab Yapılandırmaları<\/strong><\/p>

                                                                                                                                                                                            1. <\/span>TV Askı Aparatı (tvholder.fbx):<\/strong> Fabrika ortamındaki TV monitörünün havada asılı durma illüzyonunu gidermek için 3D TV askı aparatı projeye aktarılmıştır. RecyclingArea_Module prefab'ı güncellenerek TV'nin tavana sağlam bir şekilde monte edilmesi sağlanmıştır.<\/li>
                                                                                                                                                                                            2. <\/span>Geliştirici Bilgi Pano Modeli (pano.fbx): <\/strong>Sahneye 3D pano modeli eklenmiş; üzerine projenin geliştiricileri olarak şahsım ve takım arkadaşımın LinkedIn kullanıcı isimleri (hakanuzer & emresatil) künye olarak işlenmiştir.<\/li>
                                                                                                                                                                                            3. <\/span>3D Oyun Başlığı:<\/strong> Buttons_Module prefab'ının üzerine oyunun ismi olan 3D \"RECYCLE RUSH\" başlık yazısı yerleştirilmiştir.<\/li><\/ol>


                                                                                                                                                                                              <\/p>

                                                                                                                                                                                              3.Sahne (Scene) Entegrasyonları ve Mizanpaj<\/strong><\/p>

                                                                                                                                                                                              1. <\/span>Yapılan tüm yeni prefab ve model değişiklikleri MainGameH.unity ana sahnesine yansıtılmıştır.<\/li>
                                                                                                                                                                                              2. <\/span>TV askısının tavan yüksekliği, 3D başlık yazılarının açıları ve Çıkış butonunun sahne mizanpajı VR gözlük bakış açısına (User Perspective) göre optimize edilmiştir.<\/li><\/ol>


                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                1. <\/span>[11:41]<\/strong> (94f2cb1<\/em>) fix(ui\/animation): resolve buttons module pivot offset - Renamed Button_Close prefab to Button_Exit for better naming consistency. - Repositioned Button_Exit within the MainGameH scene layout. - Fixed the domino fall animation bug in GameManager.cs (HideButtonsRoutine). The center pivot calculation now strictly uses only the \"Play\" and \"Setting\" buttons, preventing the newly added 3rd button from shifting the rotation axis and causing the module to rotate incorrectly.<\/li>
                                                                                                                                                                                                2. <\/span>[18:32]<\/strong> (8655915<\/em>) feat(assets\/prefabs): add 3D board\/TV holder models and update main menu module styling - Imported 3D models for the info board (pano.fbx) and ceiling TV mount (tvholder.fbx). - Updated RecyclingArea_Module prefab to mount the TV monitor from the ceiling using tvholder model. - Updated Buttons_Module prefab with 3D \"Recycle Rush\" title text and LinkedIn developer credits (hakanuzer & emresatil). - Integrated the physical Exit button into Buttons_Module layout.<\/li>
                                                                                                                                                                                                3. <\/span>[18:32]<\/strong> (1a26d07<\/em>) feat(scene): update MainGameH layout with TV mount, info board, and menu title branding<\/li><\/ol>\n\n--- DAY 19 (2026-07-28) ---\n

                                                                                                                                                                                                  VR Projesinde Sahne Senkronizasyonu, Görsel Post-Processing Entegrasyonu, Fizik\/Nesne Havuzu Optimizasyonları ve Çevre Düzenlemeleri<\/strong><\/p>


                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                  1. Sahne Senkronizasyonu ve Oyun Sonu (UI) Akışının Tamamlanması<\/strong><\/p>

                                                                                                                                                                                                  1. <\/span>Geliştirme sürecinde test amacıyla kullanılan MainGameH sahnesinde uygulanan güncel çevre düzenlemeleri ve arayüz geliştirmeleri, projenin ana sahnesi olan MainGame sahnesine aktarılarak senkronize edilmiştir. Bu kapsamda:<\/li><\/ol>


                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                    1. <\/span>Oyun bittiğinde beliren GameOverPanel arayüzü ana sahneye entegre edilmiştir.<\/li>
                                                                                                                                                                                                    2. <\/span>Oyuncunun tur sonunda ulaştığı nihai puanın (Final Score) doğru biçimde ekrana yansıtılması sağlanmıştır.<\/li>
                                                                                                                                                                                                    3. <\/span>Oyun bitiminde kullanıcının yeniden başlatma yapabilmesine olanak tanıyan fiziki\/arayüzlü Restart buton tetikleyicileri (event trigger) işlevsel hale getirilmiştir.<\/li><\/ol>


                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                      2. Görsel Kalite ve Grafik İyileştirmeleri (Post-Processing)<\/strong><\/p>

                                                                                                                                                                                                      1. <\/span>Projenin görsel kalitesini ve oyun içi Arcade atmosferini artırmak amacıyla Universal Render Pipeline (URP) altyapısında post-processing düzenlemeleri yapılmıştır:<\/li>
                                                                                                                                                                                                      2. <\/span>Projenin QualitySettings ve GlobalVolumeProfile konfigürasyonları güncellenerek ACES Tonemapping renk paleti entegre edilmiştir. Bu sayede renk doygunlukları ve ışık dengesi daha gerçekçi bir form kazanmıştır.<\/li>
                                                                                                                                                                                                      3. <\/span>Işık kaynağı olan ve parlaması gereken objelerin görünürlüğünü desteklemek için Bloom efekti optimize edilmiş, VR başlıklarında performans kaybı yaratmayacak ideal parametre değerleri tanımlanmıştır.<\/li><\/ol>

                                                                                                                                                                                                        3. Nesne Havuzu (Object Pooling) ve Fizik Hata Çözümleri<\/strong><\/p>

                                                                                                                                                                                                        1. <\/span>Oyun esnasında sürekli olarak üretilip silinen atık objelerinin performanslı yönetimi için kullanılan ObjectPoolManager ve zemin ceza mekanizması olan FloorZone üzerinde karşılaşılan fiziksel hatalar giderilmiştir:<\/li>
                                                                                                                                                                                                        2. <\/span>İç içe veya çocuk (child) Rigidbody bileşenine sahip kompleks atık prefab'larının havuza girip çıkarken fiziki olarak donması (havada asılı kalması) engellenmiştir. ObjectPoolManager fonksiyonu, objenin tüm alt bileşenlerindeki Rigidbody'leri kapsayacak şekilde güncellenerek fiziksel hızlar (linear\/angular velocity) doğru biçimde sıfırlanmıştır.<\/li>
                                                                                                                                                                                                        3. <\/span>FloorZone (zemin algılayıcı) kodunda yapılan düzenleme ile, havuza geri gönderilip deaktif edilmiş objelerin yanlışlıkla zemin cezası tetiklemesi önlenmiş; sadece aktif olarak yere düşen atıkların tespiti garanti altına alınmıştır.<\/li><\/ol>


                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                          4. Taşıma Bandı Modifikasyonu ve Çevre Düzenlemeleri<\/strong><\/p>

                                                                                                                                                                                                          1. <\/span>Fiziksel simülasyon sırasında boyutça büyük atıkların (örneğin pizza kutusu veya büyük şişeler) taşıma bandı üzerinde sıkışmasını ve tıkanıklık yaratmasını önlemek amacıyla konsept boyutlandırmalara gidilmiştir:<\/li>
                                                                                                                                                                                                          2. <\/span>ConveyorSystem_Module ve Conveyor_Long prefab'larının bant genişlikleri artırılarak atıkların bant üzerinde daha rahat akması sağlanmıştır.<\/li>
                                                                                                                                                                                                          3. <\/span>Genişletilen yeni bant prefab'ları MainGame sahnesine yerleştirilmiş, çevre objelerinin pozisyonları yeni bant boyutlarına göre tekrar hizalanmıştır.<\/li><\/ol>


                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                            1. <\/span>[13:53]<\/strong> (6177580<\/em>) feat(scene): sync MainGame scene layout and features with MainGameH - Synchronized all recent environment and UI updates from MainGameH into the primary MainGame scene. - Integrated GameOverPanel UI, final score display, and restart button triggers.<\/li>
                                                                                                                                                                                                            2. <\/span>[19:10]<\/strong> (8ce4d19<\/em>) feat(graphics): configure post-processing profile with ACES tonemapping and bloom -<\/li>
                                                                                                                                                                                                            3. <\/span>[19:11]<\/strong> (669b93e<\/em>) fix(environment\/pool): resolve child rigidbody pooling and floor penalty detection - Fixed ObjectPoolManager to reset physics for all child Rigidbody components, preventing prefabs with child colliders from freezing in mid-air upon spawn. - Resolved FloorZone waste penalty logic by ignoring deactivated pooled items while ensuring dropped wastes on the floor are correctly detected and penalized.<\/li>
                                                                                                                                                                                                            4. <\/span>[19:12]<\/strong> (0695735<\/em>) feat(environment\/scene): expand conveyor belt width and update MainGame scene layout - Increased conveyor belt width in ConveyorSystem_Module and Conveyor_Long prefabs for improved waste transport. - Updated MainGame scene layout to integrate widened conveyor prefabs and latest scene adjustments.<\/li><\/ol>


                                                                                                                                                                                                              <\/p>\n\n--- DAY 20 (2026-07-29) ---\n

                                                                                                                                                                                                              Oyun Durum Yönetimi (GameState) Optimizasyonu, Dinamik Çevre Belirme Animasyonu (Pop-Up Reveal), Spawner\/Trigger Bug Çözümleri ve APK Hazırlık Süreci<\/strong><\/p>


                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                              1. Ana Menü Tasarımı ve Dinamik Çevre Belirme Animasyonu (Clean Start & Pop-Up Reveal)<\/strong><\/p>

                                                                                                                                                                                                              1. <\/span>Oyun ilk açıldığında oyuncuyu karmaşık bir nesne kalabalığı yerine sade bir ana menü atmosferiyle karşılamak amacıyla \"Clean Start\" mimarisi kurgulanmış ve kodlanmıştır:<\/li>
                                                                                                                                                                                                              2. <\/span>Oyun başlangıcında (MainMenu durumunda), oyun alanına ait temel modüller (ConveyorSystem_Module, RecyclingArea_Module, scoreboard ve QC_Drone) görünmez kılınarak (Scale 0) sadece oda duvarları ve ana menü butonları görünür durumda tutulmuştur.<\/li>
                                                                                                                                                                                                              3. <\/span>Oyuncu fiziksel Play butonuna bastığında, gizlenen bu oyun modüllerinin sahneye sıçrayarak\/büyüyerek belirmesini sağlayan Arcade tarzı Ease-Out-Back (Elastic Bounce) matematiksel animasyonu geliştirilmiştir (GameManager.cs).<\/li><\/ol>


                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                2. Oyun Durum Akışının (GameState Flow) ve Restart Mantığının İyileştirilmesi<\/strong><\/p>

                                                                                                                                                                                                                Oyun sonu (GameOver) ve yeniden başlatma (Restart) süreçlerinde yaşanan kullanıcı deneyimi kusurları ve görsel çakışmalar giderilmiştir:<\/p>

                                                                                                                                                                                                                1. <\/span>Süre bittiğinde çıkan GameOver ekranında, oyunun en başında beliren ana menü butonlarının (Buttons_Module) tekrar sahneye gelmesi engellenmiştir.<\/li>
                                                                                                                                                                                                                2. <\/span>Oyuncu GameOver panelindeki Restart butonuna bastığında, çevredeki makinelerin sıfırdan büyüyerek gelme animasyonu veya butonların devrilme süreçleri atlanmış; oyun alanı kurulu vaziyette direkt hazır duruma (ReadyToStart) geçirilerek oyuncunun kolları çekmesi beklenmiştir.<\/li><\/ol>


                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                  3. Algılayıcı (BinTrigger) ve Üretim (WasteSpawner) Bug Çözümleri<\/strong><\/p>

                                                                                                                                                                                                                  Geliştirme sürecinde tespit edilen ve konsolu kirleten\/fiziksel çakışmalara yol açan hatalar üzerinde çalışılmıştır:<\/p>

                                                                                                                                                                                                                  1. <\/span>BinTrigger Hatalı Log Çözümü: Çevre objelerinin boyutu sıfırdan büyürken tetiklenen kutu algılayıcılarının oyun aktif değilken yanlışlıkla kırmızı uyarı log'u vermesi engellenmiştir. OnTriggerEnter içerisindeki kontrol sırası değiştirilerek; temas eden nesnenin atık olup olmadığı durumundan önce oyun durumunun kontrol edilmesi sağlanmıştır.<\/li>
                                                                                                                                                                                                                  2. <\/span>WasteSpawner Duvar Çakışma Önlemesi: Makineden çıkan atıkların tam rastgele (0-360°) açıyla doğması, Pizza Kutusu gibi geniş atıkların makine iç duvarlarına saplanmasına veya dışarı fırlamasına sebep oluyordu. Doğum açısı +-20° bandına çekilerek atıkların makine çıkış tüneline uygun hizada doğması garanti altına alınmıştır.<\/li><\/ol>


                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                    4. Proje Temizliği ve Mağaza (Meta App Lab) Hazırlıkları<\/strong><\/p>

                                                                                                                                                                                                                    1. <\/span>Yapılan APK çıktıları sonrası oluşan ve Git üzerinde 600'den fazla gereksiz değişiklik olarak görünen .utmp, BurstDebugInformation ve yedek klasörler .gitignore dosyasına eklenerek repository temiz tutulmuştur.<\/li>
                                                                                                                                                                                                                    2. <\/span>Oyunun Meta App Lab (Meta Quest Mağazası) Developer Paneline yüklenebilmesi için ilk APK test çıktıları alınmış ve mağaza panel işlemleri için ekip çalışması yürütülmüştür.<\/li><\/ol>


                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                      1. <\/span>[15:26]<\/strong> (2e0014c<\/em>) feat(gameplay): add popup environment reveal and refine gameover\/restart state flow - Added an Arcade-style pop-up (EaseOutBack bounce scale) reveal animation for gameplay modules (ConveyorSystem_Module, RecyclingArea_Module, scoreboard, QC_Drone) after pressing Play. - Kept environment modules hidden (scale 0) during MainMenu for a clean initial menu view, leaving surrounding room walls visible. - Prevented physical menu buttons (Buttons_Module) from reappearing on GameOver screen. - Streamlined Restart flow: restarting from GameOver bypasses both the button domino animation and environment reveal, leaving the environment active and prompting the player to pull the lever.<\/li>
                                                                                                                                                                                                                      2. <\/span>[19:30]<\/strong> (b482158<\/em>) Merge remote-tracking branch 'origin\/final-delivery\/emre' into final-delivery\/hakan<\/li><\/ol>\n\n--- DAY 21 (2026-07-30) ---\n

                                                                                                                                                                                                                        Sinematik Tanıtım Medyalarının Hazırlanması, Kod Tabanı Entegrasyonu (Git Merge Conflict Çözümü) ve Yayın Öncesi Proje Stabilizasyonu<\/strong><\/p>


                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                        A. Resmi Sinematik Tanıtım Fragmanı Entegrasyonu ve Dokümantasyon (docs: add official cinematic gameplay trailer)<\/strong><\/p>

                                                                                                                                                                                                                        Medya Hazırlığı ve Entegrasyon:<\/strong> Oyunun temel mekaniklerini, yüksek tempolu atık ayrıştırma süreçlerini ve Sanal Gerçeklik (VR) etkileşimlerini sergileyen resmi sinematik tanıtım videosu hazırlanmış ve proje dokümantasyonuna eklenmiştir.<\/p>

                                                                                                                                                                                                                        Görsel ve İşitsel Düzenlemeler:<\/strong> Fragmanda arcade temasına uygun olarak dinamik CRT ve Glitch efektleri kullanılmış, sahne geçişleri oyunun ritmine uygun şekilde senkronize edilmiştir.<\/p>

                                                                                                                                                                                                                        Ses ve Haptic (Dokunsal) İyileştirmeler:<\/strong> Oyuncunun yüksek temposunu ve rekabetçi atmosferini doğru bir şekilde yansıtabilmek adına retro arcade ses efektleri (SFX) eklenmiş ve bas frekanslı dokunsal geri bildirimlerle ses yapısı desteklenmiştir.<\/p>


                                                                                                                                                                                                                        <\/p>


                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                        B. Kod Tabanı Birleştirme ve Çakışma Yönetimi (Merge branch 'main' into release\/hakan-prelaunch-fixes)<\/strong><\/p>

                                                                                                                                                                                                                        1. <\/span>Projenin ana dalındaki son güncellemeler ile yayın öncesi hata düzeltmelerinin yapıldığı dal birleştirilirken meydana gelen karmaşık Git çakışmaları (merge conflicts) çözümlenmiştir. Çözüm sürecinde incelenen ve optimize edilen temel kod blokları şunlardır:<\/li><\/ol>


                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                          BeltItem.cs (Bant Objesi Kontrolü):<\/strong><\/p>

                                                                                                                                                                                                                          1. <\/span>Nesnelerin taşıma bandı üzerindeki fiziksel durumları (Kinematic ve Dynamic geçişleri) kontrol altına alınmıştır.<\/li>
                                                                                                                                                                                                                          2. <\/span>Alt Rigidbody'ye (child transform) sahip karmaşık objelerin (örneğin pizza kutusu gibi çoklu parçalı modeller) tutulduktan sonra havuzdan tekrar çıkarken konum\/rotasyon kayması yaşamaması için fabrika ayarlarına sıfırlama mekanizması korunmuştur.<\/li><\/ol>


                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                            BeltMovement.cs (Taşıma Bandı Hareketi):<\/strong><\/p>

                                                                                                                                                                                                                            1. <\/span>Taşıma bandı üzerindeki objelerin geometrik merkezlerini (itemCol.bounds.center) baz alan kontrol mekanizması doğrulanmıştır. Bu sayede uzun objelerin bant kenarından zamanından önce düşmesi engellenmiştir.<\/li>
                                                                                                                                                                                                                            2. <\/span>Önündeki diğer objelerle çakışmasını engelleyen mesafe tarama (Physics.OverlapSphere) ve hareket güncellemeleri (Physics.SyncTransforms) entegre edilmiştir.<\/li><\/ol>


                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                              ObjectPoolManager.cs (Nesne Havuzlama Yönetimi):<\/strong><\/p>

                                                                                                                                                                                                                              Havuzdan yeni obje aktifleştirilmeden önce (SetActive(true) öncesinde) alt objelerdeki Rigidbody bileşenlerinin hızlarının sıfırlanması (linearVelocity, angularVelocity) ve varsayılan fizik kilitlerinin ayarlanması sağlanmıştır.<\/p>

                                                                                                                                                                                                                              Bu düzenleme ile nesnelerin havuzdan spawn olduğu an havada süzülme veya fırlama bug'ları engellenmiştir.<\/p>


                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                              1. <\/span>[19:32]<\/strong> (6f7944f<\/em>) docs: add official cinematic gameplay trailer Added the official cinematic gameplay trailer for Recycle Rush VR. The trailer highlights core mechanics, high-speed sorting, and immersive VR interactions using dynamic CRT\/Glitch effects and beat-synced transitions. Audio enhancements include arcade-style SFX and haptic-driven bass drops to accurately reflect the game's fast-paced, competitive atmosphere.<\/li>
                                                                                                                                                                                                                              2. <\/span>[20:12]<\/strong> (2ffa895<\/em>) Merge branch 'main' into release\/hakan-prelaunch-fixes<\/li><\/ol>\n\n--- DAY 22 (2026-07-31) ---\n

                                                                                                                                                                                                                                2. Ay Proje Yol Haritası ve Stratejik Planlama<\/strong><\/p>


                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                İlk staj ayında başarıyla tamamlanan ve stabilize edilen Recycle Rush VR projesinin ardından, ikinci staj ayında izlenecek teknik yol haritasını ve proje vizyonunu belirlemek üzere takım içi bir değerlendirme ve beyin fırtınası (brainstorming) çalışması gerçekleştirilmiştir. Yapılan analizler doğrultusunda projenin gelişimi için en verimli strateji belirlenmiş ve bu kararlar teknik dokümantasyon (2.AY_PLAN.md) haline getirilerek versiyon kontrol sistemine dâhil edilmiştir.<\/p>


                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                Risk ve Zaman Maliyeti Değerlendirmesi:<\/strong> İkinci ayda sıfırdan tamamen yeni bir oyuna başlamak ile mevcut projeyi geliştirmek alternatifleri kıyaslanmıştır. Sıfırdan bir projeye başlamanın;<\/p>

                                                                                                                                                                                                                                Uyumlu 3D model arayışı ve optimizasyonu,<\/p>

                                                                                                                                                                                                                                Sıfırdan ses tasarımı (SFX\/BGM) ve haptic entegrasyonları,<\/p>

                                                                                                                                                                                                                                Yeni arayüz (UI\/UX) mimarisi inşası<\/p>

                                                                                                                                                                                                                                gibi süreçler nedeniyle kısıtlı staj süresini verimsiz kullanmaya yol açacağı tespit edilmiştir.<\/p>


                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                AR Dönüşüm Hedefi:<\/strong> Oyunun Sanal Gerçeklik (VR) ortamından çıkarılarak, oyuncunun gerçek dünyadaki fiziksel çevresiyle entegre çalışan modern bir Artırılmış Gerçeklik (AR - Augmented Reality) deneyimine dönüştürülmesi hedeflenmiştir. Bu sayede projenin mimari kalitesi artırılırken, mevcut kod tabanı en yüksek verimle yeniden kullanılabilir (reusable) kılınmıştır.<\/p>


                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                1. <\/span>[19:27]<\/strong> (691c009<\/em>) docs: outline UX and environmental roadmap for AR transition<\/li><\/ol>\n\n--- DAY 23 (2026-08-03) ---\n

                                                                                                                                                                                                                                  Recycle Rush AR Projesi 20 Günlük Uygulama Planı ve Bağımsız AR Dokümantasyonu (README_AR.md) Oluşturma<\/strong><\/p>


                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                  İkinci staj ayının ilk gününde, Recycle Rush projesinin Sanal Gerçeklik (VR) ortamından çıkarılıp oyuncunun kendi fiziksel odasında oynayabileceği bir Karma Gerçeklik (MR \/ AR - Passthrough) deneyimine dönüştürülmesi için mimari altyapı ve planlama çalışmaları yürütülmüştür. Gün boyunca projenin \"Tek Doğruluk Kaynağı\" (Single Source of Truth) olacak Uygulama Planı (Implementation Plan v8.0) güncellenmiş ve AR versiyonuna özel teknik kılavuz olan README_AR.md dosyası oluşturularak versiyon kontrol sistemine (Git) aktarılmıştır.<\/p>


                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                  A. AR Dönüşümü Uygulama Planı ve Sistem Mimarisi<\/strong><\/p>

                                                                                                                                                                                                                                  Projeyi 20 iş günü içerisinde hatasız ve ölçeklenebilir şekilde tamamlayabilmek adına implementation_plan.md dosyası aşağıdaki teknik detaylarla donatılmıştır:<\/p>


                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                  1. <\/span>20 İş Günlük Detaylı Yol Haritası:<\/strong> 4 ana spint (Faz 0: Altyapı, Faz 1: Ekonomi\/Spawner, Faz 2: Seviyeler\/Görevler, Faz 3: Cila\/VFX, Faz 4: Store\/Test) altında iki geliştiriciye (Task 1 & Task 2) eşit bölüştürülmüş günlük görev planı kurgulanmıştır.<\/li><\/ol>


                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                    1. <\/span>MoSCoW Önceliklendirme Matrisi:<\/strong> Zaman baskısını yönetebilmek amacıyla özellikler Must-Have (Passthrough, Spatial Anchors, AR Grab\/Throw), Should-Have (15 Level, XP\/Coin, JSON Save), Could-Have (Görevler, Altın Çöp, 6 Etkinlik) ve Nice-to-Have (Spatial Audio, Konfeti) olarak seviyelendirilmiştir.<\/li><\/ol>


                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                      1. <\/span>Durum Makinesi (GameManager State Machine):<\/strong> Oyunun yaşam döngüsü MainMenu ➔ PlacementState (Kutu sabitleme) ➔ CountdownState (3-2-1) ➔ PlayingState ➔ PausedState \/ GameOverState akışıyla durum makinesi mimarisine oturtulmuştur.<\/li><\/ol>


                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                        1. <\/span>Matematiksel Dengeleme ve Ekonomi Formülleri:<\/strong><\/li>
                                                                                                                                                                                                                                        2. <\/span>15 seviyelik zorluk matrisi hazırlanmış; seviye ilerledikçe düşme süreleri hızlandırılmış ve sürpriz Altın Çöp (Golden Waste) çıkma oranı %5'ten %25'e yükseltilmiştir.<\/li>
                                                                                                                                                                                                                                        3. <\/span>Toplanan Coin'lerin kilit açma, kozmetik skin ve rozet satın alımlarında kullanımı tanımlanmıştır.<\/li><\/ol>


                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                          1. <\/span>JSON Serialization Saklama Mimarisi:<\/strong> Oyuncu profil verilerinin (CurrentLevel, TotalXP, TotalCoin, HighScore, UnlockedAchievements) Application.persistentDataPath altında esnek JSON dosyası olarak kaydedilmesi tasarlanmıştır.<\/li><\/ol>


                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                            B. Bağımsız AR Dokümantasyonu ve Kurulum Kılavuzu<\/strong><\/p>

                                                                                                                                                                                                                                            Mevcut VR versiyonuna ait README.md dosyasına dokunulmadan, AR versiyonu için sıfırdan README_AR.md dosyası kaleme alınmıştır:<\/p>


                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                            1. <\/span>Uzamsal Etkileşim ve Oyun Kuralları:<\/strong> Meta Quest Passthrough kameraları ile tavandan açılan portallardan oyuncunun gerçek odasına atık düşme mekaniği dokümante edilmiştir.<\/li><\/ol>


                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                              1. <\/span>Mimari Akış Şeması:<\/strong> Atığın portaldan düşüşünden BinTrigger tetiklenmesine, ScoreManager, ComboManager ve EconomyManager servislerinin Action Event'ler ile haberleşmesine kadar olan veri akışı ASCII diyagramları ile şemalaştırılmıştır.<\/li><\/ol>


                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                1. <\/span>Teknoloji Yığını ve Kurulum:<\/strong> Unity 6 LTS, Meta XR SDK, Android Manifest yapılandırmaları ve kablosuz build alma adımları teknik kılavuz olarak eklenmiştir.<\/li><\/ol>


                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                  1. <\/span>[13:38]<\/strong> (969deb1<\/em>) docs(ar): update implementation plan for AR transition - Detailed the 20-day Mixed Reality (Passthrough) development roadmap and MoSCoW feature hierarchy. - Integrated 15-level balancing matrix, XP\/Coin economy formulas, and JSON save data architecture. - Outlined GameManager state machine flow, Haptic\/Audio feedback matrices, and performance targets.<\/li>
                                                                                                                                                                                                                                                  2. <\/span>[18:59]<\/strong> (0f8ce42<\/em>) docs(ar): add dedicated README_AR documentation - Created README_AR.md specifically for the Mixed Reality (Passthrough) version of Recycle Rush. - Documented physical room mechanics, spatial anchors, level progression, and JSON profile saving. - Added project architecture diagrams, setup prerequisites, and team information.<\/li><\/ol>\n\n--- DAY 24 (2026-08-04) ---\n

                                                                                                                                                                                                                                                    OpenXR Konfigürasyonu, Scene Understanding Entegrasyonu ve AR Varlık (Asset) Optimizasyonları<\/strong><\/p>


                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                    1. OpenXR Paket ve Özellik Ayarlarının Senkronizasyonu<\/strong><\/p>

                                                                                                                                                                                                                                                    Günün ilk aşamasında, projenin Sanal Gerçeklikten (VR) Karma Gerçekliğe (MR - Passthrough) geçişi kapsamında OpenXR ve Meta XR SDK bağımlılıkları gözden geçirilmiştir. Proje gereksinimlerine uygun olarak OpenXR paket ayarları (OpenXRPackageSettings.asset) güncellenmiş ve el takibi (Hand Tracking), ortam tespiti (Passthrough Feature Layer) gibi kritik alt kütüphanelerin motor düzeyindeki senkronizasyonu sağlanmıştır. Yapılan bu konfigürasyon, sonraki aşamalarda kurulacak olan Scene Understanding API’sinin cihaz üzerinde kararlı çalışabilmesi için gerekli altyapıyı oluşturmuştur.<\/p>


                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                    2. AR Setup Tool Geliştirilmesi ve Scene Understanding Entegrasyonu<\/strong><\/p>

                                                                                                                                                                                                                                                    MR mimarisinin en kritik adımlarından biri olan gerçek dünya düzlemlerinin (Zemin ve Duvar) tespiti için entegrasyon çalışmalarına başlanmıştır. Sahnelerin elle kurulması esnasında oluşabilecek insan hatalarını ve karmaşıklığı engellemek amacıyla Tek Sorumluluk Prensibi (Single Responsibility Principle) uyarınca ARSetupTool.cs adında özel bir Editor betiği (C# Script) geliştirilmiştir.<\/p>


                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                    Geliştirilen bu otomasyon aracı ile programmatic (kodsal) olarak AR_SceneUnderstanding_Test sahnesi oluşturulmuş ve sahneye şu çekirdek bileşenler eklenmiştir:<\/p>


                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                    1. <\/span>XR Origin & AR Session:<\/strong> Cihaz konumlandırması ve uzamsal girdi yönetimi.<\/li>
                                                                                                                                                                                                                                                    2. <\/span>AR Plane Manager:<\/strong> Gerçek ortamdaki yatay (zemin) ve dikey (duvar) yüzeylerin algılanmasını sağlayan mekanizma.<\/li>
                                                                                                                                                                                                                                                    3. <\/span>AR Point Cloud Manager:<\/strong> Derinlik verilerini nokta bulutları halinde işleyen altyapı.<\/li>
                                                                                                                                                                                                                                                    4. <\/span>Camera Passthrough Setup:<\/strong> Ana kameranın arka plan temizleme bayrakları (Clear Flags) şeffaf renge çekilerek dış dünya kamera görüntüsünün (Passthrough) doğrudan ekrana basılması sağlanmıştır.<\/li><\/ol>


                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                      3. Geri Dönüşüm Kutusu Prefablarının AR Işıklandırması ve Gölge Optimizasyonu<\/strong><\/p>

                                                                                                                                                                                                                                                      Günün son aşamasında, projedeki görsellerin Karma Gerçeklik ortamına uyumu ve performansı üzerine çalışılmıştır. VR ortamından kalan 3D geri dönüşüm kutusu (Kağıt, Cam, Plastik) prefablarının AR ortamında daha doğal ve performanslı görünmesi amacıyla materyal ve gölge revizyonları gerçekleştirilmiştir.<\/p>


                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                      1. <\/span>URP Simple Lit Shader Dönüşümü:<\/strong> Gerçek ışık koşullarıyla çakışmayan, mobil cihazlarda gereksiz GPU yükü yaratmayan ve sabit 72+ FPS hedefine katkı sağlayan URP Simple Lit shader’ına geçilmiştir. Dönüşüm sırasında objelerin orijinal renk ve doku (Texture\/Albedo) haritaları korunmuştur. Ayrıca Unity'nin salt-okunur iç paket (Packages\/) materyallerinin bozulmaması için dinamik filtreleme mantığı koda dahil edilmiştir.<\/li>
                                                                                                                                                                                                                                                      2. <\/span>AR Blob Shadow (Yapay Gölge) Entegrasyonu:<\/strong> Karma gerçeklikte 3D objelerin odanın içinde havada süzülüyormuş gibi görünmesi (Floating Effect) problemini çözmek amacıyla prefabların tabanına PrefabUtility mimarisi kullanılarak şeffaf, çarpışmasız (no-collider) \"Blob Shadow\" düzlemleri eklenmiştir. Yapılan bu görsel dokunuş sayesinde sanal kutuların oyuncunun gerçek odasındaki zeminle fiziksel olarak temas ettiği hissi güçlendirilmiştir.<\/li><\/ol>


                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                        1. <\/span>[10:29]<\/strong> (7762624<\/em>) chore(xr): sync OpenXR package feature settings<\/li>
                                                                                                                                                                                                                                                        2. <\/span>[13:37]<\/strong> (0155268<\/em>) feat(ar): integrate Scene Understanding API and create test scene - Created ARSetupTool (Editor Script) with Clean Code principles for automated AR setup. - Generated AR_SceneUnderstanding_Test scene programmatically. - Configured XR Origin, AR Session, AR Plane Manager, and AR Point Cloud Manager for room tracking. - Set up main camera clear flags for AR Passthrough support.<\/li>
                                                                                                                                                                                                                                                        3. <\/span>[17:40]<\/strong> (68e390a<\/em>) design(prefabs): optimize recycling bins for AR lighting and add blob shadows - Updated ARSetupTool to include automated material and shadow injection tools using PrefabUtility. - Switched Paper, Glass, and Plastic bin materials to URP Simple Lit shader for stable AR lighting. - Added AR Blob Shadows (no-collider, transparent quads) under bin prefabs to prevent floating effect in Mixed Reality. - Ensured immutable Unity package materials (Packages\/) are safely ignored during optimization.<\/li><\/ol>\n\n--- DAY 25 (2026-08-05) ---\n

                                                                                                                                                                                                                                                          Bugünkü çalışmalar kapsamında, projemizin VR (Sanal Gerçeklik) ortamından AR (Artırılmış Gerçeklik) ve Karma Gerçeklik (MR) ortamına geçiş sürecinin teknik altyapısı oluşturulmuş, cihaz derleme ayarları yapılandırılmış ve nesne havuzlama ile spawner mimarisi AR ortamına uygun hale getirilmiştir.<\/p>


                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                          XR Build Ayarları ve Passthrough Entegrasyonu:<\/strong><\/p>

                                                                                                                                                                                                                                                          1. <\/span>Meta Quest cihazlarında çalışacak ilk AR yapısının (Build) hazırlanması amacıyla Unity OpenXR ve AR Foundation paket yapılandırmaları gerçekleştirilmiştir.<\/li>
                                                                                                                                                                                                                                                          2. <\/span>Gerçek dünya görüntüsünün gözlüğe aktarılmasını sağlayan Meta Passthrough teknolojisinin kararlı çalışabilmesi adına XRGeneralSettings ve OpenXRPackageSettings yapılandırmaları güncellenmiştir.<\/li>
                                                                                                                                                                                                                                                          3. <\/span>Cihaz üzerindeki derinlik tespiti ve zemin algılama (Scene Understanding) mekanizmaları için AR Default Plane prefab yapısı projeye eklenmiş ve fiziksel ortam çarpışmaları (Collisions) için hazırlanmıştır. Fiziksel cihaz testleri öncesinde kullanılmak üzere AR_SceneUnderstanding_Test adında özel bir test sahnesi kurulmuştur.<\/li><\/ol>


                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                            AR Nesne Havuzlaması (Object Pool) ve Portal Spawner Mimarisi:<\/strong><\/p>

                                                                                                                                                                                                                                                            1. <\/span>Eski VR mekaniğinde bulunan sabit konveyör bant (Conveyor Belt) bağımlılıkları temizlenmiş; ObjectPoolManager.cs sınıfı AR dünyasına uygun olarak yeniden refaktör edilmiştir.<\/li>
                                                                                                                                                                                                                                                            2. <\/span>Bellek performansını korumak (Garbage Collector yükünü azaltmak) amacıyla atıkların yeniden kullanılmasını sağlayan havuzlama altyapısı, serbest düşüş (Free-fall gravity) fizikleri ile uyumlu hale getirilmiştir.<\/li>
                                                                                                                                                                                                                                                            3. <\/span>AR ortamında oyuncunun etrafında dinamik olarak atık objeleri (Kağıt, Cam, Plastik) üreten PortalSpawner.cs sınıfı yazılmıştır. Bu sınıf, oyuncunun kamerasını (XR Origin \/ Main Camera) merkez alarak belirlenen yarıçap ve yükseklikten rastgele koordinatlarda obje doğurma (Spawn) mantığını yürütmektedir.<\/li><\/ol>


                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                              Sonuç:<\/strong><\/p>

                                                                                                                                                                                                                                                              1. <\/span>Proje, standart VR ortamından Meta Quest Passthrough destekli AR mimarisine başarıyla taşınmıştır.<\/li>
                                                                                                                                                                                                                                                              2. <\/span>Bellek yönetimini optimize eden nesne havuzlama sistemi (Object Pool) AR fizikleriyle entegre edilmiştir.<\/li>
                                                                                                                                                                                                                                                              3. <\/span>Fiziksel ortamda zemin tespiti ve dinamik obje doğurma süreçlerinin teknik temelleri atılmıştır.<\/li><\/ol>


                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                1. <\/span>[13:32]<\/strong> (4270d30<\/em>) chore(xr): configure build settings and prepare AR test scene - Enabled OpenXR and AR Foundation configurations for Meta Quest build. - Updated XRGeneralSettings and OpenXRPackageSettings for Passthrough support. - Added AR Default Plane prefab for physical environment collisions. - Prepared AR_SceneUnderstanding_Test scene for Sabri Emre's physical device testing.<\/li>
                                                                                                                                                                                                                                                                2. <\/span>[18:12]<\/strong> (777cdd1<\/em>) feat(ar): implement portal spawner and refactor object pool - Created PortalSpawner.cs to handle randomized waste dropping in AR space. - Implemented radius-based spawning logic around the player's camera. - Refactored ObjectPoolManager.cs to remove legacy VR conveyor belt dependencies. - Updated physics logic to allow free-fall gravity for spawned AR objects.<\/li><\/ol>\n\n--- DAY 26 (2026-08-06) ---\n

                                                                                                                                                                                                                                                                  Bugünkü çalışmalar kapsamında, AR oyunumuzun atık üretim mekanizmasına seviyeye bağlı nadir obje (Golden Waste) üretim algoritması entegre edilmiş, 3D model ve fizik yapılandırmaları tamamlanmış ve geri dönüşüm kutularının (Bin) oyuncuya skor, Coin ve XP kazandıran event tabanlı ödül sistemi geliştirilmiştir.<\/p>


                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                  Golden Waste (Altın Çöp) Mimarisi ve Dinamik RNG Algoritması:<\/strong><\/p>

                                                                                                                                                                                                                                                                  1. <\/span>PortalSpawner.cs sınıfı üzerinde nadir atık üretimi için gerekli konfigürasyon alanları (goldenWastePrefab ve goldenWasteChance) tanımlanmış ve sınıf içerisindeki geçici test kodları temizlenmiştir.<\/li>
                                                                                                                                                                                                                                                                  2. <\/span>Projeye aktarılan Recycle_Coin 3D modeli için merkez (Pivot) noktası düzeltmeleri yapılmış; Rigidbody, Convex MeshCollider ve XR Grab Interactable bileşenleri eklenerek fiziksel etkileşimlere uygun bir Prefab yapısına dönüştürülmüştür.<\/li>
                                                                                                                                                                                                                                                                  3. <\/span>PortalSpawner.cs içerisinde oyunun mevcut zorluk seviyesine (Difficulty Level) bağlı olarak nadir obje düşme ihtimalini %5'ten başlatan ve seviye arttıkça %25'e kadar kademeli yükselten dinamik bir şans (RNG) algoritması yazılmıştır. Şansın yaver gitmediği durumlarda sistemin varsayılan standart atıklara (Kağıt, Cam, Plastik) güvenli şekilde dönmesi (Fallback) sağlanmıştır.<\/li><\/ol>


                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                    Geri Dönüşüm Kutuları (BinTrigger) ve Ödül Event Sistemi:<\/strong><\/p>

                                                                                                                                                                                                                                                                    1. <\/span>Nesne yönelimli tasarım ilkeleri (Encapsulation ve Loose Coupling) doğrultusunda, çöp kutusu eşleşme sonuçlarını diğer yöneticilere (ScoreManager, EconomyManager vb.) ileten SortResultData paket veri yapısı (struct) genişletilerek CoinChange ve XpChange alanları eklenmiştir.<\/li>
                                                                                                                                                                                                                                                                    2. <\/span>BinTrigger.cs betiği güncellenerek, atılan objenin türü ile kutu türü doğru eşleştiğinde veya yanlış eşleştiğinde tetiklenen C# Action Event mekanizması kurulmuştur.<\/li>
                                                                                                                                                                                                                                                                    3. <\/span>AR test sahnesindeki (AR_SceneUnderstanding_Test.unity) çöp kutularının doğru ve yanlış atış parametreleri (kazandırılacak Puan, Coin ve XP miktarları) yapılandırılmış ve testleri gerçekleştirilmiştir.<\/li><\/ol>


                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                      Sonuç:<\/strong><\/p>

                                                                                                                                                                                                                                                                      1. <\/span>Seviyeye bağlı dinamik olasılık (RNG) mantığı kurularak oyun içi çeşitlilik ve oyuncu motivasyonu artırılmıştır.<\/li>
                                                                                                                                                                                                                                                                      2. <\/span>Dışarıdan aktarılan 3D modellerin AR\/VR fizik standartlarına uygun hale getirilmesi (Pivot ve Collider optimizasyonu) deneyimi kazanılmıştır.<\/li>
                                                                                                                                                                                                                                                                      3. <\/span>Bağımsız sistemler (Event-Driven Architecture) kullanılarak spagetti koddan uzak, genişletilebilir ve performanslı bir ödül\/skor altyapısı inşa edilmiştir.<\/li><\/ol>


                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                        1. <\/span>[11:39]<\/strong> (15df05f<\/em>) chore(spawner): define golden waste configuration fields - Added goldenWastePrefab and goldenWasteChance fields to PortalSpawner.cs. - Cleaned up temporary debug code from Start method.<\/li>
                                                                                                                                                                                                                                                                        2. <\/span>[13:49]<\/strong> (66878f6<\/em>) feat(spawner): implement dynamic golden waste rng and add coin model - Imported Recycle_Coin 3D model and configured its physics\/collider prefab. - Implemented level-based dynamic probability algorithm (5% to 25%) in PortalSpawner. - Configured safe random chance (RNG) fallback to standard waste items. - Updated UI font assets.<\/li>
                                                                                                                                                                                                                                                                        3. <\/span>[17:13]<\/strong> (f63b847<\/em>) feat(environment): integrate coin and xp reward events in bin triggers - Expanded SortResultData struct to include CoinChange and XpChange values. - Updated BinTrigger.cs to broadcast detailed reward data upon successful waste matching. - Configured Bin parameters (correct\/incorrect rewards) in AR test scene. - Applied minor OpenXR setting adjustments.<\/li><\/ol>\n" + }, + "Mustafa emre kaplan": { + "id": 22, + "email": "mustafaemre027@gmail.com", + "repo": "https:\/\/github.com\/mustafaemre027\/securewatch-ai", + "github_username": "mustafaemre027", + "total_entries": 19, + "commits_count": 0, + "commits_sample": [], + "full_text": "\n--- DAY 1 (2026-07-13) ---\n

                                                                                                                                                                                                                                                                          1. Gün – Proje Planlama ve GitHub Altyapısı<\/strong><\/p>

                                                                                                                                                                                                                                                                          Proje Tanımı ve Planlama:<\/strong><\/p>

                                                                                                                                                                                                                                                                          Stajın ilk gününde çalışma düzeni, proje geliştirme süreci ve teslim beklentileri hakkında bilgilendirme yapıldı. SecureWatch AI projesinin amacı, kapsamı ve kullanılacak teknolojiler belirlendi. Proje; ağ trafiği verilerini makine öğrenmesi yöntemleriyle analiz ederek normal ve şüpheli bağlantıları sınıflandıran web tabanlı bir karar destek platformu olarak planlandı.<\/p>


                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                          GitHub İş Akışı:<\/strong><\/p>

                                                                                                                                                                                                                                                                          Projenin 20 günlük geliştirme planı hazırlanarak çalışmalar fazlara ve günlük görevlere ayrıldı. GitHub üzerinde EPIC ve alt görev Issue’ları oluşturuldu. Görevlerin To Do, In Progress, Review ve Done durumlarında izlenebilmesi için Project Board yapılandırıldı. Branch, commit ve Pull Request standartları belirlenerek Issue ve PR şablonları hazırlandı.<\/p>


                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                          Dokümantasyon Çalışmaları:<\/strong><\/p>

                                                                                                                                                                                                                                                                          Projenin tanıtımı ve kullanım bilgileri README.md dosyasında düzenlendi. Geliştirme aşamaları, MVP kapsamı, risk eşikleri ve tamamlanma kriterleri implementation_plan.md dosyasında toplandı. Danışman geri bildirimi doğrultusunda iki dokümanın kullanım amaçları ayrıştırıldı.<\/p>


                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                          Görsel Varlıklar ve Teslim:<\/strong><\/p>

                                                                                                                                                                                                                                                                          Logo, renk paleti, UI ekran taslakları ve proje ekran görüntülerinin düzenli saklanması için docs\/assets dizin yapısı oluşturuldu. Çalışmalar küçük ve anlamlı commitlere ayrılarak ayrı bir branch üzerinde yürütüldü. Değişiklikler Pull Request üzerinden danışman incelemesine sunuldu ve onay sonrasında main branch’ine birleştirildi.<\/p>


                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                          1. <\/span>[01:47]<\/strong> (8e6ce9b<\/em>) docs(assets): add visual asset directory structure<\/li><\/ol>


                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                            1. <\/span>[01:47]<\/strong> (70769f2<\/em>) docs(plan): document asset and mockup integration<\/li><\/ol>


                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                              1. <\/span>[02:02]<\/strong> (fcd557a<\/em>) docs(assets): fix implementation plan link<\/li><\/ol>


                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                1. <\/span>[02:03]<\/strong> (543f758<\/em>) docs(plan): fix phase heading structure<\/li><\/ol>


                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                  1. <\/span>[02:03]<\/strong> (3a52d84<\/em>) docs(readme): clarify license status<\/li><\/ol>


                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                    1. <\/span>[12:02]<\/strong> (19abdc4<\/em>) docs(brand): add SecureWatch AI visual identity<\/li><\/ol>


                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                      1. <\/span>[12:03]<\/strong> (dbad75f<\/em>) docs(mockups): add initial SecureWatch AI UI mockups<\/li><\/ol>


                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                        1. <\/span>[12:03]<\/strong> (28cc59d<\/em>) docs(assets): update visual asset index<\/li><\/ol>


                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                          1. <\/span>[12:18]<\/strong> (b0e7ed3<\/em>) docs(screenshots): add day 01 GitHub evidence<\/li><\/ol>


                                                                                                                                                                                                                                                                                            <\/p>\n\n--- DAY 2 (2026-07-14) ---\n

                                                                                                                                                                                                                                                                                            2. Gün – CIC-IDS2017 Veri Seti Analizi<\/h2>

                                                                                                                                                                                                                                                                                            Veri Seti Seçimi ve Hazırlık<\/h3>

                                                                                                                                                                                                                                                                                            Stajın ikinci gününde SecureWatch AI projesinde kullanılacak ağ trafiği veri seti üzerinde çalışıldı. Başlangıçta planlanan UNSW-NB15 veri setinde yaşanan erişim sorunları nedeniyle proje kapsamı korunarak CIC-IDS2017 veri setine geçildi. Veri seti resmî kaynaktan temin edildi ve MachineLearningCSV paketinde bulunan sekiz CSV dosyası kullanıldı.<\/p>

                                                                                                                                                                                                                                                                                            Ham veri dosyalarının büyük boyutlu olması nedeniyle CSV ve PCAP dosyalarının GitHub reposuna eklenmesini engelleyen .gitignore<\/code> kuralları düzenlendi. Ham ve işlenmiş verilerin ayrı tutulması amacıyla data\/raw<\/code> ve data\/processed<\/code> klasörleri oluşturuldu.<\/p>

                                                                                                                                                                                                                                                                                            Veri Analizi Çalışmaları<\/h3>

                                                                                                                                                                                                                                                                                            Veri setini belleği verimli kullanarak incelemek için CSV dosyalarını parçalar hâlinde okuyan bir Python analiz scripti geliştirildi. Sekiz dosyada toplam 2.830.743 kayıt ve 79 sütun analiz edildi. Sütun adları, veri tipleri, sınıf dağılımları, eksik değerler, sonsuz değerler ve tekrarlanan kayıtlar incelendi.<\/p>

                                                                                                                                                                                                                                                                                            Analiz sonucunda 2.273.097 normal trafik kaydı ve 557.646 saldırı kaydı bulundu. Veri setinin %80,30’unun normal, %19,70’inin saldırı trafiğinden oluştuğu belirlendi. Ayrıca 1.358 NaN, 4.376 Infinity ve dosya bazında toplam 256.479 tekrarlanan kayıt tespit edildi. Label<\/code> sütununda eksik değer bulunmadı.<\/p>

                                                                                                                                                                                                                                                                                            Etiketleme ve Dokümantasyon<\/h3>

                                                                                                                                                                                                                                                                                            İlk modelleme aşaması için BENIGN<\/code> kayıtları 0<\/code>, diğer saldırı türleri ise 1<\/code> olarak tanımlandı. Son olarak gerçek analiz sonuçlarını içeren veri seti analiz raporu ve 79 sütunluk veri sözlüğü hazırlandı.<\/p>


                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                            1. <\/span>[18:31] (6955612) chore(data): configure dataset directories<\/li>
                                                                                                                                                                                                                                                                                            2. <\/span>[18:32] (9ddf1cc) feat(data): add CIC-IDS2017 analysis script<\/li>
                                                                                                                                                                                                                                                                                            3. <\/span>[18:32] (d9e3fd4) docs(data): document CIC-IDS2017 analysis<\/li><\/ol>\n\n--- DAY 3 (2026-07-16) ---\n

                                                                                                                                                                                                                                                                                              3. Gün – Sistem Mimarisi Tasarımı<\/h2>

                                                                                                                                                                                                                                                                                              Fonksiyonel Gereksinimler ve Kullanıcı Senaryoları<\/h3>

                                                                                                                                                                                                                                                                                              Stajın üçüncü gününde SecureWatch AI projesinin sistem mimarisi ve teknik dokümantasyonu hazırlandı. Kullanıcı yönetimi, CSV yükleme, model eğitimi, saldırı tespiti, risk skorlama, güvenlik olayı yönetimi, dashboard ve audit log işlemlerine ait fonksiyonel gereksinimler belirlendi.<\/p>

                                                                                                                                                                                                                                                                                              Yönetici ve Güvenlik Analisti rolleri için kullanıcı senaryoları oluşturuldu. Yöneticinin kullanıcı oluşturma, audit log inceleme ve olayları analistlere atama yetkileri; analistin ise CSV yükleme, analiz başlatma, tespit sonuçlarını inceleme ve güvenlik olaylarını yönetme işlemleri tanımlandı.<\/p>

                                                                                                                                                                                                                                                                                              Veritabanı ve Durum Makineleri<\/h3>

                                                                                                                                                                                                                                                                                              PostgreSQL üzerinde kullanılacak users<\/code>, analysis_jobs<\/code>, detection_results<\/code>, incidents<\/code>, incident_comments<\/code> ve audit_logs<\/code> tablolarını içeren ER diyagramı hazırlandı. Tablolar arasındaki yabancı anahtarlar ile CASCADE<\/code>, RESTRICT<\/code> ve SET NULL<\/code> bütünlük kuralları belirlendi.<\/p>

                                                                                                                                                                                                                                                                                              Veritabanı tasarımı CIC-IDS2017 veri yapısıyla karşılaştırıldı. Veri setinde bulunmayan IP, kaynak port ve protokol alanları zorunlu alanlardan çıkarılırken destination_port<\/code> korundu.<\/p>

                                                                                                                                                                                                                                                                                              Analiz işlemleri için PENDING<\/code>, PROCESSING<\/code>, COMPLETED<\/code> ve FAILED<\/code>; güvenlik olayları için OPEN<\/code>, IN_PROGRESS<\/code>, RESOLVED<\/code> ve FALSE_POSITIVE<\/code> durumları tanımlandı. İzin verilen geçişler Mermaid durum diyagramlarıyla gösterildi.<\/p>

                                                                                                                                                                                                                                                                                              Katmanlı Mimari, API ve Makine Öğrenmesi Akışı<\/h3>

                                                                                                                                                                                                                                                                                              React ve TypeScript tabanlı frontend, FastAPI backend, servis katmanı, scikit-learn makine öğrenmesi bileşeni ve PostgreSQL veritabanı arasındaki iletişimi gösteren katmanlı mimari hazırlandı.<\/p>

                                                                                                                                                                                                                                                                                              Kimlik doğrulama, kullanıcı, analiz, tespit sonucu, güvenlik olayı, yorum, audit log ve dashboard işlemleri için temel REST API endpointleri tasarlandı. Endpointlerin HTTP yanıt kodları, istek ve yanıt gövdeleri, sahiplik kontrolleri ve rol tabanlı erişim kuralları belgelendi.<\/p>

                                                                                                                                                                                                                                                                                              CIC-IDS2017 verilerinin temizlenmesi, stratified olarak eğitim ve test kümelerine ayrılması, modellerin eğitilmesi ve CSV tabanlı batch tahmin yapılması süreçleri dokümante edildi. Veri sızıntısını önlemek amacıyla imputer ve scaler işlemlerinin yalnızca eğitim verisinde fit edilmesi kararlaştırıldı.<\/p>

                                                                                                                                                                                                                                                                                              Çalışma tamamen mimari dokümantasyon kapsamında gerçekleştirildi; backend, frontend, veritabanı migration veya model uygulama kodu yazılmadı.<\/p>


                                                                                                                                                                                                                                                                                              <\/p>


                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                              1. <\/span>[15:27]<\/strong> (e197c33<\/em>) docs(data): remove stale UNSW-NB15 references<\/li>
                                                                                                                                                                                                                                                                                              2. <\/span>[15:27]<\/strong> (81a96b3<\/em>) docs(roadmap): use MachineLearningCSV terminology<\/li>
                                                                                                                                                                                                                                                                                              3. <\/span>[15:28]<\/strong> (c4f4f36<\/em>) docs(workflow): clarify advisor-controlled merge process<\/li>
                                                                                                                                                                                                                                                                                              4. <\/span>[15:31]<\/strong> (219aed9<\/em>) docs(requirements): define functional requirements<\/li>
                                                                                                                                                                                                                                                                                              5. <\/span>[15:31]<\/strong> (54c6342<\/em>) docs(use-cases): document admin and analyst scenarios<\/li>
                                                                                                                                                                                                                                                                                              6. <\/span>[15:31]<\/strong> (ebb4397<\/em>) docs(database): add ER model and data dictionary<\/li>
                                                                                                                                                                                                                                                                                              7. <\/span>[15:32]<\/strong> (2aa3572<\/em>) docs(workflow): define analysis and incident state machines<\/li>
                                                                                                                                                                                                                                                                                              8. <\/span>[15:32]<\/strong> (9886831<\/em>) docs(architecture): document layered system design<\/li>
                                                                                                                                                                                                                                                                                              9. <\/span>[15:32]<\/strong> (b7a6158<\/em>) docs(api): draft core API endpoints<\/li>
                                                                                                                                                                                                                                                                                              10. <\/span>[15:33]<\/strong> (2327a50<\/em>) docs(ml): document training and batch inference flows<\/li>
                                                                                                                                                                                                                                                                                              11. <\/span>[15:33]<\/strong> (5f56c84<\/em>) docs(diary): add missing day 02 internship entry<\/li>
                                                                                                                                                                                                                                                                                              12. <\/span>[15:34]<\/strong> (729afbd<\/em>) docs(diary): add day 03 internship entry<\/li>
                                                                                                                                                                                                                                                                                              13. <\/span>[15:59]<\/strong> (905a8a8<\/em>) docs(requirements): align upload schema and dashboard scope<\/li>
                                                                                                                                                                                                                                                                                              14. <\/span>[15:59]<\/strong> (ee44738<\/em>) docs(database): fix nullable relationships and dataset fields<\/li>
                                                                                                                                                                                                                                                                                              15. <\/span>[16:03]<\/strong> (edb6648<\/em>) docs(workflow): correct MVP state transitions<\/li>
                                                                                                                                                                                                                                                                                              16. <\/span>[20:06]<\/strong> (48e2714<\/em>) docs(architecture): correct layered component dependencies<\/li>
                                                                                                                                                                                                                                                                                              17. <\/span>[20:06]<\/strong> (8eef0ae<\/em>) docs(api): correct endpoint semantics and RBAC coverage<\/li>
                                                                                                                                                                                                                                                                                              18. <\/span>[20:08]<\/strong> (6b3ae40<\/em>) docs(ml): fix training diagram and risk boundaries<\/li>
                                                                                                                                                                                                                                                                                              19. <\/span>[20:09]<\/strong> (96af059<\/em>) docs(data): align preprocessing decisions and roadmap claims<\/li>
                                                                                                                                                                                                                                                                                              20. <\/span>[20:09]<\/strong> (96ec6d7<\/em>) docs(diary): refine day 02 technical statements<\/li>
                                                                                                                                                                                                                                                                                              21. <\/span>[20:11]<\/strong> (96ad2e6<\/em>) docs(diary): update day 03 review record<\/li>
                                                                                                                                                                                                                                                                                              22. <\/span>[20:13]<\/strong> (b3b3329<\/em>) docs(api): fix user created status code<\/li><\/ol>\n\n--- DAY 4 (2026-07-17) ---\n

                                                                                                                                                                                                                                                                                                4. Gün – Backend Temeli ve PostgreSQL Entegrasyonu<\/h2>

                                                                                                                                                                                                                                                                                                PostgreSQL Kurulumu ve Hazırlık<\/h3>

                                                                                                                                                                                                                                                                                                Stajın dördüncü gününde SecureWatch AI projesinin backend altyapısı üzerinde çalışıldı. İlk olarak PostgreSQL 18 kurulumu gerçekleştirildi. Kurulum sırasında Türkçe yerel ayar adındaki karakterler nedeniyle veritabanı kümesi oluşturulamadı. Kurulum logları incelenerek sorun tespit edildi ve veritabanı kümesi UTF-8 karakter kodlaması ile C<\/code> yerel ayarı kullanılarak yeniden oluşturuldu.<\/p>

                                                                                                                                                                                                                                                                                                PostgreSQL servisi başlatıldı ve 5432 portunun çalıştığı doğrulandı. Uygulamanın kullanacağı securewatch_user<\/code> kullanıcısı ile securewatch_db<\/code> veritabanı oluşturuldu. Bağlantı bilgileri yerel .env<\/code> dosyasında saklandı ve bu dosyanın GitHub’a yüklenmesi engellendi.<\/p>

                                                                                                                                                                                                                                                                                                Backend ve Veritabanı Altyapısı<\/h3>

                                                                                                                                                                                                                                                                                                FastAPI için modüler backend klasör yapısı oluşturuldu. Uygulama ayarlarının ortam değişkenlerinden alınması için Pydantic Settings kullanıldı. Python sanal ortamı hazırlanarak gerekli paketler sürümleriyle birlikte yüklendi.<\/p>

                                                                                                                                                                                                                                                                                                SQLAlchemy kullanılarak veritabanı bağlantısı, oturum yönetimi ve temel model altyapısı hazırlandı. PostgreSQL bağlantısı SELECT 1<\/code> sorgusuyla test edildi. Gelecekte oluşturulacak veritabanı tablolarının değişikliklerini yönetmek amacıyla Alembic migration altyapısı kuruldu. Bu aşamada henüz tablo modeli veya migration dosyası oluşturulmadı.<\/p>

                                                                                                                                                                                                                                                                                                API ve Test Çalışmaları<\/h3>

                                                                                                                                                                                                                                                                                                API hatalarının standart JSON biçiminde döndürülmesi için merkezi hata yönetimi hazırlandı. Uygulama ve veritabanı durumunu kontrol etmek amacıyla \/api\/v1\/health<\/code> endpointi oluşturuldu. Endpointin çalışan PostgreSQL bağlantısında HTTP 200, bağlantı hatasında ise HTTP 503 döndürdüğü doğrulandı.<\/p>

                                                                                                                                                                                                                                                                                                Backend başlangıcı, OpenAPI şeması, health endpointi ve hata yönetimi için toplam yedi otomatik test yazıldı. Test sürecinde görülen eski HTTPX bağımlılığı uyarısı araştırılarak HTTPX2’ye geçildi. Son durumda yedi testin tamamı sıfır hata ve sıfır uyarıyla geçti. Uvicorn sunucusu çalıştırılarak uygulamanın gerçek PostgreSQL bağlantısıyla doğru yanıt verdiği kontrol edildi.<\/p>

                                                                                                                                                                                                                                                                                                Kullanıcı modeli, JWT kimlik doğrulaması ve rol tabanlı yetkilendirme çalışmaları bir sonraki güne bırakıldı.<\/p>


                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                1. <\/span>[20:11]<\/strong> (16f285e<\/em>) chore(backend): scaffold FastAPI application<\/li>
                                                                                                                                                                                                                                                                                                2. <\/span>[20:21]<\/strong> (96dddc0<\/em>) feat(database): configure PostgreSQL connection<\/li>
                                                                                                                                                                                                                                                                                                3. <\/span>[20:25]<\/strong> (de51fc1<\/em>) chore(database): configure Alembic migrations<\/li>
                                                                                                                                                                                                                                                                                                4. <\/span>[20:30]<\/strong> (599b9b3<\/em>) feat(api): add centralized error handling<\/li>
                                                                                                                                                                                                                                                                                                5. <\/span>[20:34]<\/strong> (63fcbc1<\/em>) feat(api): add database health endpoint<\/li>
                                                                                                                                                                                                                                                                                                6. <\/span>[20:38]<\/strong> (c648813<\/em>) test(backend): add startup and health checks<\/li>
                                                                                                                                                                                                                                                                                                7. <\/span>[20:47]<\/strong> (83ede03<\/em>) fix(test): replace deprecated HTTPX dependency<\/li>
                                                                                                                                                                                                                                                                                                8. <\/span>[20:50]<\/strong> (049e5b2<\/em>) docs(backend): document local setup<\/li>
                                                                                                                                                                                                                                                                                                9. <\/span>[20:53]<\/strong> (267cdb2<\/em>) docs(diary): add day 04 internship entry<\/li>
                                                                                                                                                                                                                                                                                                10. <\/span>[21:13]<\/strong> (88e739c<\/em>) Merge pull request #37 from mustafaemre027\/feature\/15-backend-foundation feat(backend): establish FastAPI backend foundation<\/li><\/ol>


                                                                                                                                                                                                                                                                                                  <\/p>\n\n--- DAY 5 (2026-07-20) ---\n

                                                                                                                                                                                                                                                                                                  5. Gün – Kimlik Doğrulama, RBAC ve Audit Log<\/h2>

                                                                                                                                                                                                                                                                                                  Kullanıcı ve Veritabanı Altyapısı<\/h3>

                                                                                                                                                                                                                                                                                                  Kullanıcı ve audit log bilgilerini tutmak için SQLAlchemy modelleri oluşturuldu. ADMIN<\/code> ve ANALYST<\/code> rolleri tanımlandı ve Alembic migration ile tablolar PostgreSQL veritabanına aktarıldı.<\/p>

                                                                                                                                                                                                                                                                                                  Kimlik Doğrulama ve Yetkilendirme<\/h3>

                                                                                                                                                                                                                                                                                                  Parolaların güvenli saklanması için bcrypt, access token işlemleri için PyJWT kullanıldı. Login, kullanıcı oluşturma, kullanıcı listeleme ve audit log görüntüleme endpointleri geliştirildi. Kimliği doğrulanmamış isteklerde 401<\/code>, yetkisi olmayan kullanıcılarda 403<\/code> yanıtı döndürüldü.<\/p>

                                                                                                                                                                                                                                                                                                  Audit Log ve Güvenlik<\/h3>

                                                                                                                                                                                                                                                                                                  Başarılı girişler ve kullanıcı oluşturma işlemleri audit log tablosuna kaydedildi. Kullanıcı ile audit kaydının tek transaction içinde oluşturulması sağlandı. JWT anahtarı ortam değişkenine taşındı ve hassas bilgilerin loglara yazılması engellendi.<\/p>

                                                                                                                                                                                                                                                                                                  Test ve Sonuç<\/h3>

                                                                                                                                                                                                                                                                                                  Kimlik doğrulama, RBAC ve audit log işlemleri için toplam 61 test çalıştırıldı. Tüm testler sıfır hata ve sıfır uyarıyla tamamlandı. Gün sonunda hazırlanan PR #38 danışman onayından sonra merge edildi.<\/p>


                                                                                                                                                                                                                                                                                                  <\/p>


                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                  1. <\/span>[11:26]<\/strong> (5b7b9ff<\/em>) chore(deps): add authentication dependencies<\/li>
                                                                                                                                                                                                                                                                                                  2. <\/span>[11:30]<\/strong> (65f3df3<\/em>) feat(auth): add password hashing and JWT helpers<\/li>
                                                                                                                                                                                                                                                                                                  3. <\/span>[11:37]<\/strong> (07ee831<\/em>) feat(models): define user and audit log models<\/li>
                                                                                                                                                                                                                                                                                                  4. <\/span>[14:40]<\/strong> (a3565da<\/em>) chore(database): add users and audit logs migration<\/li>
                                                                                                                                                                                                                                                                                                  5. <\/span>[15:07]<\/strong> (100e7d4<\/em>) chore(deps): add email validation dependency<\/li>
                                                                                                                                                                                                                                                                                                  6. <\/span>[15:10]<\/strong> (25f72e5<\/em>) feat(schemas): add authentication user and audit schemas<\/li>
                                                                                                                                                                                                                                                                                                  7. <\/span>[16:17]<\/strong> (e63f7ca<\/em>) feat(services): add user and audit log services<\/li>
                                                                                                                                                                                                                                                                                                  8. <\/span>[16:18]<\/strong> (bacc116<\/em>) feat(auth): add authentication and RBAC services<\/li>
                                                                                                                                                                                                                                                                                                  9. <\/span>[17:08]<\/strong> (27c1ae1<\/em>) feat(api): add login user and audit log endpoints<\/li>
                                                                                                                                                                                                                                                                                                  10. <\/span>[17:30]<\/strong> (fab0b77<\/em>) test(auth): cover authentication RBAC and audit logging<\/li>
                                                                                                                                                                                                                                                                                                  11. <\/span>[17:51]<\/strong> (8b70847<\/em>) fix(config): require secure JWT secret configuration<\/li>
                                                                                                                                                                                                                                                                                                  12. <\/span>[17:52]<\/strong> (3945c2c<\/em>) fix(auth): make user creation and audit logging atomic<\/li>
                                                                                                                                                                                                                                                                                                  13. <\/span>[18:06]<\/strong> (f5d6a2a<\/em>) refactor(api): centralize client IP extraction<\/li>
                                                                                                                                                                                                                                                                                                  14. <\/span>[18:06]<\/strong> (33eb74c<\/em>) fix(api): align endpoint paths with API contract<\/li>
                                                                                                                                                                                                                                                                                                  15. <\/span>[18:07]<\/strong> (a718106<\/em>) docs(api): align error response documentation<\/li>
                                                                                                                                                                                                                                                                                                  16. <\/span>[18:07]<\/strong> (54be54d<\/em>) style: clean whitespace in modified files<\/li>
                                                                                                                                                                                                                                                                                                  17. <\/span>[18:17]<\/strong> (ec6aa8e<\/em>) docs(auth): document authentication and RBAC setup<\/li>
                                                                                                                                                                                                                                                                                                  18. <\/span>[18:29]<\/strong> (4ab9b1d<\/em>) docs(diary): add day 05 internship entry<\/li><\/ol>\n\n--- DAY 6 (2026-07-21) ---\n

                                                                                                                                                                                                                                                                                                    Gün 6 – CSV Yükleme ve Doğrulama<\/h2>

                                                                                                                                                                                                                                                                                                    Yükleme Ayarları ve AnalysisJob Modeli<\/h3>

                                                                                                                                                                                                                                                                                                    Bugün SecureWatch AI projesinde CIC-IDS2017 veri seti için güvenli CSV yükleme ve doğrulama altyapısını geliştirdim. İlk olarak dosyaların kaydedileceği dizini ve 50 MB maksimum yükleme sınırını yapılandırdım. Yüklenen dosyaların durumunu takip edebilmek için AnalysisJob<\/code> modelini oluşturdum ve veritabanı değişikliklerini Alembic migration ile uyguladım.<\/p>

                                                                                                                                                                                                                                                                                                    Güvenli Dosya Depolama<\/h3>

                                                                                                                                                                                                                                                                                                    Dosyaların tamamını belleğe almadan parçalar hâlinde okunmasını sağlayan güvenli bir depolama servisi geliştirdim. Bu servis dosya boyutunu kontrol etmekte, SHA-256 özeti hesaplamakta ve güvenli dosya isimleri kullanmaktadır. Path traversal saldırılarına karşı dosya adlarını temizleyen ve hata durumunda geçici dosyaları silen mekanizmalar da ekledim. Aynı dosyanın tekrar yüklenmesini SHA-256 değeri üzerinden engelledim.<\/p>

                                                                                                                                                                                                                                                                                                    CSV Şema Doğrulaması<\/h3>

                                                                                                                                                                                                                                                                                                    CSV doğrulama aşamasında dosya uzantısı, MIME türü, UTF-8 kodlaması ve başlık satırı kontrol edildi. CIC-IDS2017 veri yapısındaki 78 özellik sütununun bulunması zorunlu tutulurken Label<\/code> sütunu opsiyonel olarak kabul edildi. Eksik, fazla, boş veya tekrarlanan sütun adları için açıklayıcı hata yanıtları oluşturuldu.<\/p>

                                                                                                                                                                                                                                                                                                    API, Yetkilendirme ve Testler<\/h3>

                                                                                                                                                                                                                                                                                                    Son olarak CSV yükleme, analizleri listeleme ve analiz detayını görüntüleme endpointlerini geliştirdim. Yükleme işlemini ANALYST rolüyle sınırlandırdım; ADMIN kullanıcılarının bütün analizleri, ANALYST kullanıcılarının ise yalnızca kendi analizlerini görüntülemesini sağladım. Başarılı yüklemeler PENDING<\/code> durumunda kaydedildi ve audit log oluşturuldu. Geliştirilen özellikleri birim ve entegrasyon testleriyle doğruladım. Gün sonunda toplam 90 test hatasız ve uyarısız şekilde başarıyla geçti.<\/p>


                                                                                                                                                                                                                                                                                                    <\/p>


                                                                                                                                                                                                                                                                                                    <\/p>


                                                                                                                                                                                                                                                                                                    <\/p>


                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                    Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                    1. <\/span>[11:03] 7d90e82 feat(config): add CSV upload settings<\/li>
                                                                                                                                                                                                                                                                                                    2. <\/span>[12:00] c9f92fe feat(model): add AnalysisJob model<\/li>
                                                                                                                                                                                                                                                                                                    3. <\/span>[12:04] 9fcd8bd fix(model): align analysis job status length<\/li>
                                                                                                                                                                                                                                                                                                    4. <\/span>[12:43] 9d59aa2 chore(database): add analysis jobs migration<\/li>
                                                                                                                                                                                                                                                                                                    5. <\/span>[12:51] 658e1ff feat(storage): add secure CSV file storage<\/li>
                                                                                                                                                                                                                                                                                                    6. <\/span>[13:08] c7f550d feat(validation): validate CIC-IDS2017 CSV uploads<\/li>
                                                                                                                                                                                                                                                                                                    7. <\/span>[14:43] c40676b feat(api): add analysis upload and status endpoints<\/li>
                                                                                                                                                                                                                                                                                                    8. <\/span>[15:24] 5cb75be fix(api): inject upload settings per request<\/li>
                                                                                                                                                                                                                                                                                                    9. <\/span>[15:24] 3224528 test(upload): cover CSV upload and validation<\/li>
                                                                                                                                                                                                                                                                                                    10. <\/span>[15:33] 1bc225a docs(upload): document CSV upload workflow<\/li>
                                                                                                                                                                                                                                                                                                    11. <\/span>[15:43] 6b5508c docs(diary): add day 06 internship entry<\/li><\/ol>\n\n--- DAY 7 (2026-07-22) ---\n

                                                                                                                                                                                                                                                                                                      7. Gün – Ön İşleme Pipeline’ı ve Veri Sızıntısını Önleme<\/h2>

                                                                                                                                                                                                                                                                                                      Eğitim Verisinin Hazırlanması<\/h3>

                                                                                                                                                                                                                                                                                                      Bugün CIC-IDS2017 veri seti için eğitim verisi hazırlama servisini geliştirdim. Veri setindeki 78 özellik doğrulandıktan sonra tekrar eden Fwd Header Length.1<\/code> sütununu kaldırarak 77 sayısal model özelliği elde ettim. Label<\/code> sütununu hedef değişken olarak ayırdım. Sonsuz değerleri NaN<\/code> değerine dönüştürdüm ve tekrarlanan satırları temizledim.<\/p>

                                                                                                                                                                                                                                                                                                      Ön İşleme Pipeline’ı<\/h3>

                                                                                                                                                                                                                                                                                                      Eksik sayısal değerleri medyanla doldurmak için SimpleImputer<\/code>, değerleri ölçeklendirmek için StandardScaler<\/code> kullandım. Bu adımları ColumnTransformer<\/code> ile birleştirdim. Ayrıca ihtiyaç durumunda kullanılmak üzere bilinmeyen değerleri destekleyen opsiyonel OneHotEncoder<\/code> yapısı ekledim.<\/p>

                                                                                                                                                                                                                                                                                                      Veri Sızıntısının Önlenmesi<\/h3>

                                                                                                                                                                                                                                                                                                      Veriyi yüzde 80 eğitim ve yüzde 20 test olarak stratified biçimde ayırdım. Ön işleme bileşenlerinin yalnızca eğitim verisinde öğrenilmesini, test verisinin ise sadece dönüştürülmesini sağladım. Defensive copy kullanarak kaynak, eğitim ve test verilerinin birbirini değiştirmesini engelledim.<\/p>

                                                                                                                                                                                                                                                                                                      Test ve Sonuç<\/h3>

                                                                                                                                                                                                                                                                                                      Geliştirilen işlemleri otomatik testlerle doğruladım. Toplam 116 test sıfır hata ve sıfır uyarıyla tamamlandı. Dokümantasyonu güncelleyerek PR #40’ı danışman incelemesine gönderdim.<\/p>


                                                                                                                                                                                                                                                                                                      <\/p>


                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                      1. <\/span>[11:12] 923cbd1 chore(deps):<\/strong> add ML preprocessing dependencies<\/li>
                                                                                                                                                                                                                                                                                                      2. <\/span>[11:32] d7a86c8 feat(preprocessing): <\/strong>prepare CIC-IDS2017 training data<\/li>
                                                                                                                                                                                                                                                                                                      3. <\/span>[12:07] b5ae87c feat(preprocessing): <\/strong>build sklearn preprocessing pipeline<\/li>
                                                                                                                                                                                                                                                                                                      4. <\/span>[12:50] 5c1637b feat(preprocessing): <\/strong>add leakage-safe train test split<\/li>
                                                                                                                                                                                                                                                                                                      5. <\/span>[14:22] f7e07b3 fix(preprocessing): <\/strong>isolate mutable split data<\/li>
                                                                                                                                                                                                                                                                                                      6. <\/span>[15:08] aa7be0b docs(preprocessing): <\/strong>document leakage-safe pipeline<\/li>
                                                                                                                                                                                                                                                                                                      7. <\/span>[17:13] 9a18681 docs(diary): <\/strong>add day 07 internship entry<\/li><\/ol>\n\n--- DAY 8 (2026-07-23) ---\n

                                                                                                                                                                                                                                                                                                        8. Gün – Baseline Modeller ve İlk Model Değerlendirmesi<\/h2>

                                                                                                                                                                                                                                                                                                        İkili Etiketleme ve Performans Metrikleri<\/h3>

                                                                                                                                                                                                                                                                                                        CIC-IDS2017 veri setindeki etiketleri ikili sınıflandırmaya uygun hâle getirdim. Normal trafik olan BENIGN<\/code> değerini 0<\/code>, diğer saldırı türlerini ise 1<\/code> olarak kodladım. Modelleri değerlendirmek için accuracy, precision, recall, F1-score ve confusion matrix metriklerini oluşturdum.<\/p>

                                                                                                                                                                                                                                                                                                        Baseline Modeller<\/h3>

                                                                                                                                                                                                                                                                                                        En temel karşılaştırma modelini oluşturmak amacıyla Dami Klasifayır modelini geliştirdim. Ardından sınıf dengesizliğini dikkate alan Lojistik Regreşın modelini eğittim. Modellerin yalnızca eğitim verisiyle öğrenmesini, tahmin ve değerlendirme işlemlerinin test verisi üzerinde yapılmasını sağladım.<\/p>

                                                                                                                                                                                                                                                                                                        Eğitim İş Akışı<\/h3>

                                                                                                                                                                                                                                                                                                        Gün 7’de hazırladığım ön işleme pipeline’ını model eğitim sürecine entegre ettim. Veriler 77 sayısal özellik kullanılarak eğitim ve test kümelerine ayrıldı. Veri sızıntısını önlemek için ön işleme bileşenleri yalnızca eğitim verisinde öğrenildi. CSV dosyasından eğitim yapabilen bir komut satırı aracı geliştirildi ve sonuçların güvenli JSON raporu olarak sunulması sağlandı.<\/p>

                                                                                                                                                                                                                                                                                                        Test ve Sonuç<\/h3>

                                                                                                                                                                                                                                                                                                        Model servisleri, eğitim akışı, performans metrikleri ve hata durumları otomatik testlerle doğrulandı. Toplam 213 test sıfır hata ve sıfır uyarıyla tamamlandı. Teknik dokümantasyon ve ilk model değerlendirme raporu güncellendi. Gün 8 çalışmaları uzak repoya gönderilerek Pull Request ve proje kartları danışman incelemesine hazırlandı.<\/p>


                                                                                                                                                                                                                                                                                                        <\/p>


                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                        1. <\/span>[11:24] 96af05a feat(ml):<\/strong> implement binary label encoding service<\/li>
                                                                                                                                                                                                                                                                                                        2. <\/span>[12:19] c92632f feat(ml):<\/strong> add binary classification metrics<\/li>
                                                                                                                                                                                                                                                                                                        3. <\/span>[13:24] b0b0a06 feat(ml):<\/strong> add dummy classifier baseline training<\/li>
                                                                                                                                                                                                                                                                                                        4. <\/span>[14:18] 1aaf6b9 feat(ml):<\/strong> add logistic regression training with balanced class weight<\/li>
                                                                                                                                                                                                                                                                                                        5. <\/span>[17:52] 0650272 feat(ml)<\/strong>: add baseline training workflow<\/li>
                                                                                                                                                                                                                                                                                                        6. <\/span>[18:00] 22a11c5 docs(ml):<\/strong> document baseline model evaluation<\/li>
                                                                                                                                                                                                                                                                                                        7. <\/span>[18:04] 3060bf7 docs(diary):<\/strong> add day 08 internship entry<\/li>
                                                                                                                                                                                                                                                                                                        8. <\/span>[18:11] 5987316 fix(docs):<\/strong> remove trailing whitespace from baseline report<\/li><\/ol>\n\n--- DAY 9 (2026-07-24) ---\n

                                                                                                                                                                                                                                                                                                          Gün 9 – Random Forest Eğitimi ve Model Karşılaştırması<\/h2>

                                                                                                                                                                                                                                                                                                          Random Forest Eğitim Servisi<\/h3>

                                                                                                                                                                                                                                                                                                          Bugün SecureWatch AI projesinde saldırı trafiğini tespit etmek için Random Forest sınıflandırma altyapısını geliştirdim. Modelin yalnızca eğitim verileri üzerinde öğrenmesini, test verilerinin ise sadece tahmin ve değerlendirme amacıyla kullanılmasını sağladım. Eğitim süresini ölçen ve modelde kullanılan 77 özelliğin önem değerlerini hesaplayan yapıları ekledim. Özellik önemlerini büyükten küçüğe sıralayarak en etkili özelliklerin raporlanmasını sağladım.<\/p>

                                                                                                                                                                                                                                                                                                          Kontrollü Parametre Deneyleri<\/h3>

                                                                                                                                                                                                                                                                                                          Random Forest modelinin farklı ayarlardaki davranışını incelemek için dört kontrollü deney hazırladım. Standart modelin yanında daha derin ağaçlara sahip, sınıf ağırlığı kullanılmayan ve daha az ağaçtan oluşan küçük bir model yapılandırdım. Bütün deneylerin aynı eğitim-test ayrımı üzerinde ve sabit ayarlarla çalışmasını sağlayarak sonuçların tekrarlanabilir olmasına dikkat ettim.<\/p>

                                                                                                                                                                                                                                                                                                          Model Karşılaştırması ve Raporlama<\/h3>

                                                                                                                                                                                                                                                                                                          Gün 8’de geliştirilen Lojistik Regresyon modeli ile dört Random Forest varyantını ortak bir karşılaştırma servisi üzerinden değerlendirdim. Modeller için doğruluk, hassasiyet, duyarlılık, F1-skoru, karmaşıklık matrisi ve eğitim süresi bilgilerini raporladım. Komut satırı aracına Random Forest karşılaştırma seçeneği ekledim ve sonuçların güvenli JSON biçiminde alınmasını sağladım. Ham verilerin, tahmin dizilerinin ve model nesnelerinin çıktıya eklenmesini engelledim. Bu aşamada herhangi bir modeli nihai model olarak seçmedim.<\/p>

                                                                                                                                                                                                                                                                                                          Test ve Sonuç<\/h3>

                                                                                                                                                                                                                                                                                                          Geliştirilen servisler, kontrollü deneyler, veri sızıntısı önlemleri, karşılaştırma yapıları ve komut satırı işlemleri otomatik testlerle doğrulandı. Toplam 237 test sıfır hata ve sıfır uyarıyla başarıyla tamamlandı. Teknik dokümantasyon ve model değerlendirme raporu güncellendi. ROC-AUC, yanlış pozitif oranı analizi ve nihai model seçimi sonraki çalışma gününün kapsamına bırakıldı.<\/p>


                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                          1. <\/span>[11:47]<\/strong> (1aa6980<\/em>) feat(ml): implement random forest classifier training service<\/li>
                                                                                                                                                                                                                                                                                                          2. <\/span>[12:15]<\/strong> (0af7af8<\/em>) feat(ml): add controlled random forest experiments<\/li>
                                                                                                                                                                                                                                                                                                          3. <\/span>[13:22]<\/strong> (3b3352e<\/em>) feat(ml): compare random forest and logistic regression<\/li>
                                                                                                                                                                                                                                                                                                          4. <\/span>[15:37]<\/strong> (e8c1723<\/em>) feat(ml): add random forest evaluation to training cli<\/li>
                                                                                                                                                                                                                                                                                                          5. <\/span>[15:45]<\/strong> (56c9cf0<\/em>) docs(ml): document random forest evaluation and comparison<\/li>
                                                                                                                                                                                                                                                                                                          6. <\/span>[16:08]<\/strong> (2504f5b<\/em>) docs(diary): add day 09 internship entry<\/li><\/ol>\n\n--- DAY 10 (2026-07-27) ---\n

                                                                                                                                                                                                                                                                                                            Gün 10 – Model Değerlendirme ve Nihai Model Seçimi<\/h2>

                                                                                                                                                                                                                                                                                                            Gelişmiş Değerlendirme Metrikleri<\/h3>

                                                                                                                                                                                                                                                                                                            Bugün SecureWatch AI projesinde Lojistik Regresyon ve Random Forest modellerini daha ayrıntılı değerlendirmek için olasılık tabanlı metrik altyapısını geliştirdim. Modellerden saldırı sınıfına ait olasılık değerlerini güvenli biçimde alarak ROC-AUC, PR-AUC, Precision-Recall eğrisi ve yanlış pozitif oranı hesaplamalarını ekledim. Ham verilerin, olasılık dizilerinin ve model nesnelerinin değerlendirme raporlarına eklenmesini engelledim.<\/p>

                                                                                                                                                                                                                                                                                                            Validation Tabanlı Karar Eşiği<\/h3>

                                                                                                                                                                                                                                                                                                            Karar eşiğinin test verisi üzerinden belirlenmesinin veri sızıntısına neden olacağını dikkate alarak yalnızca eğitim verisi üzerinde 5-Fold Cross-Validation kullandım. Farklı karar eşiklerini doğrulama sonuçları üzerinden değerlendirdim. Duyarlılığın en az 0.95, yanlış pozitif oranının ise en fazla 0.05 olması şartını uyguladım. Bu şartları sağlayan eşik bulunmadığında sistemin kontrolsüz biçimde varsayılan bir eşik seçmesini engelledim.<\/p>

                                                                                                                                                                                                                                                                                                            Model Seçimi ve Güvenli Raporlama<\/h3>

                                                                                                                                                                                                                                                                                                            Lojistik Regresyon ile dört Random Forest varyantını ortak bir değerlendirme sürecine dahil ettim. Modellerin yalnızca validation sonuçlarına göre seçilmesini ve test sonuçlarının seçim kararını etkilememesini sağladım. Eğitim süresinin farklı çalıştırmalarda değişebilmesi nedeniyle bu değeri seçim kararından çıkararak yalnızca raporlama amacıyla korudum. Saldırı olasılıklarını LOW, MEDIUM, HIGH ve CRITICAL seviyelerine ayırdım. Komut satırı aracına nihai model seçimi seçeneğini ekledim ve sonuçların güvenli JSON biçiminde alınmasını sağladım.<\/p>

                                                                                                                                                                                                                                                                                                            Test ve Sonuç<\/h3>

                                                                                                                                                                                                                                                                                                            Geliştirilen olasılık çıkarımı, metrik hesaplama, karar eşiği belirleme, model seçimi, risk sınıflandırması ve komut satırı işlemleri otomatik testlerle doğrulandı. Toplam 304 test sıfır hata ve sıfır uyarıyla başarıyla tamamlandı. Teknik dokümantasyon, model değerlendirme raporu ve Model Card hazırlandı. Bu aşamada gerçek veri üzerinden üretim modeli seçilmedi, model dosyası kaydedilmedi ve inference servisi geliştirilmedi.<\/p>


                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                            1. <\/span>[11:18] 1839bc0 feat(ml):<\/strong> implement probability extraction and advanced ROC\/PR metrics<\/li>
                                                                                                                                                                                                                                                                                                            2. <\/span>[12:24] 5e378b7 feat(ml):<\/strong> add validation-based decision threshold selection<\/li>
                                                                                                                                                                                                                                                                                                            3. <\/span>[13:22] c9cb2dd feat(ml): <\/strong>add deterministic final model selection<\/li>
                                                                                                                                                                                                                                                                                                            4. <\/span>[14:37] 36ce544 feat(ml): <\/strong>integrate final model selection into training cli<\/li>
                                                                                                                                                                                                                                                                                                            5. <\/span>[15:35] f5428bc fix(ml)<\/strong>: remove runtime timing from model selection tie-break<\/li>
                                                                                                                                                                                                                                                                                                            6. <\/span>[16:21] 70b11d7 docs(ml): <\/strong>document model evaluation and selection<\/li>
                                                                                                                                                                                                                                                                                                            7. <\/span>[16:25] 016a889 docs(diary):<\/strong> add day 10 internship entry<\/li><\/ol>\n\n--- DAY 11 (2026-07-28) ---\n

                                                                                                                                                                                                                                                                                                              Gün 11 – Güvenli Model Tahmini ve Analiz API’si<\/h2>

                                                                                                                                                                                                                                                                                                              Güvenli Model Paketi ve Tahmin Servisi<\/strong><\/p>

                                                                                                                                                                                                                                                                                                              Bugün SecureWatch AI projesinde hazırlanan model paketini güvenli biçimde yükleyen tahmin altyapısını geliştirdim. Model paketinin yalnızca sunucu tarafından kontrol edilen dizinden okunmasını sağladım ve kullanıcıların dışarıdan model dosyası yüklemesini engelledim. CSV verilerini 77 özellik üzerinden model girdisine hazırladım. Ön işleme yapısını yeniden eğitmeden mevcut dönüştürme kurallarını uyguladım. Her trafik kaydı için saldırı olasılığı, saldırı kararı ve düşük, orta, yüksek veya kritik risk seviyesi üretilmesini sağladım.<\/p>

                                                                                                                                                                                                                                                                                                              Analiz Süreci ve Sonuçların Saklanması<\/strong><\/p>

                                                                                                                                                                                                                                                                                                              Modelin oluşturduğu tahminleri satır bazında saklamak için DetectionResult veri modelini ve gerekli veritabanı güncellemesini hazırladım. Analiz işlerinin bekliyor, işleniyor, tamamlandı ve başarısız durumlarıyla takip edilmesini sağladım. İşlem sırasında hata oluşması hâlinde yarım kalan sonuçların veritabanına kaydedilmesini engelledim. Aynı analiz işinin eş zamanlı iki farklı istek tarafından çalıştırılmasına karşı koruma ekledim. Sonuçların CSV dosyasındaki satır sırasını korumasını sağladım.<\/p>

                                                                                                                                                                                                                                                                                                              API, Yetkilendirme ve Güvenlik Kontrolleri<\/strong><\/p>

                                                                                                                                                                                                                                                                                                              Analizi başlatmak, tahmin sonuçlarını sayfalayarak listelemek ve analiz özetini görüntülemek için üç API uç noktası geliştirdim. Sonuçların saldırı durumu ve risk seviyesine göre filtrelenmesini sağladım. Güvenlik analistlerinin yalnızca kendi analizlerine, yöneticilerin ise bütün analizlere erişebilmesi için rol tabanlı yetkilendirme uyguladım. Ham CSV verilerinin, model nesnelerinin, dosya yollarının ve hata ayrıntılarının API cevaplarına eklenmesini engelledim.<\/p>

                                                                                                                                                                                                                                                                                                              Test ve Sonuç<\/strong><\/p>

                                                                                                                                                                                                                                                                                                              Model yükleme, tahmin üretme, veritabanı kayıtları, işlem geri alma, eş zamanlı istek koruması, filtreleme ve erişim kontrolleri otomatik testlerle doğrulandı. Toplam 354 test sıfır hata, sıfır uyarı ve sıfır atlama ile başarıyla tamamlandı. Teknik dokümantasyon güncellendi. Olay oluşturma, analiste atama, durum yönetimi ve olay notları Gün 12 kapsamına bırakıldı.<\/p>


                                                                                                                                                                                                                                                                                                              <\/p>


                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                              1. <\/span>[01:27] (d0f8f99) feat(inference)<\/strong>: implement secure model loading and inference prediction pipeline<\/li>
                                                                                                                                                                                                                                                                                                              2. <\/span>[01:39] (aae2fc5) feat(analysis): <\/strong>add DetectionResult model, migration, and job processing service<\/li>
                                                                                                                                                                                                                                                                                                              3. <\/span>[01:51] (b881f44) feat(api):<\/strong> add inference execution, result, and summary endpoints<\/li>
                                                                                                                                                                                                                                                                                                              4. <\/span>[10:46] (9a2f561) fix(inference):<\/strong> restore API services and harden job processing<\/li>
                                                                                                                                                                                                                                                                                                              5. <\/span>[10:59] (1d3e918) docs(inference):<\/strong> document secure inference and analysis API<\/li>
                                                                                                                                                                                                                                                                                                              6. <\/span>[11:02] (4e6004e) docs(diary):<\/strong> add day 11 internship entry<\/li>
                                                                                                                                                                                                                                                                                                              7. <\/span>[11:14] (532d4aa) chore:<\/strong> remove trailing whitespace from day 11 changes<\/li><\/ol>\n\n--- DAY 12 (2026-07-29) ---\n

                                                                                                                                                                                                                                                                                                                Gün 12 – Olay Yönetimi ve Güvenlik Olayı API’si<\/h2>

                                                                                                                                                                                                                                                                                                                Incident ve IncidentComment Modelleri<\/h3>

                                                                                                                                                                                                                                                                                                                Bugün SecureWatch AI projesinde, tespit edilen güvenlik tehditlerini yönetilebilir olay kayıtlarına dönüştüren altyapıyı geliştirdim. Bu kapsamda Incident ve IncidentComment veritabanı modellerini oluşturdum. Incident modelini DetectionResult tablosuyla bire bir ilişkili olacak şekilde yapılandırarak aynı tespit sonucundan birden fazla olay oluşturulmasını engelledim. Olayların durumu, önem seviyesi, atanan analist, açıklama ve oluşturulma zamanı gibi bilgilerin saklanmasını sağladım. Olaylara eklenen analist yorumları için ayrı bir ilişki tanımladım ve gerekli Alembic veritabanı güncellemesini hazırladım.<\/p>

                                                                                                                                                                                                                                                                                                                Olay Yönetimi ve Yetkilendirme<\/h3>

                                                                                                                                                                                                                                                                                                                Olay yönetimi işlemlerinde rol tabanlı erişim kontrolü ve kayıt sahipliği kuralları uyguladım. Güvenlik analistlerinin yalnızca kendi analiz işlerine ait saldırı tespitlerinden olay oluşturabilmesini sağladım. Analistler, henüz kimseye atanmamış bir olayı kendilerine alabilirken yalnızca kendilerine atanmış olayların durumunu değiştirebilmekte ve bu olaylara yorum ekleyebilmektedir. Yönetici kullanıcıların ise bütün olayları görüntüleyebilmesini ve olayları geçerli analist hesaplarına atayabilmesini sağladım. Yetkisiz erişimlerde kayıtların varlığını açığa çıkarmayan güvenli hata yanıtları kullandım.<\/p>

                                                                                                                                                                                                                                                                                                                Durum Geçişleri, Yarış Koruması ve Audit<\/h3>

                                                                                                                                                                                                                                                                                                                Olayların OPEN, IN_PROGRESS, RESOLVED ve FALSE_POSITIVE durumları arasında yalnızca izin verilen geçişlerle ilerlemesini sağlayan bir durum geçiş yapısı geliştirdim. Geçersiz geçişleri sistem tarafından reddettim. Aynı olayın iki analist tarafından eş zamanlı olarak sahiplenilmeye çalışılması durumunda oluşabilecek yarış koşulunu önlemek için veritabanı satır kilidi kullandım. Böylece ilk işlemin başarılı olmasını, ikinci işlemin ise kontrollü bir çakışma yanıtı almasını sağladım. Olay oluşturma, atama, durum değiştirme ve yorum ekleme işlemlerini audit kayıtlarıyla izlenebilir hâle getirdim. Hassas yorum ve dosya içeriklerinin audit kayıtlarına yazılmasını engelledim.<\/p>

                                                                                                                                                                                                                                                                                                                API, Test ve Sonuç<\/h3>

                                                                                                                                                                                                                                                                                                                Olay oluşturma, olayları filtreleyerek listeleme, detay görüntüleme, güncelleme ve yorum ekleme API uç noktalarını geliştirdim. Olay ve yorum silme işlemlerini güvenlik ve veri bütünlüğü nedeniyle kapsam dışında bıraktım. README ile veritabanı, API ve makine öğrenmesi mimari belgelerini gerçek uygulamayla uyumlu şekilde güncelledim. Model, servis, API, yetkilendirme ve eş zamanlı işlem senaryolarını kapsayan toplam 417 otomatik test sıfır hata ve sıfır uyarıyla başarıyla tamamlandı.<\/p>


                                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                                <\/h1>

                                                                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                1. <\/span>[12:54] (09c57b3) feat(incidents):<\/strong> add incident models and migration<\/li>
                                                                                                                                                                                                                                                                                                                2. <\/span>[13:15] (87d4d6b) feat(incidents):<\/strong> implement incident management services<\/li>
                                                                                                                                                                                                                                                                                                                3. <\/span>[13:27] (ff37dfd) fix(incidents):<\/strong> return conflict for competing incident claims<\/li>
                                                                                                                                                                                                                                                                                                                4. <\/span>[13:49] (1a6e676) feat(api):<\/strong> add incident management endpoints<\/li>
                                                                                                                                                                                                                                                                                                                5. <\/span>[14:03] (c98cac3) chore(incidents): <\/strong>remove trailing whitespace<\/li>
                                                                                                                                                                                                                                                                                                                6. <\/span>[14:24] (9ba72dd) docs(incidents): <\/strong>document incident management workflow<\/li>
                                                                                                                                                                                                                                                                                                                7. <\/span>[16:21] (f9b01143) docs(diary): <\/strong>add day 12 internship entry<\/li><\/ol>\n\n--- DAY 13 (2026-07-30) ---\n

                                                                                                                                                                                                                                                                                                                  Gün 13 – Frontend Temeli, Güvenli Kimlik Doğrulama ve Uygulama Kabuğu<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                  React, TypeScript ve Frontend Altyapısı<\/strong><\/h3>

                                                                                                                                                                                                                                                                                                                  Bugün SecureWatch AI projesinin frontend altyapısını oluşturdum. React, TypeScript ve Vite kullanarak temel proje yapısını hazırladım. Tailwind CSS’i projeye ekleyerek responsive tasarım için kullanılacak stil altyapısını kurdum. TypeScript type-check, ESLint, Vitest ve React Testing Library yapılandırmalarını tamamladım. Geliştirme, test, lint, type-check ve production build işlemleri için gerekli npm komutlarını hazırladım. Derleme çıktıları, bağımlılık klasörleri, test kapsamı dosyaları ve ortam dosyalarının Git tarafından takip edilmesini engelleyen kuralları ekledim.<\/p>

                                                                                                                                                                                                                                                                                                                  Marka Tasarımı ve Responsive Login<\/strong><\/h3>

                                                                                                                                                                                                                                                                                                                  SecureWatch AI için daha önce hazırlanan logo ve marka varlıklarını frontend projesine aktardım. Koyu lacivert, mavi, turkuaz ve açık renklerden oluşan tasarım sistemini Tailwind CSS tema değişkenleriyle tanımladım. Bu tasarım yapısını kullanarak masaüstü, tablet ve mobil ekranlarda çalışan responsive bir giriş sayfası geliştirdim. Kullanıcı adı ve parola alanlarını erişilebilir etiketler, doğru autocomplete özellikleri ve klavye kullanımına uygun odak sırasıyla hazırladım. Form gönderilirken butonun yüklenme durumuna geçmesini ve tekrarlanan giriş isteklerinin engellenmesini sağladım. Parola alanındaki içeriğin ekranda maskeli biçimde gösterilmesini korudum.<\/p>

                                                                                                                                                                                                                                                                                                                  API Client, Authentication ve Güvenli Yönlendirme<\/strong><\/h3>

                                                                                                                                                                                                                                                                                                                  Backend ile iletişim kurmak için native Fetch API kullanan tip güvenli bir API istemcisi geliştirdim. Başarılı yanıtları ve backend’in iç içe hata yapısını güvenli biçimde işleyen özel bir hata modeli hazırladım. Kullanıcıya teknik bağlantı ayrıntıları yerine anlaşılır Türkçe hata mesajları gösterilmesini sağladım. Authentication bilgilerini yöneten AuthProvider yapısını oluşturdum. Access token yalnızca React belleğinde tutuldu; localStorage, sessionStorage veya cookie kullanılmadı. React Router ile giriş sayfası, korumalı ana sayfa ve bilinmeyen adresler için güvenli yönlendirmeler hazırladım. Giriş yapmayan kullanıcıların korumalı sayfalara erişmesini, dış adreslere yönlendirme yapılmasını ve güvenli olmayan dönüş adreslerinin kullanılmasını engelledim.<\/p>

                                                                                                                                                                                                                                                                                                                  Test, Tarayıcı Doğrulaması ve Sonuç<\/strong><\/h3>

                                                                                                                                                                                                                                                                                                                  API istemcisi, authentication durumu, giriş ekranı, route korumaları, güvenli yönlendirmeler ve marka bileşenleri için otomatik testler geliştirdim. Toplam 9 test dosyasında 69 test sıfır hata ve sıfır atlama ile başarıyla tamamlandı. TypeScript, ESLint, production build ve npm güvenlik kontrolleri hatasız sonuçlandı. Giriş ekranını masaüstü, tablet ve mobil çözünürlüklerde gerçek tarayıcı üzerinden kontrol ettim. Yatay taşma, bileşen çakışması veya klavye erişilebilirliği problemi görülmedi. README ve frontend dokümantasyonunu güncel uygulama yapısıyla uyumlu hâle getirdim. Analiz ekranları, tespit sonuçları, olay yönetimi arayüzü ve dashboard çalışmalarını sonraki günlerin kapsamına bıraktım.<\/p>


                                                                                                                                                                                                                                                                                                                  <\/h1>

                                                                                                                                                                                                                                                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                  1. <\/span>[11:58] (1ff4120) chore(frontend): scaffold React TypeScript application<\/li>
                                                                                                                                                                                                                                                                                                                  2. <\/span>[12:34] (010e4db) chore(frontend): configure ESLint validation<\/li>
                                                                                                                                                                                                                                                                                                                  3. <\/span>[12:48] (e7c29fb) feat(frontend): add SecureWatch design foundation<\/li>
                                                                                                                                                                                                                                                                                                                  4. <\/span>[12:57] (4fb65c6) chore(frontend): narrow SVG whitespace exception<\/li>
                                                                                                                                                                                                                                                                                                                  5. <\/span>[13:05] (e933c90) feat(frontend): add api client and auth state<\/li>
                                                                                                                                                                                                                                                                                                                  6. <\/span>[13:14] (110ba48) fix(auth): complete frontend authentication infrastructure<\/li>
                                                                                                                                                                                                                                                                                                                  7. <\/span>[13:41] (bd7f217) feat(auth): implement responsive login page<\/li>
                                                                                                                                                                                                                                                                                                                  8. <\/span>[14:21] (bf023ed) feat(routing): add protected application shell<\/li>
                                                                                                                                                                                                                                                                                                                  9. <\/span>[16:18] (9446b74) fix(frontend): resolve visual validation issues<\/li>
                                                                                                                                                                                                                                                                                                                  10. <\/span>[16:29] (0f29889) docs(frontend): document frontend foundation<\/li>
                                                                                                                                                                                                                                                                                                                  11. <\/span>[16:29] (0853dd8) docs(diary): add day 13 internship entry<\/li>
                                                                                                                                                                                                                                                                                                                  12. <\/span>[17:07] (102fe27) docs(frontend): correct Node.js requirement<\/li>
                                                                                                                                                                                                                                                                                                                  13. <\/span>[17:18] (5c6249e) chore(sync): merge latest main into frontend branch<\/li><\/ol>\n\n--- DAY 14 (2026-07-31) ---\n

                                                                                                                                                                                                                                                                                                                    Gün 14 – Analiz Ekranları ve Güvenli CSV İş Akışı<\/strong><\/h3>

                                                                                                                                                                                                                                                                                                                    Analiz API İstemcisi ve Tip Tanımları<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                    Bugün SecureWatch AI projesinde analiz iş akışını frontend tarafına taşıdım. Backend’de bulunan CSV yükleme, analiz başlatma, analiz geçmişini listeleme ve analiz detayını görüntüleme uç noktalarını inceleyerek bunlarla uyumlu TypeScript tiplerini oluşturdum. Native fetch tabanlı API istemcisini FormData desteğiyle genişlettim. CSV yükleme isteklerinde tarayıcının multipart sınırını güvenli biçimde oluşturmasını sağladım. Kimlik doğrulama tokenının yalnızca Authorization başlığında gönderilmesini ve hata yanıtlarının güvenli ApiError yapısına dönüştürülmesini korudum.<\/p>

                                                                                                                                                                                                                                                                                                                    Güvenli CSV Yükleme Ekranı<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                    Yalnızca ANALYST rolündeki kullanıcıların kullanabildiği, sürükle-bırak ve dosya seçme yöntemlerini destekleyen CSV yükleme formunu geliştirdim. Dosya uzantısı, boş dosya ve 50 MB boyut sınırı kontrollerini istemci tarafında uyguladım. Tekrarlı gönderimleri eş zamanlı kilitle engelledim ve bileşen kapandığında devam eden istekleri AbortController ile iptal ettim. ADMIN kullanıcıları için yükleme alanını gizleyerek yalnızca analiz geçmişinin görüntülenmesini sağladım. Böylece arayüzdeki rol davranışlarını backend yetkilendirme kurallarıyla uyumlu hâle getirdim.<\/p>

                                                                                                                                                                                                                                                                                                                    Analiz Yürütme ve Geçmiş Takibi<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                    Yüklenen AnalysisJob kaydını PENDING, PROCESSING, COMPLETED ve FAILED durumlarıyla izleyen analiz yürütme panelini hazırladım. Kullanıcının analizi manuel olarak başlatabilmesini ve işlem tamamlandığında işlenen kayıt sayısını güvenli biçimde görüntüleyebilmesini sağladım. Polling kullanmadan backend’in senkron yanıtına göre arayüz durumunu güncelledim. Durum filtresi, yenileme ve skip\/limit tabanlı sayfalama içeren analiz geçmişi bileşenini ekledim. Eski yanıtların yeni ekran durumunu bozmasını önlemek amacıyla stale-response ve unmount korumaları uyguladım.<\/p>

                                                                                                                                                                                                                                                                                                                    Routing, Erişilebilirlik ve Güvenli Hata Yönetimi<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                    Analiz ekranını \/analysis<\/code> rotasında ProtectedRoute ve mevcut uygulama kabuğuna bağladım. Oturum bilgilerini tarayıcı depolamasına yazmadan yalnızca React belleğinde tutan yapı korundu. Sayfayı 320 piksel genişliğe kadar responsive hazırladım. Semantik HTML, focus-visible, role=\"status\", role=\"alert\" ve aria-live bölgeleri kullandım. Backend’den gelen MODEL_NOT_FOUND ve DUPLICATE_FILE hatalarını teknik kod, dosya yolu, hash veya stack trace göstermeden anlaşılır Türkçe mesajlara dönüştürdüm.<\/p>

                                                                                                                                                                                                                                                                                                                    Test ve Sonuç<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                    API istemcisi, CSV doğrulama, rol davranışları, analiz başlatma, geçmiş yenileme ve hata maskeleme işlemleri için testler yazdım. Toplam 14 test dosyasında 141 frontend testi ve 354 backend regresyon testi başarıyla tamamlandı. Type-check ve ESLint sıfır hatayla geçti, production build başarıyla oluşturuldu ve npm audit sonucunda yüksek veya kritik güvenlik açığı bulunmadı. Gerçek Chrome tarayıcısında ANALYST ve ADMIN görünümlerini, responsive düzeni ve duplicate dosya mesajını doğruladım. Kalıcı model, gerçek veri seti, dashboard, incident arayüzü veya bildirim sistemi eklemedim.<\/p>


                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                    Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                    1. <\/span>[15:09] (a4b1243) feat(analysis): implement AnalysisJob types and API client functions<\/li>
                                                                                                                                                                                                                                                                                                                    2. <\/span>[15:20] (3ae406c) feat(analysis): add secure CSV upload form and file validation<\/li>
                                                                                                                                                                                                                                                                                                                    3. <\/span>[15:34] (249953f) fix(analysis): harden CSV upload lifecycle and test coverage<\/li>
                                                                                                                                                                                                                                                                                                                    4. <\/span>[15:44] (917f944) feat(analysis): implement analysis execution and status tracking<\/li>
                                                                                                                                                                                                                                                                                                                    5. <\/span>[16:01] (3a416ea) fix(analysis): resolve execution panel audit findings<\/li>
                                                                                                                                                                                                                                                                                                                    6. <\/span>[16:14] (7a9a63e) feat(analysis): implement analysis history list component with secure status tracking and pagination<\/li>
                                                                                                                                                                                                                                                                                                                    7. <\/span>[17:14] (e742921) fix(analysis): resolve history list audit findings<\/li>
                                                                                                                                                                                                                                                                                                                    8. <\/span>[17:25] (5af1ac3) feat(routing): integrate analysis screens into application shell<\/li>
                                                                                                                                                                                                                                                                                                                    9. <\/span>[17:42] (35a1a0e) fix(ui): address analysis integration audit findings<\/li>
                                                                                                                                                                                                                                                                                                                    10. <\/span>[19:36] (0ffef61) fix(analysis): map model availability errors safely<\/li>
                                                                                                                                                                                                                                                                                                                    11. <\/span>[20:05] (3abc740) fix(analysis): map duplicate upload errors safely<\/li>
                                                                                                                                                                                                                                                                                                                    12. <\/span>[12:50] (8b98686) docs(frontend): document analysis screens workflow<\/li>
                                                                                                                                                                                                                                                                                                                    13. <\/span>[12:51] (2f64d8f) docs(diary): add day 14 internship entry<\/li>
                                                                                                                                                                                                                                                                                                                    14. <\/span>[12:58] (56c6d39) docs(diary): refine day 14 internship entry<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                      <\/p>\n\n--- DAY 15 (2026-08-03) ---\n

                                                                                                                                                                                                                                                                                                                      Gün 15 – Tespit Sonuçları, Oturum Kalıcılığı ve Son Doğrulamalar<\/h3>

                                                                                                                                                                                                                                                                                                                      Tespit Sonuçları ve Model Yolu Düzenlemeleri<\/h4>

                                                                                                                                                                                                                                                                                                                      Bugün SecureWatch AI projesinde tamamlanan analizlerin sonuçlarını kullanıcıya sunan tespit sonuçları ekranı üzerinde çalıştım. Backend’den gelen analiz verilerini tip güvenli API istemcisiyle alarak özet kartları, sonuç listesi, saldırı olasılığı ve risk seviyesi bilgilerini arayüzde gösterdim. Normal ve saldırı olarak sınıflandırılan kayıtların anlaşılır biçimde ayrılmasını sağladım. Kullanıcıların tahmin ve risk seviyesine göre filtreleme yapabilmesi, sonuçlar arasında önceki ve sonraki sayfa düğmeleriyle gezinebilmesi için gerekli yapıları tamamladım. Ayrıca model paketinin çalışma dizinine bağlı olmadan doğru şekilde backend\/app\/ml_models<\/code> klasöründen yüklenmesini sağlayan yol düzenlemelerini ve ilgili testleri gerçekleştirdim.<\/p>

                                                                                                                                                                                                                                                                                                                      Metin Kontrastı ve Kullanıcı Deneyimi<\/h4>

                                                                                                                                                                                                                                                                                                                      Chrome kontrollerinde koyu arka plan üzerindeki bazı açıklamaların, filtre etiketlerinin ve sonuç kartı metinlerinin yeterince okunaklı olmadığı görüldü. Sayfa başlığı, açıklama metni, özet kartı etiketleri, filtre başlıkları, CSV satırı, tahmin, saldırı olasılığı, risk seviyesi ve oluşturulma zamanı alanlarında kullanılan renkleri mevcut tasarım sistemiyle uyumlu daha açık tonlarla güncelledim. Kart yapısını, filtreleme mantığını ve sayfalama davranışını değiştirmedim. Normal, saldırı ve risk renklerinin anlamlarını korudum. Ardından metinlerin okunabilirliğini, düğmelerin aktif-pasif durumlarını ve klavye odak göstergelerini gerçek tarayıcıda doğruladım.<\/p>

                                                                                                                                                                                                                                                                                                                      Oturum Kalıcılığı ve Güvenli Yönlendirme<\/h4>

                                                                                                                                                                                                                                                                                                                      Access token ve kullanıcı bilgileri yalnızca React belleğinde tutulduğu için sayfa yenilendiğinde oturum kayboluyordu. Bu sorunu çözmek amacıyla authentication bilgilerini aynı tarayıcı sekmesi boyunca sessionStorage<\/code> içerisinde saklayacak şekilde AuthProvider yapısını güncelledim. Sayfa yenilendiğinde veya sonuç bağlantısı doğrudan açıldığında oturum bilgilerinin ilk render sırasında geri yüklenmesini sağladım. Eksik veya bozuk oturum verilerinin uygulamayı çökertmeden temizlenmesini ve bilgilerden yalnızca biri varsa kullanıcının giriş yapmış kabul edilmemesini sağladım. Çıkış yapıldığında React state ve sessionStorage<\/code> içindeki bütün oturum bilgilerinin temizlenmesini korudum.<\/p>

                                                                                                                                                                                                                                                                                                                      Test, Tarayıcı Doğrulaması ve Sonuç<\/h4>

                                                                                                                                                                                                                                                                                                                      Frontend tarafında type-check, ESLint, production build ve güvenlik denetimleri başarıyla tamamlandı. Toplam 18 frontend test dosyasında 251 test sıfır hata, uyarı ve atlama ile geçti. Backend tarafında model yolu testlerinin yanında tam test paketi çalıştırıldı ve 359 test başarıyla tamamlandı. Gerçek analiz sonuç sayfasında yenileme, doğrudan URL erişimi, sonuçların yeniden yüklenmesi, geçersiz analiz kimliği ve çıkış sonrası korumalı rotaya erişim senaryolarını Chrome üzerinden doğruladım. Manuel kontrollerde oturum kaybı, gereksiz giriş yönlendirmesi, ekran bozulması veya metin kontrastı problemi görülmedi. Gün sonunda tespit sonuçları ve oturum kalıcılığı çalışmaları incelemeye hazır hâle getirildi.<\/p>


                                                                                                                                                                                                                                                                                                                      <\/p>


                                                                                                                                                                                                                                                                                                                      <\/p>


                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                      1. <\/span>[11:15] (346b957) feat(detections): add typed results API client<\/li>
                                                                                                                                                                                                                                                                                                                      2. <\/span>[11:28] (16739a0) feat(detections): add accessible analysis summary panel<\/li>
                                                                                                                                                                                                                                                                                                                      3. <\/span>[11:39] (c9e1e2f) feat(detections): add filterable results list<\/li>
                                                                                                                                                                                                                                                                                                                      4. <\/span>[11:51] (586d125) fix(detections): remove trailing whitespace<\/li>
                                                                                                                                                                                                                                                                                                                      5. <\/span>[11:58] (7351915) test(detections): eliminate async act warnings<\/li>
                                                                                                                                                                                                                                                                                                                      6. <\/span>[12:11] (6eb1032) fix(detections): remove summary panel trailing whitespace<\/li>
                                                                                                                                                                                                                                                                                                                      7. <\/span>[12:46] (e229f75) test(analysis): eliminate history list act warning<\/li>
                                                                                                                                                                                                                                                                                                                      8. <\/span>[12:53] (9221074) test(analysis): eliminate upload form act warnings<\/li>
                                                                                                                                                                                                                                                                                                                      9. <\/span>[13:03] (f02f25a) test(analysis): eliminate execution panel act warnings<\/li>
                                                                                                                                                                                                                                                                                                                      10. <\/span>[13:12] (80d54db) feat(detections): compose detection results page<\/li>
                                                                                                                                                                                                                                                                                                                      11. <\/span>[13:19] (6b1772e) feat(routing): add protected detection results route<\/li>
                                                                                                                                                                                                                                                                                                                      12. <\/span>[13:27] (8cc2d6d) feat(analysis): link completed jobs to detection results<\/li>
                                                                                                                                                                                                                                                                                                                      13. <\/span>[13:34] (88e2c0d) feat(analysis): link completed execution to detection results<\/li>
                                                                                                                                                                                                                                                                                                                      14. <\/span>[15:41] (96ce516) chore(security): ignore local model artifacts<\/li>
                                                                                                                                                                                                                                                                                                                      15. <\/span>[16:05] (4748b28) fix(config): resolve model package path from backend root<\/li>
                                                                                                                                                                                                                                                                                                                      16. <\/span>[16:41] (c4ed630) test(training): isolate model artifact side-effect assertion<\/li>
                                                                                                                                                                                                                                                                                                                      17. <\/span>[17:27] (1e2f1a0) fix(detections): improve results text contrast<\/li>
                                                                                                                                                                                                                                                                                                                      18. <\/span>[18:40] (a091b89) fix(auth): preserve session across page reloads<\/li>
                                                                                                                                                                                                                                                                                                                      19. <\/span>[19:12] (3dcd187) style(tests): remove baseline test trailing whitespace<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                        <\/p>\n\n--- DAY 16 (2026-08-04) ---\n

                                                                                                                                                                                                                                                                                                                        Gün 16 – Güvenli Olay Yönetimi Arayüzü ve İş Akışı<\/h2>

                                                                                                                                                                                                                                                                                                                        Olay Yönetimi Backend ve Frontend Entegrasyonu<\/h3>

                                                                                                                                                                                                                                                                                                                        Bugün SecureWatch AI projesinde güvenlik tespitlerinin olay kaydına dönüştürülmesini ve oluşturulan olayların yönetilmesini sağlayan olay yönetimi modülü üzerinde çalıştım. Öncelikle güncel ana dalda eksik olan olay yönetimi backend yapısını projeye yeniden entegre ettim. Olay modelleri, yorum modeli, veritabanı migration dosyası, şemalar, servis katmanı ve API endpointlerini mevcut sistemle uyumlu hâle getirdim. Frontend tarafında olay verileri için TypeScript tipleri, çalışma zamanı doğrulayıcıları ve güvenli API istemcileri oluşturdum.<\/p>

                                                                                                                                                                                                                                                                                                                        Analiz sonucunda saldırı olarak belirlenen kayıtların kullanıcı tarafından olaya dönüştürülebilmesini sağladım. Olay başlığı, açıklaması ve önem seviyesi bilgilerinin girilebildiği formu geliştirdim. Aynı tespit kaydından tekrar olay oluşturulmasını engelleyen kontroller ekledim. Olayların durum, önem seviyesi ve atanan analist bilgilerine göre filtrelenmesini ve sayfalar arasında güvenli şekilde gezilebilmesini sağladım.<\/p>

                                                                                                                                                                                                                                                                                                                        Olay Detayı, Analist İşlemleri ve Yorum Sistemi<\/h3>

                                                                                                                                                                                                                                                                                                                        Olay detay sayfasında olay başlığı, açıklaması, durumu, önem seviyesi, oluşturulma zamanı, atanan analist ve yorum geçmişi bilgilerinin görüntülenmesini sağladım. Güvenlik analistinin atanmamış bir olayı üzerine alabilmesi, incelemeyi başlatabilmesi, yorum ekleyebilmesi ve olayı çözüldü veya yanlış pozitif olarak kapatabilmesi için gerekli işlem alanlarını geliştirdim.<\/p>

                                                                                                                                                                                                                                                                                                                        Geri alınamayacak durum değişikliklerinde kullanıcıya sayfa içerisinde erişilebilir bir onay alanı gösterilmesini sağladım. Yorum formunda boş veri gönderimi, tekrar gönderim, eski API yanıtı ve istek iptali gibi durumlara karşı güvenlik kontrolleri ekledim. Yönetici kullanıcıların olayları yalnızca analist rolündeki kullanıcılara atayabilmesi için ayrı bir analist atama arayüzü hazırladım.<\/p>

                                                                                                                                                                                                                                                                                                                        Yönlendirme, Yetkilendirme ve Manuel Kontroller<\/h3>

                                                                                                                                                                                                                                                                                                                        Olay listesi ve olay detay sayfalarını korumalı rotalara bağladım. Giriş yapmamış kullanıcıların olay bilgileri gösterilmeden giriş ekranına yönlendirilmesini sağladım. Analist ve yönetici rollerinin yalnızca yetkili oldukları işlem alanlarını görebilmesini korudum.<\/p>

                                                                                                                                                                                                                                                                                                                        Chrome üzerinden saldırı tespitinin olaya dönüştürülmesi, olayın analist tarafından üzerine alınması, incelemenin başlatılması, yorum eklenmesi, olayın çözüldü olarak kapatılması ve filtrelenmesi senaryolarını doğruladım. Ayrıca çıkış sonrasında korumalı olay sayfalarına erişimin engellendiğini kontrol ettim.<\/p>

                                                                                                                                                                                                                                                                                                                        Test, Kalite Kontrolleri ve Sonuç<\/h3>

                                                                                                                                                                                                                                                                                                                        Frontend tarafında toplam 28 test dosyasında 518 test başarıyla geçti. TypeScript type-check, ESLint, production build ve güvenlik denetimleri sıfır hata ve uyarıyla tamamlandı. React testlerinde görülen asenkron act<\/code> uyarılarını giderdim. Backend tarafında 422 test başarıyla geçti; Python derleme, bağımlılık ve migration kontrolleri tamamlandı.<\/p>


                                                                                                                                                                                                                                                                                                                        <\/p>


                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                        1. <\/span>[11:48] (1a106dd) fix(incidents): restore missing backend workflow<\/li>
                                                                                                                                                                                                                                                                                                                        2. <\/span>[12:13] (39d3b8c) fix(deps): resolve brace-expansion vulnerability<\/li>
                                                                                                                                                                                                                                                                                                                        3. <\/span>[12:18] (8ccdbc4) feat(incidents): add typed frontend API client<\/li>
                                                                                                                                                                                                                                                                                                                        4. <\/span>[13:24] (ad2a562) feat(incidents): add detection conversion form<\/li>
                                                                                                                                                                                                                                                                                                                        5. <\/span>[13:39] (66b110f) feat(incidents): add filterable incident list<\/li>
                                                                                                                                                                                                                                                                                                                        6. <\/span>[13:52] (e379f12) feat(incidents): add incident detail view<\/li>
                                                                                                                                                                                                                                                                                                                        7. <\/span>[14:22] (d071b52) test(incidents): remove explicit any from detail test<\/li>
                                                                                                                                                                                                                                                                                                                        8. <\/span>[14:38] (66d7545) feat(incidents): add claim and status controls<\/li>
                                                                                                                                                                                                                                                                                                                        9. <\/span>[16:05] (01aab83) refactor(incidents): tighten action control typing<\/li>
                                                                                                                                                                                                                                                                                                                        10. <\/span>[16:22] (7899dd7) feat(incidents): add secure comment form<\/li>
                                                                                                                                                                                                                                                                                                                        11. <\/span>[16:41] (6e7c8f0) test(incidents): fix comment form test typing<\/li>
                                                                                                                                                                                                                                                                                                                        12. <\/span>[16:52] (fe07c91) refactor(incidents): remove state updates from effects<\/li>
                                                                                                                                                                                                                                                                                                                        13. <\/span>[23:30] (4e31468) feat(incidents): add admin analyst assignment<\/li>
                                                                                                                                                                                                                                                                                                                        14. <\/span>[23:44] (730dd62) feat(routing): integrate incident management workflow<\/li>
                                                                                                                                                                                                                                                                                                                        15. <\/span>[23:54] (37608cf) refactor(incidents): fix assignment panel lifecycle<\/li>
                                                                                                                                                                                                                                                                                                                        16. <\/span>[00:23] (ee83918) test(incidents): cover comment textarea rerender<\/li>
                                                                                                                                                                                                                                                                                                                        17. <\/span>[13:14] (423b56a) test(incidents): eliminate async act warnings<\/li><\/ol>\n\n--- DAY 17 (2026-08-05) ---\n

                                                                                                                                                                                                                                                                                                                          Gün 17 – Güvenli Dashboard ve Raporlama<\/h2>

                                                                                                                                                                                                                                                                                                                          Dashboard Backend Servisi ve API Entegrasyonu<\/h3>

                                                                                                                                                                                                                                                                                                                          Bugün SecureWatch AI projesinde analiz, güvenlik tespiti ve olay verilerini tek ekranda özetleyen dashboard modülü üzerinde çalıştım. Gerçek veritabanı kayıtlarından analiz durumlarını, tespit sayılarını, risk seviyelerini ve olay bilgilerini hesaplayan backend servisini geliştirdim. Sayım ve gruplandırma işlemlerini SQLAlchemy sorgularıyla veritabanı seviyesinde gerçekleştirdim.<\/p>

                                                                                                                                                                                                                                                                                                                          Dashboard verilerini frontend’e aktarmak için \/api\/v1\/dashboard\/summary<\/code> endpointini oluşturdum. Endpointi kimlik doğrulama ve rol tabanlı yetkilendirme sistemine bağlayarak yalnızca yönetici ve güvenlik analistlerinin erişebilmesini sağladım. API yanıtlarında hassas kullanıcı bilgilerine yer vermedim ve veritabanında bulunmayan bilgiler için sahte veri üretmedim.<\/p>

                                                                                                                                                                                                                                                                                                                          Tip Güvenli Frontend ve Dashboard Arayüzü<\/h3>

                                                                                                                                                                                                                                                                                                                          Frontend tarafında TypeScript tiplerini, veri doğrulayıcılarını ve güvenli API istemcisini geliştirdim. Eksik veya hatalı verilerin arayüze ulaşmasını engelledim. İptal edilen isteklerin ve eski API yanıtlarının sayfa durumunu bozmasını önleyen kontroller ekledim.Dashboard ekranında toplam analiz, tespit, saldırı ve olay sayılarını gösteren özet kartları hazırladım. Recharts kullanarak tespit dağılımı, risk seviyesi, olay durumu, önem seviyesi ve son yedi günlük eğilim grafiklerini oluşturdum. Veri bulunmayan bölümler için anlaşılır boş durum mesajları ekledim.<\/p>

                                                                                                                                                                                                                                                                                                                          Son Güvenlik Etkinlikleri ve Responsive Tasarım<\/h3>

                                                                                                                                                                                                                                                                                                                          Son tespitleri ve olayları gösteren güvenlik etkinlikleri alanını geliştirdim. Kartları ilgili analiz sonucu ve olay detay sayfalarına bağladım. Dashboard sayfasını korumalı \/dashboard<\/code> rotasına ekledim ve üst menüye Panel bağlantısını yerleştirdim. Giriş yapmamış kullanıcıların giriş ekranına yönlendirilmesini sağladım.Mobil testlerde tespit edilen yatay taşma problemini giderdim. Panel, Analiz, Olaylar, kullanıcı bilgisi ve Çıkış alanlarının 320 piksel genişlikte kullanılabilir kalmasını sağladım. Kartların, grafiklerin ve listelerin mobil ekranlarda taşmadığını doğruladım.<\/p>

                                                                                                                                                                                                                                                                                                                          Test, Manuel Kontroller ve Sonuç<\/h3>

                                                                                                                                                                                                                                                                                                                          Backend tarafında 499, frontend tarafında 783 test başarıyla geçti. TypeScript kontrolü, ESLint, production build ve güvenlik denetimleri hatasız tamamlandı. Testlerdeki tip problemlerini ve asenkron uyarıları giderdim.<\/p>

                                                                                                                                                                                                                                                                                                                          Chrome üzerinden yönetici ve güvenlik analisti hesaplarıyla masaüstü, mobil, klavye kullanımı, sayfa yenileme, navigasyon ve çıkış senaryolarını kontrol ettim. Gün sonunda dashboard ve raporlama modülünü gerçek verilerle çalışan, güvenli, erişilebilir ve responsive bir yapıda incelemeye hazır hâle getirdim.<\/p>


                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                          1. <\/span>[14:22] (b2930e8) feat(dashboard): add aggregation service and schemas<\/li>
                                                                                                                                                                                                                                                                                                                          2. <\/span>[14:27] (4f65df0) test(dashboard): expand aggregation service coverage<\/li>
                                                                                                                                                                                                                                                                                                                          3. <\/span>[14:36] (1970dc3) feat(dashboard): expose authenticated summary endpoint<\/li>
                                                                                                                                                                                                                                                                                                                          4. <\/span>[14:44] (7dbabb5) feat(dashboard): add typed frontend API client<\/li>
                                                                                                                                                                                                                                                                                                                          5. <\/span>[15:00] (f963aa2) chore(frontend): add recharts dashboard dependency<\/li>
                                                                                                                                                                                                                                                                                                                          6. <\/span>[15:02] (7fd8e88) feat(dashboard): add summary page foundation<\/li>
                                                                                                                                                                                                                                                                                                                          7. <\/span>[15:13] (ac77fe9) fix(dashboard): add empty state and component coverage<\/li>
                                                                                                                                                                                                                                                                                                                          8. <\/span>[15:24] (45b429d) feat(dashboard): add responsive security charts<\/li>
                                                                                                                                                                                                                                                                                                                          9. <\/span>[15:33] (624352e) feat(dashboard): add recent security activity<\/li>
                                                                                                                                                                                                                                                                                                                          10. <\/span>[15:45] (656a592) test(dashboard): complete recent activity coverage<\/li>
                                                                                                                                                                                                                                                                                                                          11. <\/span>[16:05] (a83a7ec) refactor(dashboard): resolve production lint errors<\/li>
                                                                                                                                                                                                                                                                                                                          12. <\/span>[16:15] (b1a4f3c) test(dashboard): remove explicit any from test fixtures<\/li>
                                                                                                                                                                                                                                                                                                                          13. <\/span>[16:29] (9f9dda7) test(dashboard): fix build-time fixture typings<\/li>
                                                                                                                                                                                                                                                                                                                          14. <\/span>[16:34] (cf7049c) feat(dashboard): add protected route and navigation<\/li>
                                                                                                                                                                                                                                                                                                                          15. <\/span>[16:38] (555919a) test(dashboard): complete route navigation coverage<\/li>
                                                                                                                                                                                                                                                                                                                          16. <\/span>[18:23] (551d974) fix(dashboard): resolve mobile navigation overflow<\/li>
                                                                                                                                                                                                                                                                                                                          17. <\/span>[18:39] (7600011) docs(diary): add day 17 internship entry<\/li><\/ol>\n\n--- DAY 18 (2026-08-06) ---\n


                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                            Gün 18 – Güvenlik Doğrulamaları, Test Regresyonu ve Marka Entegrasyonu<\/h2>

                                                                                                                                                                                                                                                                                                                            Backend Regresyon Testleri ve Sistem Bütünlüğü<\/h3>

                                                                                                                                                                                                                                                                                                                            Bugün SecureWatch AI projesinde kimlik doğrulama, analiz, saldırı tespiti, olay yönetimi ve dashboard modüllerinin birlikte güvenli çalıştığını doğruladım. Backend tarafında 499 testin tamamı başarıyla geçti. Kaynak kodu, bağımlılıklar ve Alembic migration yapısı kontrol edildi; veritabanı şemasının güncel ve tek head<\/code> yapısında olduğu doğrulandı. Güvenlik ve kimlik doğrulama senaryolarını kapsayan 212 kritik test de hatasız tamamlandı.<\/p>

                                                                                                                                                                                                                                                                                                                            Güvenlik Kontrolleri<\/h3>

                                                                                                                                                                                                                                                                                                                            JWT doğrulaması, parola güvenliği ve ADMIN ile ANALYST rollerine ait yetkilendirme kontrollerini yeniden test ettim. Yetkisiz erişimlerin 401<\/code> ve 403<\/code> yanıtlarıyla engellendiğini doğruladım. CSV yükleme sürecinde dosya türü, kodlama ve sütun yapısı kontrolleri incelendi. Path traversal saldırılarının engellendiği, SHA-256 özetiyle tekrar yüklemenin önlendiği, hata durumlarında rollback çalıştığı ve API yanıtlarında hassas bilgi bulunmadığı doğrulandı.<\/p>

                                                                                                                                                                                                                                                                                                                            Frontend ve Arayüz İyileştirmeleri<\/h3>

                                                                                                                                                                                                                                                                                                                            Frontend tarafındaki 791 testin tamamı başarıyla geçti. TypeScript ve ESLint kontrolleri sıfır hata ve uyarıyla tamamlandı. Oturum yönetimi, korumalı rotalar, analiz, olay yönetimi ve dashboard özelliklerinin bozulmadığını doğruladım. Büyük logo, navigasyon taşması ve mobil yerleşim sorunlarını giderdim. Login ekranı, header, analiz kartları, olay listesi, yorum formu ve dashboard etkinlik alanlarını daha düzenli ve profesyonel hâle getirdim.<\/p>

                                                                                                                                                                                                                                                                                                                            Marka Kimliği ve Responsive Tasarım<\/h3>

                                                                                                                                                                                                                                                                                                                            SecureWatch AI için hazırlanan açık ve koyu temalı logo setini giriş ekranına, üst menüye ve README dosyasına entegre ettim. Farklı boyutlarda favicon ve Apple Touch Icon dosyaları ekledim. Masaüstü, tablet ve 320 × 568<\/code> piksel mobil görünüm kontrollerinde navigasyonun, kullanıcı bilgilerinin, olay detaylarının ve formların yatay taşma oluşturmadan çalıştığını doğruladım.<\/p>

                                                                                                                                                                                                                                                                                                                            Production Build ve Sonuç<\/h3>

                                                                                                                                                                                                                                                                                                                            Vite production build işlemi başarıyla tamamlandı. Yalnızca JavaScript paket boyutuyla ilgili bilinen teknik borç uyarısı alındı. npm audit<\/code> sonucunda herhangi bir güvenlik açığı bulunmadı. Repository içerisinde .env<\/code>, özel anahtar, JWT secret, veritabanı veya geçici test dosyası bulunmadığını kontrol ettim. Gün sonunda projeyi güvenlik, test, marka kimliği ve responsive tasarım açısından kod incelemesine hazır hâle getirdim.<\/p>


                                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>


                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                            1. <\/span>[12:08] (1cb181a) feat(brand): integrate final SecureWatch AI identity<\/strong><\/li>
                                                                                                                                                                                                                                                                                                                            2. <\/span>[14:09] (4393786) docs(readme): add branding and refresh session documentation<\/strong><\/li>
                                                                                                                                                                                                                                                                                                                            3. <\/span>[16:53] (a621476) fix(ui): correct responsive branding and navigation layout<\/strong><\/li>
                                                                                                                                                                                                                                                                                                                            4. <\/span>[17:21] (4508d01) style(ui): polish analysis incident and dashboard interfaces<\/strong><\/li>
                                                                                                                                                                                                                                                                                                                            5. <\/span>[17:59] (7e85858) docs(diary): add day 18 internship entry<\/strong><\/li>
                                                                                                                                                                                                                                                                                                                            6. <\/span>[18:02] (eefd26e) docs(diary): remove trailing whitespace from day 18 entry<\/strong><\/li><\/ol>


                                                                                                                                                                                                                                                                                                                              <\/p>\n\n--- DAY 19 (2026-08-07) ---\n

                                                                                                                                                                                                                                                                                                                              Docker Ortamı ve Backend Konteynerizasyonu<\/h3>

                                                                                                                                                                                                                                                                                                                              Bugün SecureWatch AI projesinin Docker tabanlı çalışma ortamını hazırladım. Docker Desktop ve WSL 2 kurulumlarını doğruladıktan sonra backend servisi için Python 3.12 tabanlı Docker image oluşturdum. FastAPI uygulamasının Uvicorn üzerinden container içinde çalışmasını sağladım ve .dockerignore<\/code> ile gereksiz ve hassas dosyaların image içerisine alınmasını engelledim.<\/p>

                                                                                                                                                                                                                                                                                                                              Frontend ve Nginx<\/h3>

                                                                                                                                                                                                                                                                                                                              Frontend tarafında React ve Vite uygulaması için multi-stage Docker build yapısı hazırladım. Derlenen uygulamayı Nginx üzerinden yayınladım ve SPA yönlendirmelerini yapılandırdım. \/api<\/code> isteklerini backend servisine yönlendiren reverse proxy ayarlarını ekleyerek login, dashboard, analiz ve olay sayfalarının container ortamında çalıştığını doğruladım.<\/p>

                                                                                                                                                                                                                                                                                                                              Docker Compose ve Kalıcı Veriler<\/h3>

                                                                                                                                                                                                                                                                                                                              PostgreSQL, backend ve frontend servislerini Docker Compose altında birleştirdim. PostgreSQL ve backend servislerini dışarıya açmadan yalnızca frontend uygulamasını 8080 portundan erişilebilir hâle getirdim. Veritabanı ve yüklenen CSV dosyalarının korunması için kalıcı volume yapıları oluşturdum. Migration ve healthcheck kontrolleriyle servislerin doğru sırada çalışmasını sağladım.<\/p>

                                                                                                                                                                                                                                                                                                                              Güvenlik ve Uçtan Uca Testler<\/h3>

                                                                                                                                                                                                                                                                                                                              ADMIN ve ANALYST kullanıcılarını güvenli biçimde oluşturmak için environment değişkenlerini kullanan demo kullanıcı scripti hazırladım. Authentication ve RBAC senaryolarını test ederek 401, 403 ve 200 yanıtlarını doğruladım. Örnek CSV dosyasıyla analiz sürecini çalıştırdım ve 5 kayıttan 1 normal, 4 saldırı sonucu üretildiğini gördüm. Aynı dosyanın tekrar yüklenmesi engellendi ve container yeniden başlatıldığında verilerin korunduğunu doğruladım.<\/p>

                                                                                                                                                                                                                                                                                                                              Testler ve Sonuç<\/h3>

                                                                                                                                                                                                                                                                                                                              Backend tarafında 499<\/strong>, kritik güvenlik kapsamında 194<\/strong> ve frontend tarafında 791 test<\/strong> başarıyla geçti. TypeScript, ESLint, production build ve npm audit<\/code> kontrolleri başarılı tamamlandı. Böylece SecureWatch AI projesinin PostgreSQL, backend ve frontend katmanlarını Docker üzerinde birlikte çalışan güvenli ve bütünleşik bir yapıya dönüştürdüm.<\/p>


                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                              1. <\/span>[11:46] (37c633a) feat(docker): containerize backend service <\/li>
                                                                                                                                                                                                                                                                                                                              2. <\/span>[11:51] (5fdf4f9) feat(docker): containerize frontend with nginx <\/li>
                                                                                                                                                                                                                                                                                                                              3. <\/span>[12:01] (bf8f8d0) feat(docker): orchestrate application services <\/li>
                                                                                                                                                                                                                                                                                                                              4. <\/span>[12:13] (06d7136) feat(docker): add secure demo user bootstrap <\/li>
                                                                                                                                                                                                                                                                                                                              5. <\/span>[13:19] (a739b27) docs(diary): add day 19 internship entry<\/li><\/ol>\n" + }, + "Doğukan Kalkan": { + "id": 23, + "email": "kalkandogukan01@gmail.com", + "repo": "https:\/\/github.com\/Dogukan-klkn\/StockRoute", + "github_username": "Dogukan-klkn", + "total_entries": 20, + "commits_count": 0, + "commits_sample": [], + "full_text": "\n--- DAY 1 (2026-06-29) ---\n

                                                                                                                                                                                                                                                                                                                                Oryantasyon ve Kurulum Süreçleri:<\/strong> Stajın ilk günü şirket ve departman oryantasyonu ile başladı. Geliştirme ekibiyle tanışıldı ve şirketin genel çalışma kültürü hakkında bilgi alındı. Çalışma ortamının ayarlanması, gerekli geliştirme ortamlarının (IDE vb.) kurulması tamamlandı.<\/p>

                                                                                                                                                                                                                                                                                                                                Süreç İşleyişi:<\/strong> Ekibin benimsediği yazılım geliştirme metodolojisi ve iş akış süreçleri hakkında bilgilendirme yapıldı. Günlük toplantı (daily stand-up) işleyişi, görev atamalarının nasıl takip edileceği ve versiyon kontrol sisteminin (Git) proje bazlı kullanım standartları (branch yapısı, commit kuralları) aktarıldı.<\/p>

                                                                                                                                                                                                                                                                                                                                Proje Seçimi ve Gereksinim Analizi:<\/strong> Staj süresince üzerinde çalışacağım ve geliştireceğim projenin seçimi gerçekleştirildi. Danışmanım\/yöneticim ile yapılan toplantıda projenin temel amacı, çözmeyi hedeflediği problem ve beklenen çıktılar detaylıca konuşuldu.<\/p>

                                                                                                                                                                                                                                                                                                                                Proje Planlaması:<\/strong> Seçilen proje doğrultusunda kullanılacak teknoloji yığını (tech stack) ve sistem mimarisi üzerine fikir alışverişi yapıldı. Projenin modüllere ayrılması, veri tabanı şemasının taslak olarak düşünülmesi ve ilk sprint\/görev planlamasının yapılmasıyla temel proje takvimi (roadmap) oluşturuldu. Gerekli altyapı kararları alınarak gün tamamlandı.<\/p>


                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                1. <\/span>[15:43]<\/strong> (b55dbdf<\/em>) Initial commit<\/li>
                                                                                                                                                                                                                                                                                                                                2. <\/span>[15:50]<\/strong> (8f18c00<\/em>) docs: add implementation plan<\/li><\/ol>\n\n--- DAY 2 (2026-06-30) ---\n

                                                                                                                                                                                                                                                                                                                                  Tasarım ve Dokümantasyon Yapısının Kurulumu:<\/strong> Proje planlaması doğrultusunda, geliştirilecek uygulamanın görsel kimliğini ve arayüz (UI\/UX) referanslarını sisteme dahil etme çalışmalarına başlandı. Kod tabanında (repository) tasarım ve marka dosyalarını düzenli bir mimaride tutabilmek amacıyla docs\/<\/code> klasör yapısı oluşturuldu.<\/p>

                                                                                                                                                                                                                                                                                                                                  Mockup ve Marka Dosyalarının Eklenmesi:<\/strong> Projenin hem web yönetim paneli hem de mobil saha uygulaması ayakları için arayüz taslakları oluşturuldu. Üretken yapay zeka (GenAI) araçları destekli olarak hazırlanan bu ekran mockup'ları, referans olarak kullanılmak üzere sisteme eklendi. Ayrıca proje standartlarına uygun kurumsal kimlik ögeleri olan 1:1 oranındaki uygulama logosu (app icon) ve yatay formattaki tipografik logo (wordmark) dosyaları yapılandırmaya dahil edildi.<\/p>

                                                                                                                                                                                                                                                                                                                                  Teknik Notlar ve Kapsam:<\/strong> Günün sonunda açılan Pull Request (PR) ile tüm bu görsel varlıklar proje deposuna aktarıldı. Bu aşamadaki çalışmalar mimari bir zemin hazırlığı niteliğinde olup, yalnızca .png<\/code> formatındaki tasarım referanslarının yüklenmesini kapsadı. Henüz frontend tarafında bir bileşen (component) kodlaması veya iş mantığı (business logic) geliştirmesi yapılmadan, UI\/UX standartlarının kod tabanına entegrasyonu başarıyla tamamlandı.<\/p>


                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                  1. <\/span>[10:27]<\/strong> (5459584<\/em>) docs: revise implementation plan with docker, scalar and branding - dockerize the system (compose: db + api + web, Dockerfiles, deployment topology) - replace swagger ui with scalar for api reference (@scalar\/nestjs-api-reference) - add 1:1 app logo concept and brand assets (gemini-generated, in docs\/brand) - add genai-generated screen mockups workflow (docs\/design\/mockups) - reorganize docs\/ by topic (brand, design, api, architecture) - align project name to StockRoute to match the repository<\/li>
                                                                                                                                                                                                                                                                                                                                  2. <\/span>[10:38]<\/strong> (72c3343<\/em>) Merge pull request #1 from Dogukan-klkn\/feature\/implementation-plan docs: add implementation plan<\/li>
                                                                                                                                                                                                                                                                                                                                  3. <\/span>[17:16]<\/strong> (9697edc<\/em>) design: add web and mobile mockups, brand logos - Created docs\/ folder structure - Added screen mockups for web and mobile - Added 1:1 app logo and horizontal wordmark files<\/li><\/ol>\n\n--- DAY 3 (2026-07-01) ---\n

                                                                                                                                                                                                                                                                                                                                    Projenin daha ölçeklenebilir ve tek merkezden yönetilebilir bir yapıda olması amacıyla monorepo mimarisine geçiş yapıldı. Bu doğrultuda pnpm workspaces<\/code> ve Turborepo<\/code> teknolojileri kullanılarak projenin ana bileşenleri olan API (apps\/api<\/code>), web yönetim paneli (apps\/web<\/code>) ve mobil uygulamanın (apps\/mobile<\/code>) temel iskeletleri oluşturuldu.<\/p>

                                                                                                                                                                                                                                                                                                                                    Ortak Paketler ve Tasarım Sisteminin Kurgulanması:<\/strong> Monorepo altındaki uygulamalar arası kod standartlarını korumak ve tip güvenliğini (type safety) sağlamak adına packages\/config<\/code> ve packages\/shared-types<\/code> ortak paketleri (shared packages) yaratıldı. Geliştirilecek arayüzlerde görsel tutarlılığı güvence altına almak için renk, tipografi ve boşluk (spacing) kurallarını barındıran @stockroute\/ui-tokens<\/code> paketi oluşturuldu. Bu kurallar palette.md<\/code> ve design-system.md<\/code> dosyaları ile belgelendi. Ek olarak; iptal, transfer gibi durum (status) bildiren renkler, kod tarafında standart UI paletine (Indigo vb.) uyumlu olacak şekilde rafine edildi.<\/p>

                                                                                                                                                                                                                                                                                                                                    Docker Yapılandırması ve API Dokümantasyonu:<\/strong> Projenin veri tabanı altyapısı için PostgreSQL kullanılmak üzere docker-compose.yml<\/code> yapılandırması projeye dahil edildi. Mevcut proje planı gereğince, Docker yapılandırması şu an için yalnızca \"db\" (veri tabanı) servisini ayağa kaldıracak şekilde ayarlandı. Backend (API) tarafında ise sunucu sağlığını kontrol edebilmek amacıyla \/health<\/code> uç noktası (endpoint) eklendi ve API dökümantasyonunu interaktif olarak sunabilmek için Scalar entegrasyonu gerçekleştirildi.<\/p>


                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                    Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                    1. <\/span>[12:04]<\/strong> (d0f9ee4<\/em>) chore: scaffold monorepo, docker setup and implement design system - Setup pnpm workspaces and Turborepo with api, web, and mobile app skeletons - Configure docker-compose with postgres and setup Scalar API docs - Create shared packages (@stockroute\/config, @stockroute\/shared-types) - Add 1:1 logos and GenAI screen mockups to docs\/ folder - Create @stockroute\/ui-tokens package for colors, typography, and spacing - Add design system and palette documentation<\/li>
                                                                                                                                                                                                                                                                                                                                    2. <\/span>[15:22]<\/strong> (a989618<\/em>) feat(api): implement core database schema with multi-product movements - Setup Prisma ORM and generate v6.19 client - Define core entities: Tenant, User, Branch, Product, and Inventory - Refactor StockMovement to support header-line architecture (StockMovementItem) - Introduce InventoryLog for robust stock adjustment audit trails - Add shippedBy and receivedBy relations for physical transfer accountability - Update Docker compose DB port to 5433 to resolve local conflicts - Add initial empty seed.ts skeleton<\/li><\/ol>\n\n--- DAY 4 (2026-07-02) ---\n

                                                                                                                                                                                                                                                                                                                                      Kod Standartlarının Düzenlenmesi:<\/strong> Monorepo genelinde ortak standartları güvence altına almak için ana dizine prettier.config.js<\/code> eklendi. Web projesindeki yapılandırma çakışmaları çözülerek tüm kod tabanında otomatik formatlama (satır sonu ve tırnak stili) yapıldı.<\/p>

                                                                                                                                                                                                                                                                                                                                      Tenant (Kiracı) Bağlam Yönetimi:<\/strong> API isteklerinden tenantId<\/code> değerini yakalayıp uygulama genelinde güvenle taşımak amacıyla TenantResolverMiddleware<\/code> ve AsyncLocalStorage<\/code> tabanlı TenantContextService<\/code> geliştirildi.<\/p>

                                                                                                                                                                                                                                                                                                                                      Otomatik Veri İzolasyonu (Prisma):<\/strong> Prisma Client Extension entegre edilerek veritabanı okuma ve yazma işlemlerine otomatik satır bazlı (row-level) tenant filtrelemesi eklendi. Sistem mimarisi gereği Tenant<\/code> ve StockMovementItem<\/code> modelleri bu global izolasyondan muaf tutuldu.<\/p>


                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                      1. <\/span>[10:53]<\/strong> (ec94615<\/em>) chore: fix shared eslint and prettier config resolution across workspace - Resolve ESLint shareable config naming and discovery issues - Add root prettier.config.js to enforce a single source of truth - Rename web config to .eslintrc.cjs to resolve ESM\/CommonJS conflict - Apply auto-formatting (CRLF to LF, quote styles) to existing files<\/li>
                                                                                                                                                                                                                                                                                                                                      2. <\/span>[10:54]<\/strong> (94a38de<\/em>) feat(api): implement tenant isolation with prisma extension - Create TenantContextService using AsyncLocalStorage for efficient context passing - Add TenantResolverMiddleware to extract and set tenantId from requests - Implement Prisma Client Extension for automatic row-level tenant filtering - Enforce automatic tenantId assignment on database writes and upserts - Exclude Tenant and StockMovementItem from global tenant isolation<\/li><\/ol>\n\n--- DAY 5 (2026-07-03) ---\n

                                                                                                                                                                                                                                                                                                                                        Kimlik Doğrulama ve Güvenlik Altyapısının Kurulması:<\/strong> Sistem genelinde güvenli, ölçeklenebilir ve durumsuz (stateless) bir kimlik doğrulama mimarisi kurmak amacıyla NestJS altyapısına uygun olarak Passport.js ve JWT (JSON Web Token) stratejileri entegre edildi. Bu sayede oturum yönetimi sunucu tarafında değil, token tabanlı bir yapıda kurgulandı.<\/p>

                                                                                                                                                                                                                                                                                                                                        Firma Kayıt ve Kullanıcı Giriş Akışlarının Geliştirilmesi:<\/strong> Uygulamanın dışa açılan ilk kapısı olan \/auth\/register-tenant ve \/auth\/login API uç noktaları kodlandı. Kayıt uç noktası salt bir kullanıcı oluşturmak yerine, sisteme yeni bir firma eklendiğinde o firmaya ait izole alanı ve ilk yönetici (FIRM_ADMIN) hesabını eşzamanlı yaratacak iş mantığıyla (business logic) tasarlandı. Giriş uç noktasında ise şifre doğrulamalarının ardından istemciye güvenli erişim anahtarının dönülmesi sağlandı.<\/p>

                                                                                                                                                                                                                                                                                                                                        Bağlam Odaklı Token Yapılandırması (Payload Design):<\/strong> Sistemin çekirdeğini oluşturan çoklu kiracı (multi-tenant) mimarisinin kesintisiz çalışması için JWT içerik yükü (payload) özel olarak yapılandırıldı. Üretilen her token'ın içerisine kullanıcının bağlı bulunduğu firmanın kimliği (tenantId) ve sistemdeki yetki seviyesi (role) gömüldü. Bu tasarım sayesinde, gelen her istekte veritabanına tekrar tekrar sorgu atmaya gerek kalmadan, önceki gün kurduğumuz TenantContextService üzerinden veri izolasyonu ve yetki kontrolleri doğrudan token ile çözümlenebilir hale getirildi.<\/p>


                                                                                                                                                                                                                                                                                                                                        <\/p>


                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                        [13:05] (3cae7d9) feat(api): add jwt authentication with passport - Configure JWT strategy and bcrypt for secure password hashing - Implement \/auth\/register-tenant with Prisma transaction for Tenant and User - Implement \/auth\/login with fail-safe timing attack prevention - Implement \/auth\/me protected endpoint using JwtAuthGuard - Refactor TenantResolverMiddleware to decode and use real JWT tokens - Enable global ValidationPipe and document auth endpoints for Scalar<\/p>\n\n--- DAY 6 (2026-07-06) ---\n

                                                                                                                                                                                                                                                                                                                                        Yetki Kontrol Mekanizmasının (Guard) Kurulması:<\/strong> Sistemdeki API uç noktalarının güvenliğini sağlamak ve sadece doğru yetkiye sahip kişilerin işlem yapabilmesini güvence altına almak amacıyla rol tabanlı erişim kontrolü (RBAC) altyapısı geliştirildi. Hangi rotalara hangi rollerin erişebileceğini tanımlamak için özel bir @Roles<\/code> dekoratörü oluşturuldu. NestJS'in Reflector<\/code> yapısı kullanılarak bu tanımları denetleyen ve yetkisiz erişim denemelerinde standart \"403 Forbidden\" hatası döndüren RolesGuard<\/code> mekanizması sisteme entegre edildi.<\/p>

                                                                                                                                                                                                                                                                                                                                        Bağlam (Context) Yakalama Dekoratörleri:<\/strong> İstek yapan kullanıcının JWT içerisindeki çoklu kiracı (tenant) verisini Controller katmanında güvenli ve temiz bir şekilde çıkarabilmek için @CurrentTenant<\/code> parametre dekoratörü yazıldı.<\/p>


                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                        Tüm bu güvenlik ve yetkilendirme katmanları geliştirilirken projenin benimsediği temiz mimari (clean architecture) prensiplerine ve katı tip güvenliği (strict type safety) standartlarına harfiyen uyuldu.<\/p>


                                                                                                                                                                                                                                                                                                                                        <\/p>


                                                                                                                                                                                                                                                                                                                                        <\/p>


                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                        1. <\/span>[09:00]<\/strong> (4e71f91<\/em>) feat(api): implement role-based authorization guards - Create @Roles decorator to define permitted roles for endpoints - Implement RolesGuard using Reflector to enforce RBAC and handle 403 Forbidden - Add @CurrentTenant parameter decorator to safely extract tenant context from JWT - Refactor \/auth\/me endpoint to utilize @CurrentUser and @CurrentTenant decorators - Ensure compliance with clean architecture and strict type safety<\/li><\/ol>\n\n--- DAY 7 (2026-07-07) ---\n

                                                                                                                                                                                                                                                                                                                                          Başlangıç Verileri (Seed) ve Onboarding:<\/strong> Sistemin ilk kayıt (onboarding) akışını doğrulamak ve geliştirme sürecini hızlandırmak amacıyla veritabanını başlangıç verileriyle dolduran seed.ts<\/code> dosyası oluşturuldu. Bu script aracılığıyla sisteme örnek demo firmalar (Acme, Globex) ve bu firmaları yönetecek admin kullanıcıları tanımlandı. Ayrıca, script'in birden fazla kez çalıştırıldığında veri çakışması yaratmaması için \"upsert\" (güncelleyerek ekleme) mantığıyla idempotent olarak çalışması sağlandı.<\/p>

                                                                                                                                                                                                                                                                                                                                          Uçtan Uca (E2E) Test Altyapısı:<\/strong> API'nin dış dünyadan gelen isteklere vereceği yanıtları uçtan uca test edebilmek için Jest<\/code> ve Supertest<\/code> kütüphaneleri kullanılarak E2E test altyapısı sisteme entegre edildi.<\/p>

                                                                                                                                                                                                                                                                                                                                          Veri İzolasyonunun Test Edilmesi:<\/strong> Sistem mimarisinin en kritik güvenliği olan \"çoklu kiracı (multi-tenant)\" yapısının sorunsuz çalıştığını kanıtlamak adına tenant-isolation.e2e-spec.ts<\/code> test senaryosu yazıldı. Bu test sayesinde, farklı firmaların (tenant) sistem üzerinden birbirlerinin verilerine kesinlikle erişemediği (strict data isolation) uçtan uca simüle edilerek başarılı bir şekilde doğrulandı.<\/p>


                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                          1. <\/span>[11:05]<\/strong> (d8c670d<\/em>) feat(api): add tenant onboarding flow and seed data - Add e2e testing infrastructure with Jest and Supertest - Implement tenant-isolation.e2e-spec.ts to verify strict data isolation between tenants - Create seed.ts to populate database with demo tenants (Acme, Globex) and admin users - Ensure duplicate execution of seed script is idempotent (upsert)<\/li><\/ol>\n\n--- DAY 8 (2026-07-08) ---\n

                                                                                                                                                                                                                                                                                                                                            Veri Doğrulama (DTO) ve Dokümantasyon:<\/strong> Şube oluşturma ve güncelleme isteklerini doğrulamak için DTO sınıfları oluşturuldu. Bu verilerin Scalar API dokümantasyonunda doğru sergilenmesi için OpenAPI özellikleri eklendi.<\/p>

                                                                                                                                                                                                                                                                                                                                            Servis Katmanı ve İş Kuralları:<\/strong> Şubeler için tüm temel CRUD (ekleme, listeleme, güncelleme, silme) işlemleri yazıldı. Prisma eklentisi sayesinde otomatik veri izolasyonu (tenant isolation) sağlandı. Mükerrer şube kodları ve bulunamayan kayıtlar için gerekli hata yönetimi (Exception) mekanizmaları kuruldu.<\/p>

                                                                                                                                                                                                                                                                                                                                            Controller ve Yetkilendirme (RBAC):<\/strong> API uç noktaları BranchesController<\/code> içerisinde toplanarak rol tabanlı yetkilendirme (RBAC) ile güvence altına alındı. İşlemler yalnızca proje planındaki yetki matrisine uygun olarak FIRM_ADMIN<\/code> ve BRANCH_MANAGER<\/code> rollerine açıldı. Son olarak, modül ana projeye entegre edilerek PR (Pull Request) süreci tamamlandı.<\/p>


                                                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                            1. <\/span>[10:27]<\/strong> (3c2540a<\/em>) feat(api): add branch validation dtos and openapi properties<\/li>
                                                                                                                                                                                                                                                                                                                                            2. <\/span>[10:32]<\/strong> (3bd133c<\/em>) feat(api): add branch service and business logic - Implemented CRUD operations (create, findAll, findOne, update, remove) in BranchesService. - Relied on Prisma Client Extension for automatic tenant isolation (omitted explicit tenantId). - Utilized Omit type utility to bypass Prisma TS strictness for injected tenantId. - Handled P2002 unique constraint errors with ConflictException for branch codes. - Added NotFoundException mapping for missing branch records.<\/li>
                                                                                                                                                                                                                                                                                                                                            3. <\/span>[10:35]<\/strong> (34c000d<\/em>) feat(api): add branches controller with rbac and module integration - Created BranchesController with @UseGuards(JwtAuthGuard, RolesGuard) for secure endpoints. - Implemented role-based access control matching the exact project matrix (FIRM_ADMIN, BRANCH_MANAGER). - Decorated endpoints with @ApiTags, @ApiOperation, and @ApiResponse for Scalar API documentation. - Created BranchesModule to encapsulate controller and service. - Imported BranchesModule into the root AppModule domain group. <\/li><\/ol>\n\n--- DAY 9 (2026-07-09) ---\n

                                                                                                                                                                                                                                                                                                                                              Proje Dokümantasyonu:<\/strong> Projenin genel yapısını, kullanılan teknoloji yığınını ve temel özelliklerini güncel bir şekilde yansıtacak şekilde proje kök dizinindeki README<\/code> dosyası güncellenmiştir.<\/p>

                                                                                                                                                                                                                                                                                                                                              Veri Modelleri (DTO) ve Servis Katmanı:<\/strong> Ürün oluşturma istekleri için gerekli doğrulama (validation) kurallarını barındıran CreateProductDto<\/code>, kısmi ürün güncellemeleri için ise UpdateProductDto<\/code> veri transfer nesneleri tanımlanmıştır. Ürünlere ait temel CRUD operasyonlarını (oluşturma, okuma, güncelleme, silme) ve hata yönetimini (error handling) gerçekleştiren ProductsService<\/code> katmanı kodlanmıştır.<\/p>

                                                                                                                                                                                                                                                                                                                                              Uç Noktalar ve Barkod Entegrasyonu:<\/strong> API isteklerini karşılayan ProductsController<\/code> oluşturulmuş ve standart CRUD uç noktaları tanımlanmıştır. Mobil saha uygulamasındaki cihaz kamerasıyla yapılacak tarama işlemlerini desteklemek amacıyla barkod tabanlı özel sorgu rotası (\/products\/barcode\/:barcode<\/code>) sisteme eklenmiştir. Rota eşleşmelerinde yapısal bir çakışma yaşanmaması için barkod rotası, dinamik ID rotasından önce konumlandırılmıştır.<\/p>

                                                                                                                                                                                                                                                                                                                                              Güvenlik (RBAC) ve API Belgelendirmesi:<\/strong> Oluşturulan tüm rotalar JwtAuthGuard<\/code> ve RolesGuard<\/code> mekanizmalarıyla güvence altına alınmıştır. Projedeki rol ve yetki matrisine tam uyumlu olacak şekilde, ürün yönetim uç noktalarına FIRM_ADMIN<\/code>, BRANCH_MANAGER<\/code>, WAREHOUSE_STAFF<\/code> ve FIELD_STAFF<\/code> rolleri için erişim yetkisi tanımlanmıştır. Ayrıca tüm endpoint'lerin interaktif Scalar\/OpenAPI arayüzünde detaylıca sergilenmesi için @ApiOperation<\/code> ve @ApiResponse<\/code> dekoratörleri eklenerek API belgelendirmesi tamamlanmıştır.<\/p>

                                                                                                                                                                                                                                                                                                                                              Modül Entegrasyonu:<\/strong> Geliştirilen bağımsız Controller ve Service yapıları temiz mimari prensiplerine uygun olarak ProductsModule<\/code> çatısı altında toplanmış ve sistemin ana modülüne entegre edilmiştir.<\/p>


                                                                                                                                                                                                                                                                                                                                              <\/p>


                                                                                                                                                                                                                                                                                                                                              <\/p>


                                                                                                                                                                                                                                                                                                                                              <\/p>


                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                              1. <\/span>[11:03]<\/strong> (47b7886<\/em>) feat(docs): update README with project overview, technology stack, and features<\/li>
                                                                                                                                                                                                                                                                                                                                              2. <\/span>[11:25]<\/strong> (06867a1<\/em>) feat(api): add CreateProductDto for product creation with validation and properties<\/li>
                                                                                                                                                                                                                                                                                                                                              3. <\/span>[11:26]<\/strong> (3aad733<\/em>) feat(api): add UpdateProductDto for partial product updates with validation<\/li>
                                                                                                                                                                                                                                                                                                                                              4. <\/span>[13:42]<\/strong> (0857ce8<\/em>) feat(api): implement ProductsService with CRUD operations and error handling<\/li>
                                                                                                                                                                                                                                                                                                                                              5. <\/span>[14:43]<\/strong> (55b4e97<\/em>) feat(api): add products controller with rbac and swagger docs - Created ProductsController and added CRUD and barcode endpoints. - Secured all routes using JwtAuthGuard and RolesGuard. - Assigned appropriate roles (FIRM_ADMIN, BRANCH_MANAGER, WAREHOUSE_STAFF, FIELD_STAFF) to endpoints matching the project authorization matrix. - Placed the barcode route before the ID route to prevent route matching conflicts. - Added @ApiOperation and @ApiResponse decorators for Scalar\/OpenAPI documentation.<\/li>
                                                                                                                                                                                                                                                                                                                                              6. <\/span>[16:34]<\/strong> (901ecea<\/em>) feat(api): add ProductsModule with controller and service<\/li><\/ol>\n\n--- DAY 10 (2026-07-10) ---\n

                                                                                                                                                                                                                                                                                                                                                Envanter Listeleme ve Filtreleme:<\/strong> Sistemde yetkili olan rollerin erişebileceği GET \/inventory<\/code> API uç noktası oluşturulmuştur. Bu uç nokta sayesinde, kullanıcıların spesifik olarak şube bazlı (branchId<\/code>) filtreleme yapabilmesi ve belirlenen düşük stok eşiğinin (minThreshold<\/code>) altına düşen ürünleri (lowStock<\/code>) anlık olarak listeleyebilmesi için gerekli veri tabanı sorguları ve altyapı sağlanmıştır. <\/p>

                                                                                                                                                                                                                                                                                                                                                Manuel Stok Düzeltme İşlemleri:<\/strong> Depolardaki fiziksel sayımlar, hasarlı ürünler veya hatalı veri girişleri sonucunda sistemde oluşabilecek tutarsızlıkları gidermek için manuel stok düzeltme rotası olan POST \/inventory\/adjust<\/code> kodlanmıştır. Gelen API istekleri sistem tarafından { branchId, productId, quantity, reason }<\/code> formatında veri transfer nesneleri (DTO) ile karşılanarak doğrulama (validation) işlemlerinden geçirilmiştir. <\/p>

                                                                                                                                                                                                                                                                                                                                                Stok İzlenebilirliği (Audit Trail) ve Loglama:<\/strong> Sistemin kurumsal hesap verilebilirliğini en üst düzeye çıkarmak amacıyla, stok düzeltme işlemlerine gelişmiş bir izlenebilirlik (Audit Trail) mantığı entegre edilmiştir. \/inventory\/adjust<\/code> uç noktasına yapılan her istek sonucunda ilgili ürünün Inventory.quantity<\/code> değeri güncellenirken, aynı işlem bloğu içerisinde eşzamanlı olarak InventoryLog<\/code> tablosuna da bir kayıt atılması zorunlu kılınmıştır. <\/p>

                                                                                                                                                                                                                                                                                                                                                Kayıt Altına Alınan Veriler:<\/strong> Veritabanına yazılan log kayıtlarında; işlem türü (MANUAL_ADJUSTMENT<\/code>), işlem öncesi stok miktarı (previousQuantity<\/code>), yeni stok miktarı (newQuantity<\/code>), net değişim miktarı (quantityChange<\/code>), düzeltme nedeni (reason<\/code>) ve bu işlemi gerçekleştiren kullanıcının benzersiz kimliği (userId<\/code>) detaylı bir şekilde kayıt altına alınarak olası stok uyuşmazlıklarının kaynağının geriye dönük olarak tespit edilmesi garanti edilmiştir. <\/p>

                                                                                                                                                                                                                                                                                                                                                Rol Tabanlı Yetkilendirme (RBAC):<\/strong> Sistemin güvenlik politikaları gereğince, kritik bir işlem olan stok düzeltme (\/inventory\/adjust<\/code>) işlemi, proje yetki matrisine birebir uygun olacak şekilde yalnızca BRANCH_MANAGER<\/code> (Şube Yöneticisi) ve WAREHOUSE_STAFF<\/code> (Depo Sorumlusu) rollerinin erişimine açılmış, yetkisiz roller için kısıtlanmıştır. <\/p>


                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                1. <\/span>[09:54]<\/strong> (7f3d72f<\/em>) feat(api): add AdjustInventoryDto for manual stock adjustment requests<\/li>
                                                                                                                                                                                                                                                                                                                                                2. <\/span>[09:54]<\/strong> (513c0ab<\/em>) feat(api): add GetInventoryFilterDto for inventory listing filters<\/li>
                                                                                                                                                                                                                                                                                                                                                3. <\/span>[13:35]<\/strong> (afc9ea6<\/em>) feat(api): implement InventoryService with findAll and adjustInventory methods<\/li>
                                                                                                                                                                                                                                                                                                                                                4. <\/span>[13:41]<\/strong> (7fcb83e<\/em>) feat(api): add InventoryController with endpoints for listing and adjusting inventory<\/li>
                                                                                                                                                                                                                                                                                                                                                5. <\/span>[16:07]<\/strong> (575ebe3<\/em>) feat(api): import InventoryModule in AppModule<\/li>
                                                                                                                                                                                                                                                                                                                                                6. <\/span>[16:07]<\/strong> (09ce9ef<\/em>) feat(api): create InventoryModule with controller and service<\/li><\/ol>\n\n--- DAY 11 (2026-07-13) ---\n

                                                                                                                                                                                                                                                                                                                                                  Bugün, proje planında belirtilen 11. gün hedefleri doğrultusunda sistemin en kritik modüllerinden biri olan \"Şubeler Arası Stok Transfer İş Akışı\" (Stock Movement Workflow) uçtan uca geliştirilmiştir. Gün içerisinde tamamlanan teknik çalışmalar aşağıda detaylandırılmıştır:<\/p>

                                                                                                                                                                                                                                                                                                                                                  1. Veri Transfer Nesneleri (DTO) ve Validasyon<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                  1. <\/span>API'ye gelecek olan stok transfer taleplerini karşılamak ve doğrulamak amacıyla CreateMovementDto<\/code> ve çoklu ürün (header-line) yapısını destekleyen MovementItemDto<\/code> sınıfları oluşturulmuştur.<\/li>
                                                                                                                                                                                                                                                                                                                                                  2. <\/span>Transfer geçmişini listelerken durum (status) veya şube bazlı aramalar yapabilmek için filtreleme kurallarını içeren GetMovementsFilterDto<\/code> sisteme eklenmiştir.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                    2. Servis Katmanı ve Transfer Durum Makinesi (State Machine)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                    1. <\/span>Transfer yaşam döngüsünü yönetmek üzere MovementsService<\/code> geliştirilmiştir. Bu servis içerisinde transfer süreçleri bir durum makinesi (approve, reject, cancel, ship, receive) mantığıyla katı doğrulama kurallarına bağlanmıştır.<\/li>
                                                                                                                                                                                                                                                                                                                                                    2. <\/span>\"İptal\" (cancel) işlemi güvenlik gereği yalnızca talebi oluşturan kullanıcıya veya FIRM_ADMIN<\/code> rolüne kısıtlanmıştır. Aynı şube içerisine transfer yapılması kod seviyesinde engellenmiştir.<\/li>
                                                                                                                                                                                                                                                                                                                                                    3. <\/span>İşlem Bütünlüğü (Atomicity):<\/strong> ship<\/code> (sevk) ve receive<\/code> (teslim) işlemleri sırasında veri tutarsızlığını önlemek için Prisma Transaction<\/strong> yapısı kullanılmıştır. Stok eksiltme ve artırma işlemleri tek bir transaction bloğunda güvene alınmış, sevk sırasında stokların eksiye düşmesi (negative stock) engellenmiştir.<\/li>
                                                                                                                                                                                                                                                                                                                                                    4. <\/span>İzlenebilirlik (Audit Trail):<\/strong> Sevk ve teslimat anlarında otomatik olarak InventoryLog<\/code> kayıtlarının (TRANSFER_OUT<\/code> ve TRANSFER_IN<\/code> tipleriyle) oluşturulması sağlanmıştır. Ayrıca 13. günde eklenecek olan gerçek zamanlı Socket.io bildirimleri için kod içerisine yer tutucular (TODO marker'ları) eklenmiştir.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                      3. Uç Noktalar (Controller) ve Güvenlik (RBAC)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                      1. <\/span>Dış dünyaya açılan rotaları barındıran MovementsController<\/code> kodlanmıştır. Projenin yetki matrisine uygun olarak uç noktalar JwtAuthGuard<\/code> ve RolesGuard<\/code> ile korumaya alınmıştır.<\/li>
                                                                                                                                                                                                                                                                                                                                                      2. <\/span>Örneğin; transfer talep etme ve görüntüleme tüm rollere açıkken, onaylama\/reddetme işlemleri sadece FIRM_ADMIN<\/code> ve BRANCH_MANAGER<\/code>'a, sevk işlemi ise ek olarak WAREHOUSE_STAFF<\/code> rolüne yetkilendirilmiştir.<\/li>
                                                                                                                                                                                                                                                                                                                                                      3. <\/span>Güvenlik zafiyeti yaratmamak adına, işlemi yapan userId<\/code> ve kullanıcının rolü asla istek gövdesinden (request body) alınmamış, @CurrentUser<\/code> dekoratörü ile doğrudan güvenilir JWT içerisinden okunmuştur. Tüm bu uç noktalar Swagger\/Scalar dokümantasyonuna (ApiTags, ApiOperation, ApiResponse vb. dekoratörlerle) entegre edilmiştir.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                        4. Modül Entegrasyonu ve Kod Kalitesi Standardizasyonu<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                        1. <\/span>Yazılan Controller ve Service sınıfları MovementsModule<\/code> altında birleştirilmiş ve ana AppModule<\/code> içerisine dahil edilerek API rotaları aktif hale getirilmiştir.<\/li>
                                                                                                                                                                                                                                                                                                                                                        2. <\/span>Gün sonunda tüm kod tabanında stil ve formatlama iyileştirmeleri (Prettier) yapılmıştır. Özellikle Windows tabanlı geliştirmelerde sorun yaratan satır sonu karakteri (CRLF\/LF) çakışmalarını kökten çözmek için sisteme .gitattributes<\/code> dosyası eklenmiş ve tüm metin dosyaları LF formatına zorlanarak ESLint hataları sıfırlanmıştır.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                          1. <\/span>[09:11]<\/strong> (b3b8ab3<\/em>) feat(api): add CreateMovementDto and MovementItemDto for stock movement requests<\/li>
                                                                                                                                                                                                                                                                                                                                                          2. <\/span>[09:11]<\/strong> (9f377df<\/em>) feat(api): add GetMovementsFilterDto for filtering stock movement requests<\/li>
                                                                                                                                                                                                                                                                                                                                                          3. <\/span>[11:18]<\/strong> (b3075d0<\/em>) feat(api): add movements service with state machine and transactional stock updates - Created MovementsService to handle the complete stock transfer lifecycle. - Implemented state machine transitions (approve, reject, cancel, ship, receive) with strict validation. - Secured 'cancel' action to only allow the original requester or a FIRM_ADMIN. - Wrapped 'ship' and 'receive' operations in Prisma transactions for atomic stock deduction\/addition. - Integrated automated Audit Trail (InventoryLog) generation for TRANSFER_OUT and TRANSFER_IN actions. - Prevented cross-branch transfers within the same branch and guarded against negative stock during shipments. - Prepared \/\/ TODO(day13) markers for future Socket.io real-time event emissions.<\/li>
                                                                                                                                                                                                                                                                                                                                                          4. <\/span>[13:03]<\/strong> (fc431b4<\/em>) style(api): format CreateMovementDto with prettier - Collapse unnecessary line break in the destinationBranchId description - No behavior change; output of eslint --fix<\/li>
                                                                                                                                                                                                                                                                                                                                                          5. <\/span>[13:04]<\/strong> (6b81949<\/em>) style(api): format GetMovementsFilterDto with prettier - Collapse unnecessary line break in the branchId description - No behavior change; output of eslint --fix<\/li>
                                                                                                                                                                                                                                                                                                                                                          6. <\/span>[13:21]<\/strong> (87449b4<\/em>) style(api): format MovementsService with prettier - Collapse the OR condition in findAll and the status check in cancel onto single lines - Inline the insufficient-stock error message template literal in ship - No behavior change; output of eslint --fix<\/li>
                                                                                                                                                                                                                                                                                                                                                          7. <\/span>[14:25]<\/strong> (c077307<\/em>) feat(api): add MovementsController with transfer workflow endpoints - POST \/movements, GET \/movements, GET \/movements\/:id — open to all roles - POST \/movements\/:id\/approve and \/reject — SUPER_ADMIN, FIRM_ADMIN, BRANCH_MANAGER only - POST \/movements\/:id\/ship — the above plus WAREHOUSE_STAFF - POST \/movements\/:id\/receive and \/cancel — all roles; the real cancel authorization (requester or FIRM_ADMIN) is enforced in the service - Class-level JwtAuthGuard + RolesGuard, full Swagger docs (ApiTags, ApiBearerAuth, ApiOperation, per-status ApiResponse annotations) - userId and role are read from the JWT via @CurrentUser, never from the request body<\/li>
                                                                                                                                                                                                                                                                                                                                                          8. <\/span>[16:53]<\/strong> (3e51804<\/em>) feat(api): create MovementsModule wiring controller and service - Register MovementsController and provide MovementsService - Export MovementsService so the day-13 Socket.io gateway can reuse it - No PrismaModule import needed; PrismaService comes from the global PrismaModule, matching the InventoryModule pattern<\/li>
                                                                                                                                                                                                                                                                                                                                                          9. <\/span>[16:54]<\/strong> (c7c3d42<\/em>) feat(api): register MovementsModule in AppModule - Add MovementsModule to the domain modules block of the imports array, enabling the \/movements endpoints behind TenantResolverMiddleware<\/li>
                                                                                                                                                                                                                                                                                                                                                          10. <\/span>[17:06]<\/strong> (0534883<\/em>) style(api): normalize line endings to LF across the codebase - Add .gitattributes enforcing LF for all text files (CRLF kept for .bat\/.cmd scripts) so Windows checkouts no longer reintroduce carriage returns flagged by prettier - Run eslint --fix over apps\/api\/src to clear all pre-existing \"Delete CR\" warnings and a few related line-wrap fixes - No behavior change; eslint reports zero warnings and nest build passes<\/li><\/ol>\n\n--- DAY 12 (2026-07-14) ---\n

                                                                                                                                                                                                                                                                                                                                                            Bugün, proje planında belirtilen 12. gün hedefleri doğrultusunda, bir önceki gün geliştirilen \"Şubeler Arası Stok Transfer İş Akışı\" (Stock Movement) modülünün güvenilirliğini kanıtlamak amacıyla kapsamlı bir test süreci yürütülmüştür. Gün içerisinde tamamlanan teknik çalışmalar aşağıda detaylandırılmıştır:<\/p>


                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                            1. Birim Test (Unit Test) Altyapısının Kurulması<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                            1. <\/span>API katmanında birim testleri koşturabilmek için test ortamı bağımlılıkları yapılandırılmış ve ts-jest<\/code> kullanılarak Jest konfigürasyonu (Jest config) sisteme dahil edilmiştir.<\/li>
                                                                                                                                                                                                                                                                                                                                                            2. <\/span>Geliştirme sürecini hızlandırmak ve test kapsamını (coverage) takip edebilmek için package.json<\/code> dosyasına test<\/code>, test:watch<\/code> ve test:cov<\/code> script'leri eklenmiştir. Test süreçlerinde oluşan \"coverage\" çıktılarının repoyu kirletmemesi adına .gitignore<\/code> dosyası güncellenmiştir.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                              2. Servis Katmanı Birim Testleri (Unit Tests)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                              1. <\/span>Transfer iş akışının (durum makinesi) çekirdeğini oluşturan MovementsService<\/code> için detaylı birim testleri yazılmıştır.<\/li>
                                                                                                                                                                                                                                                                                                                                                              2. <\/span>Veritabanına gerçekten bağlanıp verileri değiştirmemek adına \"Mock Prisma Client\" kullanılmış, böylece testlerin izole ve hızlı bir şekilde çalışması sağlanmıştır. Transfer onaylama, iptal etme, sevk ve teslim işlemleri için tüm iş kurallarının (örn. yetersiz stok durumu) doğru çalışıp çalışmadığı test edilmiştir.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                3. Uçtan Uca Testler (E2E) ve Rol Tabanlı Yetkilendirme (RBAC)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                1. <\/span>Sistemin dışarıdan gelen HTTP isteklerine vereceği tepkileri ölçmek için uçtan uca (e2e) test senaryoları yazılmıştır. Bu senaryolar kapsamında transferin baştan sona başarılı gerçekleştiği \"happy path\", rol tabanlı erişim kısıtlamaları (RBAC) ve iş kuralları test edilmiştir.<\/li>
                                                                                                                                                                                                                                                                                                                                                                2. <\/span>Yetkisi olmayan bir kullanıcının transfer sevk (ship) etmeye çalışması durumunda sistemin doğru bir şekilde 403 Forbidden<\/code> döndürdüğü doğrulanmıştır.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                  4. Veri İzolasyonu (Tenant Isolation) ve Bug Fix<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>Yazılan testler sayesinde transfer oluşturma (create<\/code>) işleminde önemli bir güvenlik detayı fark edilerek anında düzeltilmiştir: Transfer talebi açılırken girilen ürünün (product) ve şubenin (branch) aktif tenant'a ait olup olmadığı kontrolü (fix(api): validate branch and product tenancy<\/code>) sisteme eklenmiştir.<\/li>
                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>Çoklu kiracı (multi-tenant) mimarisinin en önemli güvenlik adımı olan \"çapraz erişim\" testleri genişletilmiştir. Bir firmanın, başka bir firmaya ait şubeye veya ürüne kesinlikle transfer talebi açamadığı tenant-isolation<\/code> E2E testleri ile kanıtlanmıştır.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                    5. Sürekli Entegrasyon (CI) Çıktılarının Belgelenmesi<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>Gün sonunda test kapsamı (coverage), build süreçleri ve kod standartları denetleyicisi (lint) çıktıları başarılı bir şekilde alınarak docs\/<\/code> klasörüne eklenmiş ve modülün prodüksiyona hazır olduğu belgelenmiştir.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                      Git Commit Mesajları:<\/strong><\/p>


                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>[10:36] <\/strong>(54eff7a) test(api): add Jest config for unit tests with ts-jest<\/li>
                                                                                                                                                                                                                                                                                                                                                                      2. <\/span>[10:36]<\/strong> (5c7d695) test(api): add unit test scripts (test, test:watch, test:cov)<\/li>
                                                                                                                                                                                                                                                                                                                                                                      3. <\/span>[11:04]<\/strong> (6990064) test(api): add MovementsService unit tests with mocked Prisma client<\/li>
                                                                                                                                                                                                                                                                                                                                                                      4. <\/span>[11:05] <\/strong>(22c8f23) chore: ignore jest coverage output<\/li>
                                                                                                                                                                                                                                                                                                                                                                      5. <\/span>[11:19]<\/strong> (d358fa2) test: add unit test output and coverage files<\/li>
                                                                                                                                                                                                                                                                                                                                                                      6. <\/span>[12:17]<\/strong> (39434c2) test(api): add movements e2e covering happy path, RBAC and business rules<\/li>
                                                                                                                                                                                                                                                                                                                                                                      7. <\/span>[12:18] <\/strong>(a8ede20) test(api): add e2e test output for movements<\/li>
                                                                                                                                                                                                                                                                                                                                                                      8. <\/span>[12:37] <\/strong>(0ca591c) fix(api): validate branch and product tenancy on movement create<\/li>
                                                                                                                                                                                                                                                                                                                                                                      9. <\/span>[13:42] <\/strong>(a576e0e) test(api): extend tenant isolation e2e with cross-tenant movements coverage<\/li>
                                                                                                                                                                                                                                                                                                                                                                      10. <\/span>[17:45] <\/strong>(a457792) docs: add day 12 lint output<\/li>
                                                                                                                                                                                                                                                                                                                                                                      11. <\/span>[17:45]<\/strong> (ae380de) docs: add day 12 build output<\/li>
                                                                                                                                                                                                                                                                                                                                                                      12. <\/span>[17:45]<\/strong> (618bbf1) docs: add day 12 full e2e test output<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                        <\/p>\n\n--- DAY 13 (2026-07-16) ---\n

                                                                                                                                                                                                                                                                                                                                                                        Bugün, proje planının 13. gün hedefleri doğrultusunda sistemdeki stok ve transfer hareketlerinin anlık olarak istemcilere (web ve mobil) yansımasını sağlayacak gerçek zamanlı altyapı (Real-Time Gateway) başarıyla geliştirilmiştir. Gün içerisinde tamamlanan teknik adımlar aşağıda detaylandırılmıştır:<\/p>


                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>Ortak Tiplerin (Shared Types) ve Altyapının Hazırlanması:<\/strong> Geliştirmelere monorepo içindeki shared-types paketinin derleme çıktılarının (CommonJS) düzeltilmesiyle başlanmıştır. Sistemde yayınlanacak anlık mesajların tip güvenliğini sağlamak için Socket.io olay kataloğu ve veri taşıma yükü (payload) tipleri tanımlanarak ana paketten dışa aktarılmıştır. Ayrıca paket için gerekli lint ve derleme bağımlılık konfigürasyonları güncellenmiştir.<\/li>
                                                                                                                                                                                                                                                                                                                                                                        2. <\/span>​Socket.io Gateway ve Çoklu Kiracı (Tenant) Odalarının Kurulumu:<\/strong> Backend (NestJS) uygulamasına gerekli WebSocket ve Socket.io kütüphaneleri kurularak RealtimeModule ve buna bağlı InventoryGateway inşa edilmiştir. İletişim güvenliğini sağlamak adına bu ağ geçidine (gateway) JWT kimlik doğrulaması zorunluluğu getirilmiştir. Bağlantı kuran her kullanıcı, token üzerinden doğrulandıktan sonra yalnızca kendi firmasına ait (tenant_{id}) izole edilmiş iletişim odalarına (rooms) dahil edilerek veri sızıntısının önüne geçilmiştir.<\/li>
                                                                                                                                                                                                                                                                                                                                                                        3. <\/span>​Transfer İş Akışına (Movements) Anlık Olay Yayınlarının Eklenmesi:<\/strong> Yeni oluşturulan gerçek zamanlı modül, stok hareketleri servisine entegre edilmiştir. Artık sistemde bir transfer oluşturulduğunda (movement:created), durumu güncellendiğinde (movement:statusChanged) veya ürünler sevk\/teslim edildiğinde (inventory:updated) ilgili tüm bilgiler anlık olarak yayınlanmaktadır. Bu olay yayınları (emit), veri tabanı transaction'ı tamamlandıktan sonra güvenli bir şekilde çalıştırılmış ve ağ geçidinde oluşabilecek hataların ana işlem akışını bozmasını engellemek için hata yutma (swallow) özelliğine sahip özel bir yardımcı fonksiyon kullanılmıştır.<\/li>
                                                                                                                                                                                                                                                                                                                                                                        4. <\/span>​Envanter (Inventory) Modülü Entegrasyonu:<\/strong> Gerçek zamanlı bildirim yeteneği, manuel stok düzeltme rotalarına da dahil edilmiştir. Stok ayarlamaları yapıldığında anında inventory:updated olayı tetiklenerek ağdaki diğer istemcilerin (örneğin web paneline bakan bir yöneticinin) ekranının otomatik olarak güncellenmesi sağlanmıştır.<\/li>
                                                                                                                                                                                                                                                                                                                                                                        5. <\/span>​Kapsamlı Test Süreçleri ve Veri İzolasyonunun Doğrulanması:<\/strong> Olay yayınları ve gateway bağlantı yönetimi için kapsamlı birim (unit) testleri yazılmıştır. En kritik aşama olarak, çoklu kiracı mimarisinin WebSocket katmanında da kusursuz çalıştığını ve firmaların birbirlerinin anlık verilerini göremediğini kanıtlayan uçtan uca (cross-tenant isolation e2e) testler sisteme kazandırılmıştır. Gün sonunda lint kontrolleri yapılmış, test kapsam (coverage) raporları ve build çıktıları proje dokümantasyonuna eklenerek süreç tamamlanmıştır.<\/li>
                                                                                                                                                                                                                                                                                                                                                                        6. <\/span>
                                                                                                                                                                                                                                                                                                                                                                          <\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>[10:31]<\/strong> (009bdb8<\/em>) fix(shared-types): point package entry to compiled dist output<\/li>
                                                                                                                                                                                                                                                                                                                                                                          2. <\/span>[10:31]<\/strong> (f536548<\/em>) fix(shared-types): emit CommonJS build to dist<\/li>
                                                                                                                                                                                                                                                                                                                                                                          3. <\/span>[10:31]<\/strong> (c426a01<\/em>) feat(shared-types): add socket event catalog and payload types<\/li>
                                                                                                                                                                                                                                                                                                                                                                          4. <\/span>[10:32]<\/strong> (0c75354<\/em>) feat(shared-types): re-export socket events from package index<\/li>
                                                                                                                                                                                                                                                                                                                                                                          5. <\/span>[10:39]<\/strong> (e95e903<\/em>) feat(api): add socket.io and nestjs websockets dependencies<\/li>
                                                                                                                                                                                                                                                                                                                                                                          6. <\/span>[11:00]<\/strong> (22b36d7<\/em>) chore: update lockfile for socket.io dependencies<\/li>
                                                                                                                                                                                                                                                                                                                                                                          7. <\/span>[11:12]<\/strong> (f5f3536<\/em>) feat(api): add inventory gateway with jwt auth and tenant rooms<\/li>
                                                                                                                                                                                                                                                                                                                                                                          8. <\/span>[11:14]<\/strong> (058aa81<\/em>) feat(api): add realtime module providing inventory gateway<\/li>
                                                                                                                                                                                                                                                                                                                                                                          9. <\/span>[11:17]<\/strong> (c28d546<\/em>) feat(api): register realtime module in app module<\/li>
                                                                                                                                                                                                                                                                                                                                                                          10. <\/span>[11:35]<\/strong> (3c4612e<\/em>) feat(config): add optimizeDeps configuration for shared-types<\/li>
                                                                                                                                                                                                                                                                                                                                                                          11. <\/span>[11:39]<\/strong> (c8dfc4d<\/em>) chore(shared-types): fix lint script and add eslint config<\/li>
                                                                                                                                                                                                                                                                                                                                                                          12. <\/span>[12:02]<\/strong> (9a08bb1<\/em>) feat(api): wire RealtimeModule into movements module Imported RealtimeModule so MovementsService can inject InventoryGateway for event broadcasting.<\/li>
                                                                                                                                                                                                                                                                                                                                                                          13. <\/span>[12:26]<\/strong> (f9e8607<\/em>) feat(api): emit movement and inventory events from movements service Broadcasts real-time events per plan §10: movement:created on create, movement:statusChanged on approve\/reject\/cancel\/ship\/receive, and inventory:updated per item on ship\/receive. Emits run outside the Prisma transaction and go through a best-effort emitToTenant helper that swallows gateway failures. Isolation via tenant_{id} room; no tenantId in payloads.<\/li>
                                                                                                                                                                                                                                                                                                                                                                          14. <\/span>[12:53]<\/strong> (490e909<\/em>) test(api): cover movement event emissions Added 10 tests: emit calls per state transition, per-item inventory events on ship\/receive, no-emit on invalid transitions, and graceful behavior when the gateway throws or tenant context is missing.<\/li>
                                                                                                                                                                                                                                                                                                                                                                          15. <\/span>[12:53]<\/strong> (c0c8ef5<\/em>) docs: add day 13 stage 1 and 2 test output logs Unit and e2e run outputs after wiring movement event emissions.<\/li>
                                                                                                                                                                                                                                                                                                                                                                          16. <\/span>[15:08]<\/strong> (d384ef7<\/em>) chore(api): add socket.io-client as dev dependency for realtime e2e<\/li>
                                                                                                                                                                                                                                                                                                                                                                          17. <\/span>[15:09]<\/strong> (9fd2046<\/em>) feat(api): wire RealtimeModule into inventory module<\/li>
                                                                                                                                                                                                                                                                                                                                                                          18. <\/span>[15:11]<\/strong> (a7b79a7<\/em>) feat(api): emit inventory:updated on stock adjust<\/li>
                                                                                                                                                                                                                                                                                                                                                                          19. <\/span>[15:11]<\/strong> (7c8a37b<\/em>) test(api): cover inventory adjust event emission<\/li>
                                                                                                                                                                                                                                                                                                                                                                          20. <\/span>[15:40]<\/strong> (7e8a3c9<\/em>) test(api): add unit tests for InventoryGateway connection handling and event emissions<\/li>
                                                                                                                                                                                                                                                                                                                                                                          21. <\/span>[15:51]<\/strong> (03c7c06<\/em>) test(api): add realtime cross-tenant isolation e2e<\/li>
                                                                                                                                                                                                                                                                                                                                                                          22. <\/span>[16:00]<\/strong> (19e54f3<\/em>) docs: update day 13 unit test output<\/li>
                                                                                                                                                                                                                                                                                                                                                                          23. <\/span>[16:00]<\/strong> (7c7263c<\/em>) docs: update day 13 e2e test output<\/li>
                                                                                                                                                                                                                                                                                                                                                                          24. <\/span>[16:27]<\/strong> (29ca57e<\/em>) docs: add day 13 coverage report<\/li>
                                                                                                                                                                                                                                                                                                                                                                          25. <\/span>[16:28]<\/strong> (4f89eeb<\/em>) docs: add day 13 build output<\/li>
                                                                                                                                                                                                                                                                                                                                                                          26. <\/span>[16:28]<\/strong> (135a99c<\/em>) docs: add day 13 lint output<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                            <\/p>\n\n--- DAY 14 (2026-07-17) ---\n

                                                                                                                                                                                                                                                                                                                                                                            Gün 14 — Web Yönetim Panelinin Kuruluşu<\/h3>

                                                                                                                                                                                                                                                                                                                                                                            Bugün itibarıyla StockRoute projesi 13 gün boyunca sadece bir backend'ti. Kullanıcıların göreceği hiçbir arayüz yoktu; endpoint'ler Scalar üzerinden test ediliyordu. Gün 14'te bu değişti — projenin web yönetim paneli<\/strong> ayağını hayata geçirdim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                            Ne yaptım?<\/h4>

                                                                                                                                                                                                                                                                                                                                                                            Sabahın ilk saatlerinde apps\/web<\/code> altındaki minimal Vite iskeletinin üzerine paketleri kurdum: React Router, Material UI, Zustand (client state), TanStack Query (server state), Axios, React Hook Form ve Zod. Zustand'ı auth token'ı localStorage'da tutmak için, TanStack Query'yi API çağrılarını yönetmek için, React Hook Form + Zod'u ise validasyonu manuel yazmamak için seçtim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                            Ardından tasarım sistemini<\/strong> kurdum. Plan §11'de belirlenen renk paletini (primary #2563EB<\/code>, success #16A34A<\/code>, danger #DC2626<\/code> vs.) MUI temasına aktardım — ama değerleri tek tek yazmak yerine daha önce oluşturulmuş @stockroute\/ui-tokens<\/code> paketinden türetildim. Bu sayede web ve mobil ileride tek görsel dilden beslenecek. Inter fontunu Google Fonts üzerinden yükledim; MUI'nin varsayılan mavisi\/grisi hiçbir yerde kullanılmadı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                            Marka logolarını (docs\/brand\/<\/code> altındaki nihai PNG'ler) entegre ederken bir aksilikle karşılaştım: kaynak PNG'lerin geniş beyaz kenar boşlukları vardı, sidebar'da logo minicik görünüyordu. Görselleri kırptım (yatay logo 1344×768 → 962×170, ikon 1024×1024 → 436×438) ve kırpılmış kopyaları apps\/web\/public\/<\/code> altına koydum.<\/p>

                                                                                                                                                                                                                                                                                                                                                                            Kimlik doğrulama akışı<\/h4>

                                                                                                                                                                                                                                                                                                                                                                            Öğleden sonra auth altyapısına<\/strong> geçtim. Üç dosya kritikti:<\/p>

                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>auth-store.ts<\/strong><\/code> — Zustand + persist middleware ile accessToken<\/code>, user<\/code> ve tenantSlug<\/code> localStorage'da tutuluyor. Sayfa yenilendiğinde oturum kaybolmuyor.<\/li>
                                                                                                                                                                                                                                                                                                                                                                            2. <\/span>api-client.ts<\/strong><\/code> — Axios instance'ı iki interceptor içeriyor: her isteğe otomatik Bearer token ekleniyor, 401 gelirse oturum düşürülüp \/login<\/code>'e yönlendiriliyor. Burada bir tuzak vardı: login isteğinin kendi 401'i bu kurala tabi olursa hatalı şifre denemesi sayfayı yeniler. Bu isteği bilinçli olarak interceptor'dan hariç tuttum.<\/li>
                                                                                                                                                                                                                                                                                                                                                                            3. <\/span>LoginPage.tsx<\/strong><\/code> — mockup'a birebir uydum: ortalanmış 400px kart, üstte büyük logo, Firma Kodu → E-posta → Şifre alanları, 48px tam genişlik primary buton. Validasyon zod ile, hata mesajları Türkçe.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                              Router, korumalı rota ve layout<\/h4>

                                                                                                                                                                                                                                                                                                                                                                              Akşama doğru navigasyon iskeletini<\/strong> kurdum. createBrowserRouter<\/code> ile \/login<\/code> açık, \/<\/code> altındaki tüm sayfalar ProtectedRoute<\/code> içinde: oturum yoksa otomatik \/login<\/code>'e yönlendiriliyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                              Layout, plan §12.1'deki wireframe'e uygun: solda kalıcı 240px sidebar (6 nav item, aktif olan mavi %10 arka plan + 3px sol border ile vurgulanıyor), üstte beyaz sticky topbar (firma slug'ı solda, kullanıcı avatarı sağda). Dashboard'a 4 KPI kartı (Toplam Şube, Toplam Ürün, Bekleyen Transfer, Düşük Stok) ve altta iki bölüm (Son Transferler tablosu \/ Düşük Stok listesi) ekledim — verileri Gün 15'te bağlanacak, şimdilik placeholder.<\/p>

                                                                                                                                                                                                                                                                                                                                                                              Yol boyunca yaşadığım iki teknik sorun<\/h4>

                                                                                                                                                                                                                                                                                                                                                                              1. Vite build'i kırıldı.<\/strong> Gün 13'te shared-types<\/code> paketini CJS'e derlemiştik. Login sayfasında UserRole<\/code> enum'unu import edince dev sunucusunda her şey çalışıyordu ama pnpm build<\/code> komutu \"UserRole is not exported\" hatası veriyordu. Sebebini araştırdım: CJS çıktısındaki __exportStar<\/code> re-export'u Vite'ın Rollup'ı tarafından statik olarak çözülemiyordu. Dev'de esbuild pre-bundle bunu maskeliyordu; production build'de patladı. Çözüm: vite.config.ts<\/code>'e paketi kaynak TypeScript dosyalarına yönlendiren bir alias ekledim (ui-tokens<\/code> paketinin zaten kullandığı deseni takip ettim). Böylece Vite kaynağı doğrudan bundle ediyor; API tarafı hâlâ CJS dist'ten okuyor, etkilenmedi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                              2. <\/strong>UserRole<\/strong><\/code> enum'u yanlış yerde duruyordu.<\/strong> Enum yalnızca API tarafında @prisma\/client<\/code>'ta yaşıyordu, web ise Prisma client'ı import edemez. Planın §5.5'te zaten öngördüğü packages\/shared-types\/src\/enums.ts<\/code> dosyasını oluşturdum: UserRole<\/code>, MovementStatus<\/code>, ProductUnit<\/code>. Değerler Prisma şemasıyla birebir. Web artık bu tek kaynaktan besleniyor; API kodu değişmedi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                              Test etme yaklaşımım<\/h4>

                                                                                                                                                                                                                                                                                                                                                                              Günün sonunda Playwright ile gerçek tarayıcıda 6 senaryoyu test ettim: oturumsuz erişim → login yönlendirmesi, login → dashboard, sidebar navigasyonu, F5 sonrası oturum kalıcılığı, çıkış temizliği, boş form validasyonu, yanlış şifre 401 handling'i. Hepsi geçti, konsol hatası sıfır. Web unit testlerini (Vitest + RTL) Gün 15 sonrasına bıraktım — plan §16 bu şekilde ayrılmış.<\/p>

                                                                                                                                                                                                                                                                                                                                                                              Öğrendiklerim<\/h4>

                                                                                                                                                                                                                                                                                                                                                                              Monorepo'da paylaşılan paketler CJS\/ESM konusunda tehlikeli olabiliyor.<\/strong> Gün 13'te \"CJS yeterli, Vite'ta gerekirse optimizeDeps<\/code> ekleriz\" demiştik. Dev sunucusunda çalıştı ama production build'de patladı. Ders: build'i erken çalıştırmak lazım<\/strong>, sadece dev sunucusuyla yetinmemek. Bir sonraki hafta build kontrolünü CI'a ekleyeceğim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                              Interceptor'lar dikkatli tasarlanmalı.<\/strong> 401 interceptor'ının login isteğini de hedeflemesi klasik bir hata; bunu şans eseri değil, bilinçli olarak düşünüp geçtim. Buna benzer \"her istek için\" mantığı çalışırken hep bir istisna oluyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                              Mockup'a bakarak kod yazmak, tahmin yürütmekten çok daha hızlı.<\/strong> Login sayfasını yazarken sürekli docs\/design\/mockups\/web-login.png<\/code>'e dönüp baktım. Etiketlerin input üstünde mi altında mı olacağı, buton yüksekliği, kart genişliği — hepsi tek tek karar vermek yerine mockup'tan okunuyordu.<\/p>

                                                                                                                                                                                                                                                                                                                                                                              Gün sonu durumu<\/h4>

                                                                                                                                                                                                                                                                                                                                                                              Web paneli artık kullanılabilir<\/strong>: kullanıcı http:\/\/localhost:5173<\/code>'e girip firma kodu + email + şifre ile login olabiliyor, dashboard'u ve boş placeholder sayfaları görüyor, çıkış yapabiliyor. Görsel olarak plan §11.1'deki tasarım sistemine harfiyen uyuyor. Yarın (Gün 15) yönetim ekranlarına (şube, ürün, kullanıcı) gerçek CRUD işlemleri gelecek.<\/p>

                                                                                                                                                                                                                                                                                                                                                                              Toplam commit:<\/strong> 37 (Conventional Commits formatında, atomik).<\/p>

                                                                                                                                                                                                                                                                                                                                                                              PR:<\/strong> feat(web): scaffold admin panel with auth flow<\/code> — reviewer'lara açıldı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>[10:20]<\/strong> (7b7c16a<\/em>) chore(web): install router, mui, zustand, tanstack-query and form deps<\/li>
                                                                                                                                                                                                                                                                                                                                                                              2. <\/span>[10:24]<\/strong> (b0d64a6<\/em>) feat(web): add stockroute meta, favicon and inter font to index.html<\/li>
                                                                                                                                                                                                                                                                                                                                                                              3. <\/span>[10:27]<\/strong> (56fb956<\/em>) feat(web): add stockroute favicon from plan §11.4 reference svg<\/li>
                                                                                                                                                                                                                                                                                                                                                                              4. <\/span>[10:28]<\/strong> (9eb6769<\/em>) chore(web): add env example with api and socket url<\/li>
                                                                                                                                                                                                                                                                                                                                                                              5. <\/span>[10:35]<\/strong> (94d1990<\/em>) feat(web): add mui theme with plan §11 palette and inter typography<\/li>
                                                                                                                                                                                                                                                                                                                                                                              6. <\/span>[10:41]<\/strong> (a197633<\/em>) feat(web): add app providers with query client and theme<\/li>
                                                                                                                                                                                                                                                                                                                                                                              7. <\/span>[10:49]<\/strong> (7f1abc7<\/em>) feat(web): add stockroute logo component with small and large variants<\/li>
                                                                                                                                                                                                                                                                                                                                                                              8. <\/span>[11:08]<\/strong> (510247c<\/em>) feat(web): wire app providers into main entry<\/li>
                                                                                                                                                                                                                                                                                                                                                                              9. <\/span>[11:13]<\/strong> (a30c2f3<\/em>) feat(web): add temporary skeleton screen for stage 1<\/li>
                                                                                                                                                                                                                                                                                                                                                                              10. <\/span>[11:16]<\/strong> (de62b57<\/em>) docs: add day 14 stage 1 skeleton screenshot<\/li>
                                                                                                                                                                                                                                                                                                                                                                              11. <\/span>[12:15]<\/strong> (be89553<\/em>) feat(shared-types): add UserRole, MovementStatus and ProductUnit enums Plan §5.5 already specified this module. Values mirror the Prisma schema so web\/mobile clients can type-check role and status without importing @prisma\/client.<\/li>
                                                                                                                                                                                                                                                                                                                                                                              12. <\/span>[12:16]<\/strong> (68ff4a8<\/em>) feat(shared-types): re-export enums from index<\/li>
                                                                                                                                                                                                                                                                                                                                                                              13. <\/span>[12:16]<\/strong> (e284954<\/em>) feat(web): add zustand auth store with localstorage persist Persists accessToken and user under 'stockroute-auth'. Exposes setAuth, logout and isAuthenticated selectors. JWT expiry check deferred to a later day.<\/li>
                                                                                                                                                                                                                                                                                                                                                                              14. <\/span>[12:18]<\/strong> (6310b47<\/em>) feat(web): add axios api client with bearer token and 401 interceptor Request interceptor attaches the auth store token. Response interceptor logs out and redirects on 401, but skips \/auth\/login itself so a wrong password does not reload the page.<\/li>
                                                                                                                                                                                                                                                                                                                                                                              15. <\/span>[12:26]<\/strong> (b90f406<\/em>) feat(web): add zod login schema with turkish messages<\/li>
                                                                                                                                                                                                                                                                                                                                                                              16. <\/span>[12:43]<\/strong> (f776ccb<\/em>) feat(web): add useLogin mutation hook Calls POST \/auth\/login and pipes the response into the auth store on success.<\/li>
                                                                                                                                                                                                                                                                                                                                                                              17. <\/span>[13:10]<\/strong> (69e49ce<\/em>) feat(web): add login page matching plan §12.1 wireframe - Centered 400px card with large StockRoute logo - Fields: firma kodu, e-posta, şifre with labels above inputs (per mockup) - Full-width 48px primary button with loading state - Turkish zod errors and 401 alert - Small helper text explaining tenant slug<\/li>
                                                                                                                                                                                                                                                                                                                                                                              18. <\/span>[13:13]<\/strong> (86c4c52<\/em>) chore(web): type VITE_API_URL and VITE_SOCKET_URL env vars<\/li>
                                                                                                                                                                                                                                                                                                                                                                              19. <\/span>[13:17]<\/strong> (c29f95d<\/em>) feat(web): render login page as temporary stage 2 entry<\/li>
                                                                                                                                                                                                                                                                                                                                                                              20. <\/span>[13:17]<\/strong> (6e77d97<\/em>) docs: add day 14 stage 2 login screenshot<\/li>
                                                                                                                                                                                                                                                                                                                                                                              21. <\/span>[13:44]<\/strong> (c3df0c6<\/em>) fix(web): resolve shared-types from source in vite via alias The CJS dist emits __exportStar which vite's rollup cannot statically resolve, so UserRole came through as undefined during build (dev worked because optimizeDeps prebundled it). Switched to a source alias matching the ui-tokens pattern; api still consumes the CJS dist unchanged.<\/li>
                                                                                                                                                                                                                                                                                                                                                                              22. <\/span>[13:47]<\/strong> (e1b1660<\/em>) feat(web): add tenantSlug to auth store for topbar display \/auth\/me does not yet return tenant.name; store the slug from the login form as an interim label. TODO(day15): extend backend to return tenant.name and swap the topbar source.<\/li>
                                                                                                                                                                                                                                                                                                                                                                              23. <\/span>[13:58]<\/strong> (ac1cb97<\/em>) feat(web): pass tenantSlug into setAuth on successful login<\/li>
                                                                                                                                                                                                                                                                                                                                                                              24. <\/span>[14:04]<\/strong> (cfca007<\/em>) refactor(web): align login page with mui v9 slotProps api<\/li>
                                                                                                                                                                                                                                                                                                                                                                              25. <\/span>[14:17]<\/strong> (d0bd92b<\/em>) feat(web): add protected route guard redirecting unauthenticated users to \/login<\/li>
                                                                                                                                                                                                                                                                                                                                                                              26. <\/span>[14:28]<\/strong> (b1ee5f9<\/em>) feat(web): add sidebar with 6 nav items and active state matching mockup 240px permanent drawer with small logo, MENÜ label, and nav items for dashboard, branches, products, inventory, movements and users. Active item gets primary 10% background, 3px left border and primary text\/icon. Logout at the bottom.<\/li>
                                                                                                                                                                                                                                                                                                                                                                              27. <\/span>[14:37]<\/strong> (b5d224f<\/em>) feat(web): add user badge with role-colored label Initials avatar plus full name and turkish role label. Role color follows plan §11.1 (FIRM_ADMIN primary, BRANCH_MANAGER info, WAREHOUSE_STAFF warning, FIELD_STAFF gray).<\/li>
                                                                                                                                                                                                                                                                                                                                                                              28. <\/span>[14:43]<\/strong> (2e8ada4<\/em>) feat(web): add layout with sidebar, sticky topbar and outlet Follows plan §12.1 wireframe: permanent sidebar on the left, white sticky topbar with tenant identity and user badge, page content via .<\/li>
                                                                                                                                                                                                                                                                                                                                                                              29. <\/span>[14:46]<\/strong> (716c319<\/em>) feat(web): add dashboard with kpi cards and placeholder sections Four KPI cards (branches, products, pending transfers, low stock) with tinted icon boxes, 8\/4 grid below with empty recent-transfers table and low-stock list. Real data wiring deferred to day 15.<\/li>
                                                                                                                                                                                                                                                                                                                                                                              30. <\/span>[14:46]<\/strong> (407a626<\/em>) feat(web): add branches page placeholder<\/li>
                                                                                                                                                                                                                                                                                                                                                                              31. <\/span>[14:46]<\/strong> (71fd931<\/em>) feat(web): add products page placeholder<\/li>
                                                                                                                                                                                                                                                                                                                                                                              32. <\/span>[15:16]<\/strong> (b75c120<\/em>) feat(web): add Inventory, Movements, and Users pages with placeholders<\/li>
                                                                                                                                                                                                                                                                                                                                                                              33. <\/span>[15:44]<\/strong> (29ef69c<\/em>) feat(web): add router with protected routes and layout createBrowserRouter with public \/login, protected \/ branch under Layout, and catch-all redirect to \/.<\/li>
                                                                                                                                                                                                                                                                                                                                                                              34. <\/span>[17:03]<\/strong> (f81d27f<\/em>) chore(web): re-export statusColors for future transfer chips<\/li>
                                                                                                                                                                                                                                                                                                                                                                              35. <\/span>[17:04]<\/strong> (93fe690<\/em>) feat(web): render router provider as app entry<\/li>
                                                                                                                                                                                                                                                                                                                                                                              36. <\/span>[17:08]<\/strong> (1ecbb93<\/em>) feat(web): replace reference svg logo with final png brand assets Swapped the plan §11.4 reference SVG for the finalized PNG logo and app icon under public\/. Logo component now renders the PNG in both small and large variants; favicon reference in index.html updated accordingly.<\/li>
                                                                                                                                                                                                                                                                                                                                                                              37. <\/span>[17:12]<\/strong> (a4a63ad<\/em>) docs: add day 14 stage 3 build and lint outputs<\/li>
                                                                                                                                                                                                                                                                                                                                                                              38. <\/span>[17:13]<\/strong> (c7e0b7c<\/em>) docs: add day 14 dashboard screenshot<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                <\/p>\n\n--- DAY 15 (2026-07-20) ---\n

                                                                                                                                                                                                                                                                                                                                                                                Gün 14'te web panelinin sadece iskeletini kurmuştum — giriş yapılabiliyordu ama sidebar'daki hiçbir menü gerçek bir şey göstermiyordu. Bugün bu boşlukları doldurdum: Şubeler<\/strong>, Ürünler<\/strong> ve Kullanıcılar<\/strong> ekranlarının üçünü de baştan sona, gerçek API'ye bağlı olarak tamamladım.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                Nasıl başladım?<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                Kod yazmadan önce docs\/design\/mockups\/<\/code> klasöründeki ekran tasarımlarını tek tek inceledim ve gerçek veritabanı şemasıyla karşılaştırdım. Bu, gün içinde çok işime yaradı — hangi alanların formda olacağını, tablo sütunlarının sırasını, buton yerleşimini tahmin etmek yerine doğrudan tasarımdan okuyabildim. Örneğin şube kodu alanının \"SB-KDK\" gibi bir formatta olması, kod alanının firma içinde benzersiz olması gerektiği gibi detaylar hep mockup'tan geldi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                Ortak altyapı<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                Üç ekran da benzer ihtiyaçlara sahipti (tablo, form modalı, silme onayı, bildirim), bu yüzden önce paylaşılan bileşenleri yazdım: sayfa başlığı, silme onay dialogu, boş liste görünümü, tablo yükleme iskeleti ve bildirim (snackbar) altyapısı. Bu sayede her ekranda aynı kodu tekrar yazmadım, DRY prensibine uydum.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                Şubeler ekranı<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                İlk tamamladığım ekran. Tablo halinde şube listesi, sağ üstte \"Yeni Şube\" butonu, tıklanınca açılan modal formda ad\/kod\/şehir\/adres\/telefon alanları ve aktif\/pasif durumu. Sadece firma yöneticisi (FIRM_ADMIN) yeni şube ekleyebiliyor, düzenleyebiliyor veya silebiliyor — diğer roller listeyi görüyor ama aksiyon butonlarını göremiyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                Ürünler ekranı<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                Bu ekranda ekstra olarak arama özelliği ekledim. Kullanıcı yazarken sistem 500 milisaniye bekleyip sonra sunucuya sorgu atıyor — böylece her harf tuşuna basıldığında gereksiz istek gitmiyor. Ürün birimi (adet, kilogram, litre, koli, paket) için açılır liste ekledim, bu değerler hem formda hem tabloda tutarlı görünüyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                Kullanıcılar ekranı — günün en karmaşık kısmı<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                Bu ekranı yazarken ilginç bir şey fark ettim: backend'de kullanıcı yönetimi için hiçbir endpoint yoktu. Planın 9.3 numaralı bölümünde bu endpoint'ler tanımlıydı ama önceki günlerde modül olarak hiç oluşturulmamış. Web ekranını yazabilmek için önce backend'e bu eksik parçayı ekledim — mevcut şube ve ürün modüllerinin yapısına birebir uyarak, kullanıcı oluşturma\/listeleme\/güncelleme\/silme endpoint'lerini yazdım. Şifreler bcrypt ile şifreleniyor, hiçbir zaman API cevabında görünmüyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                Kullanıcı formunda rol seçimi yapılırken, eğer \"Firma Yöneticisi\" rolü seçilirse şube alanı otomatik gizleniyor çünkü firma yöneticisinin belirli bir şubesi olmuyor. Ayrıca kendi hesabını silme girişimini hem arayüzde hem backend'de engelledim — kullanıcı kendi satırındaki sil butonuna tıklayamıyor, ayrıca sunucu tarafında da bu durum ayrıca kontrol ediliyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                Rol bazlı erişim kontrolü<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                Gün 14'te tüm menü öğeleri her role görünüyordu. Bugün bunu düzelttim: sidebar artık kullanıcının rolüne göre menü öğelerini gösteriyor veya gizliyor. Örneğin depo personeli \"Kullanıcılar\" menüsünü hiç görmüyor. Ayrıca birisi doğrudan URL'ye yazarak yetkisi olmayan bir sayfaya gitmeye çalışırsa, otomatik olarak ana sayfaya yönlendiriliyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                Test etme<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                Gerçek tarayıcıda (Playwright ile) 31 farklı senaryoyu test ettim: şube\/ürün\/kullanıcı oluşturma-düzenleme-silme akışları, arama filtreleme, rol bazlı erişim kısıtlamaları, kendi hesabını silememe durumu. Hepsi başarıyla geçti, konsol hatası sıfır.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                Öğrendiklerim<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                Tasarımı önce incelemek zaman kazandırıyor.<\/strong> Mockup'lara bakmadan kod yazsaydım muhtemelen form alanlarını yanlış sırada koyar, sonra geri dönüp düzeltirdim. Önce inceleyip sonra yazmak çok daha verimli.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                Eksik bir parçayı fark etmek de işin bir kısmı.<\/strong> Backend'de kullanıcı modülünün hiç olmadığını fark etmek beni şaşırttı ama bu aslında normal bir durum — büyük projelerde planın bir kısmı atlanabiliyor. Önemli olan bunu fark edip, mevcut kod yapısına uyumlu şekilde tamamlamak.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                Küçük güvenlik detayları önemli.<\/strong> Kendi hesabını silme durumu gibi ince bir senaryoyu hem arayüzde hem sunucuda ayrı ayrı kontrol etmek gerekiyor — sadece arayüzde engellemek yetmiyor, çünkü biri API'yi doğrudan çağırabilir.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                Gün sonu durumu<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                Web paneli artık gerçek anlamda kullanılabilir bir yönetim aracı<\/strong>: firma yöneticisi şube açabiliyor, ürün ekleyebiliyor, yeni kullanıcı davet edip rol atayabiliyor. Üç ekran da mockup'lara sadık, API'ye tam bağlı ve test edilmiş durumda. Yarın (Gün 16) envanter ve transfer ekranlarına geçeceğim.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>[10:45]<\/strong> (2f816f2<\/em>) feat(api): add CreateUserDto for users module email, password (min 8 \/ max 72 for bcrypt), fullName, role, optional branchId and isActive.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                2. <\/span>[10:45]<\/strong> (491bbb1<\/em>) feat(api): add UpdateUserDto extending PartialType(CreateUserDto) All fields optional so password stays unchanged when omitted; matches the branches\/products dto pattern.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                3. <\/span>[10:46]<\/strong> (86f1d98<\/em>) feat(api): add UsersService with CRUD, bcrypt hashing and safe user projection Follows branches\/products service pattern. Passwords hashed with bcrypt (10 rounds, same as auth). Prisma extension handles tenant scoping — no manual tenantId. Local toSafeUser helper strips passwordHash. Self-delete protection via currentUserId. P2002 unique conflicts mapped to 409.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                4. <\/span>[10:48]<\/strong> (845cf5c<\/em>) feat(api): add UsersController with FIRM_ADMIN only routes POST\/GET\/GET(:id)\/PATCH\/DELETE under \/users, all guarded by JwtAuthGuard + RolesGuard with @Roles(FIRM_ADMIN) per plan §9.3. Delete passes @CurrentUser().userId to the service so self-delete returns 400. Documented via @ApiTags, @ApiOperation and @ApiResponse for Scalar.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                5. <\/span>[10:48]<\/strong> (8682bad<\/em>) feat(api): add UsersModule<\/li>
                                                                                                                                                                                                                                                                                                                                                                                6. <\/span>[10:49]<\/strong> (84faf10<\/em>) feat(api): register UsersModule in the app module Placed next to BranchesModule and ProductsModule to keep domain modules grouped.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                7. <\/span>[11:13]<\/strong> (1f073af<\/em>) feat(web): wire snackbar provider into app providers<\/li>
                                                                                                                                                                                                                                                                                                                                                                                8. <\/span>[11:13]<\/strong> (57e85e0<\/em>) feat(web): add page header component with title and action slot<\/li>
                                                                                                                                                                                                                                                                                                                                                                                9. <\/span>[11:13]<\/strong> (0618645<\/em>) feat(web): add confirm dialog with loading state for destructive actions<\/li>
                                                                                                                                                                                                                                                                                                                                                                                10. <\/span>[11:16]<\/strong> (e768737<\/em>) feat(web): add empty state component for empty and error lists<\/li>
                                                                                                                                                                                                                                                                                                                                                                                11. <\/span>[11:16]<\/strong> (ff983b5<\/em>) feat(web): add data table skeleton for loading states<\/li>
                                                                                                                                                                                                                                                                                                                                                                                12. <\/span>[11:16]<\/strong> (cb42ebc<\/em>) feat(web): add snackbar provider with useSnackbar hook Exposes showSuccess\/showError for mutation feedback across feature pages.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                13. <\/span>[11:18]<\/strong> (a2f9dd5<\/em>) feat(web): add helper to extract turkish error messages from api responses<\/li>
                                                                                                                                                                                                                                                                                                                                                                                14. <\/span>[11:24]<\/strong> (f22be93<\/em>) feat(web): add Branch response type<\/li>
                                                                                                                                                                                                                                                                                                                                                                                15. <\/span>[11:24]<\/strong> (b937eea<\/em>) feat(web): add zod schema for branch create\/edit form<\/li>
                                                                                                                                                                                                                                                                                                                                                                                16. <\/span>[11:27]<\/strong> (a422712<\/em>) feat(web): add branches api client functions<\/li>
                                                                                                                                                                                                                                                                                                                                                                                17. <\/span>[11:42]<\/strong> (bcf5654<\/em>) feat(web): add useBranches query hook<\/li>
                                                                                                                                                                                                                                                                                                                                                                                18. <\/span>[11:50]<\/strong> (987f17a<\/em>) feat(web): add branch create, update and delete mutation hooks Invalidates the branches query on success and surfaces api errors via snackbar.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                19. <\/span>[12:02]<\/strong> (c06964e<\/em>) feat(web): add branch form dialog for create and edit City kept as free text since the backend has no fixed city list, diverging from the mockup's select intentionally. Fields match the api dto: name, code, city, address, phone, isActive.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                20. <\/span>[12:04]<\/strong> (d88ac40<\/em>) feat(web): add branches crud page with table, search-free list and rbac gating Table columns limited to what the api returns (Ad, Kod, Şehir, Durum, Aksiyon) — mockup columns without an api counterpart were dropped. Only FIRM_ADMIN sees create\/edit\/delete actions; other authorized roles get read-only list.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                21. <\/span>[12:04]<\/strong> (52acb29<\/em>) docs: add branches list and branch form screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                22. <\/span>[12:13]<\/strong> (c4938fa<\/em>) feat(web): add useDebouncedValue hook for search inputs<\/li>
                                                                                                                                                                                                                                                                                                                                                                                23. <\/span>[12:20]<\/strong> (004472a<\/em>) feat(web): add Product type and zod schema with unit labels ProductUnit values mapped to Turkish labels (Adet\/Kg\/Litre\/Koli\/Paket) for the form select.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                24. <\/span>[12:24]<\/strong> (e8551d3<\/em>) feat(web): add products api client and query\/mutation hooks useProducts includes search in the query key with keepPreviousData for smooth debounced filtering. Mutations invalidate ['products'] on success.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                25. <\/span>[12:30]<\/strong> (cfc2eaa<\/em>) feat(web): add product form dialog with unit select Matches web-yeni_urun mockup: sku\/barcode helper text, unit dropdown. minStockThreshold intentionally excluded — it belongs to Inventory, not Product.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                26. <\/span>[12:31]<\/strong> (c483b85<\/em>) feat(web): enhance ProductsPage with CRUD functionality and improved UI components<\/li>
                                                                                                                                                                                                                                                                                                                                                                                27. <\/span>[12:54]<\/strong> (93f9e4c<\/em>) docs: add day 15 products list, search and form screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                28. <\/span>[15:16]<\/strong> (3c2e23b<\/em>) feat(web): gate users route behind FIRM_ADMIN role guard<\/li>
                                                                                                                                                                                                                                                                                                                                                                                29. <\/span>[15:16]<\/strong> (188f66d<\/em>) feat(web): add role guard component for role-restricted routes Redirects to \/ when the current user's role is not in the allowed list, for routes protected beyond plain authentication.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                30. <\/span>[15:16]<\/strong> (1e82d2c<\/em>) feat(web): hide sidebar items the current role cannot access Kullanıcılar limited to FIRM_ADMIN, Ürünler to FIRM_ADMIN\/BRANCH_MANAGER\/WAREHOUSE_STAFF.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                31. <\/span>[15:26]<\/strong> (cf7db36<\/em>) refactor(web): use shared role labels module in user badge<\/li>
                                                                                                                                                                                                                                                                                                                                                                                32. <\/span>[15:26]<\/strong> (de58f5c<\/em>) feat(web): add zod schema for user create\/edit form Password required on create, optional on edit so it stays unchanged when left blank.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                33. <\/span>[15:27]<\/strong> (37d7fec<\/em>) feat(web): add User response type<\/li>
                                                                                                                                                                                                                                                                                                                                                                                34. <\/span>[15:27]<\/strong> (00e1e6d<\/em>) feat(web): add user form dialog with role and branch assignment Role select with 5 options (SUPER_ADMIN excluded from the picker). Branch field disabled and hidden when role is FIRM_ADMIN.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                35. <\/span>[15:31]<\/strong> (2ed40f5<\/em>) feat(web): add users crud page restricted to FIRM_ADMIN Table: Ad, E-posta, Rol (colored chip), Şube, Aksiyon.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                36. <\/span>[15:31]<\/strong> (430cd48<\/em>) feat(web): add users api client functions<\/li>
                                                                                                                                                                                                                                                                                                                                                                                37. <\/span>[15:32]<\/strong> (e2ed8ed<\/em>) feat(web): add user create, update and delete mutation hooks<\/li>
                                                                                                                                                                                                                                                                                                                                                                                38. <\/span>[15:48]<\/strong> (727519c<\/em>) feat(web): add useUsers query hook<\/li>
                                                                                                                                                                                                                                                                                                                                                                                39. <\/span>[15:49]<\/strong> (0bb4705<\/em>) refactor(web): extract role labels and colors to shared module Centralizes the UserRole to Turkish label and color mapping so UserBadge and the users table stay in sync.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                40. <\/span>[15:50]<\/strong> (3848af8<\/em>) docs: add users list,user form and sidebar admin screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                41. <\/span>[15:50]<\/strong> (ed7059b<\/em>) docs: add day 15 build output<\/li>
                                                                                                                                                                                                                                                                                                                                                                                42. <\/span>[16:00]<\/strong> (26a03fb<\/em>) docs: add day 15 lint output<\/li><\/ol>\n\n--- DAY 16 (2026-07-21) ---\n

                                                                                                                                                                                                                                                                                                                                                                                  Gün 16 — Envanter ve Transfer Ekranları<\/h3>

                                                                                                                                                                                                                                                                                                                                                                                  Bugün web panelinin iki temel operasyonel ekranı geliştirildi: Envanter<\/strong> ve Transferler<\/strong>. Bu iki ekran, stok takip sisteminin çekirdek işlevini oluşturuyor — hangi şubede ne kadar ürün olduğunun görüntülenmesi ve şubeler arası stok transferinin yönetilmesi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                  Envanter Ekranı<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                  Şube bazlı stok görüntüleme ekranı yapıldı. Kullanıcı bir şube seçtiğinde o şubedeki ürünlerin güncel stok miktarları, minimum eşikleri ve durumları tablo halinde listeleniyor. Stoğu minimum eşiğin altındaki ürünler kırmızı ile vurgulanıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                  Stok düzeltme işlevi eklendi. Backend'in mutlak miktar yerine değişim değeri (delta) beklediği için, modal ekranda mevcut miktar ve girilen değere göre hesaplanan yeni miktar canlı olarak gösteriliyor. Negatif sonuç oluşacaksa işlem gönderilmeden önce uyarı veriliyor. Stok düzeltmede \"neden\" alanı zorunlu tutuldu; böylece her düzeltme kayıt altına alınabiliyor (audit trail).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                  Rol bazlı erişim uygulandı: stok düzeltme yalnızca şube müdürü ve depo personeline açık. Şube listesine erişimi olmayan roller (depo\/saha personeli) kendi şubelerini otomatik görüyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                  Transfer Ekranı<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                  Transfer iş akışının tamamı arayüze taşındı. Ekran üç parçadan oluşuyor: transfer listesi, transfer detayı ve transfer oluşturma.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                  Liste:<\/strong> Durum filtreleri (beklemede, onaylandı, yolda, teslim alındı, reddedildi, iptal), arama ve sayfalama eklendi. Durum bilgisi renkli chip'lerle gösteriliyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                  Oluşturma:<\/strong> Çoklu ürün destekleyen dinamik form yapıldı — tek transferde birden fazla ürün eklenebiliyor. Kaynak ve hedef şube seçimi, ürün ve miktar alanları mevcut. Kaynak şube seçildiğinde o şubedeki stok miktarı gösteriliyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                  Durum makinesi ve aksiyonlar:<\/strong> Onayla, Reddet, Sevk Et, Teslim Al, İptal Et butonları hem transferin durumuna hem kullanıcının rolüne göre görünüyor. Bu kurallar tek bir dosyada toplanarak liste ve detay ekranlarının tutarlı çalışması sağlandı. Stok hareketi oluşturan işlemler (sevk, teslim) onay dialogu ile korunuyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                  Backend Tamamlamaları<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                  Web ekranları yazılırken planda eksik veya fazla kısıtlı olan beş uç noktası tespit edilip tamamlandı:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>\/auth\/me<\/code> cevabına kullanıcının şube bilgisi eklendi (şube listesine erişemeyen roller kendi şubesini alabilsin diye).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>PATCH \/inventory\/:id\/threshold<\/code> eklendi — düşük stok eşiği artık düzenlenebiliyor. Eşik bir ayar olduğundan, stok hareketlerinden farklı olarak audit log'a yazılmıyor.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                  3. <\/span>GET \/branches\/selectable<\/code> eklendi — transfer formunda şube seçimi için tüm rollere açık, yalnızca id\/ad\/kod dönen minimal uç.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                  4. <\/span>GET \/products<\/code> saha personeline açıldı — transfer formunda ürün seçebilmesi için.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                    Düzeltilen Hatalar<\/h4>
                                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>Transfer oluştururken aynı ürün iki kez eklenirse veritabanı kısıtı ihlali 500 hatası veriyordu. Uygulama katmanında erken kontrol eklenerek anlamlı bir 400 mesajına çevrildi.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                    2. <\/span>Yetki hatalarında (401\/403\/404) gereksiz yere tekrar deneme yapılması engellendi.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                      Test<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                      Playwright ile 62 senaryo test edildi (envanter, transfer oluşturma, durum geçişleri, rol bazlı yetkiler). Backend değişiklikleri için mevcut API testleri (58 test) tekrar çalıştırıldı; regresyon olmadığı doğrulandı. Web ve API build\/lint çıktıları temiz.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                      Neler Öğrendim<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                      Bir sorunu çözerken zincirin tamamını takip etmek gerekiyor.<\/strong> Transfer formunun çalışması için şube erişimi yeterli sandım, ama ürün erişiminin de eksik olduğu sonradan ortaya çıktı. Yarım çözüm, \"çalışıyor\" sanılıp beklenmedik yerde patladığı için bazen hiç çözmemekten daha risklidir.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                      Kavramsal ayrım, kod kalitesini belirliyor.<\/strong> Eşik belirlemek bir \"ayar\", stok düzeltmek bir \"hareket\". Bu ikisini aynı mekanizmaya koymak, audit log'u anlamsız kayıtlarla kirletirdi. Doğru soyutlama baştan yapıldığında ileriki karmaşa önleniyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                      HTTP durum kodları kullanıcıya mesaj taşıyor.<\/strong> 500 \"sunucuda beklenmeyen hata\" demek; 400 \"istek hatalı\" demek. Öngörülebilir kullanıcı hatalarını 400'e çevirmek, hem daha doğru geri bildirim veriyor hem de gerçek sunucu hatalarını gürültüden ayırmayı kolaylaştırıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                      Test altyapısı, sonraki günlerde güven sağlıyor.<\/strong> Daha önce yazılan API testleri sayesinde bugün backend'e çekinmeden dokunulabildi; bir şeyin bozulup bozulmadığı anında görülebildi.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                      <\/p>


                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>[10:38]<\/strong> (db8ad70<\/em>) feat(web): add inventory types with low-stock helper<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      2. <\/span>[10:38]<\/strong> (1d920e3<\/em>) feat(web): add zod schema for stock adjustment quantity is a delta (not absolute); reason required in UI (min 3) for audit trail quality though the backend accepts it as optional.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      3. <\/span>[10:39]<\/strong> (b2e4ae6<\/em>) feat(web): add inventory api client for fetch and adjust<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      4. <\/span>[10:45]<\/strong> (9acc82c<\/em>) feat(web): add stock adjust mutation hook<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      5. <\/span>[10:46]<\/strong> (a496b82<\/em>) feat(web): add enabled option to useBranches hook Lets callers skip the branches fetch for roles without GET \/branches access; defaults to true so existing callers are unaffected.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      6. <\/span>[10:47]<\/strong> (83317b0<\/em>) feat(web): add stock adjustment dialog with live delta preview Single \"miktar değişimi\" field with helper text; shows current quantity and a live \"new quantity\" preview, flagging negative results before the backend rejects them.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      7. <\/span>[11:01]<\/strong> (6394aa7<\/em>) feat(web): add inventory page with branch selector, low-stock highlight and rbac Low-stock rows highlighted via theme error alpha. Roles without GET \/branches access (WAREHOUSE_STAFF, FIELD_STAFF) get a branch-less view with an added ŞUBE column instead of a broken selector. Client-side search and pagination.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      8. <\/span>[11:03]<\/strong> (11471a5<\/em>) feat(web): add useInventory query hook with branch and low-stock filters<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      9. <\/span>[11:03]<\/strong> (cf9d018<\/em>) docs: add day 16 inventory screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      10. <\/span>[11:15]<\/strong> (910c2b9<\/em>) feat(api): include branch summary in \/auth\/me profile getProfile now includes the user's branch (id, name, code, city) via a new UserProfile type. login\/registerTenant responses keep their existing SafeUser contract untouched — branch is exposed only on \/auth\/me.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      11. <\/span>[11:15]<\/strong> (cdcd2c0<\/em>) feat(api): document branch field on \/auth\/me response Return type set to UserProfile with branch documented as nullable in the OpenAPI schema.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      12. <\/span>[11:15]<\/strong> (a26eae2<\/em>) feat(web): add useProfile hook for \/auth\/me Fetches the current user's profile including branch, with 5 min staleTime. Keeps the auth store as a login snapshot and reads live branch info here instead.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      13. <\/span>[11:17]<\/strong> (9bef349<\/em>) refactor(web): show own-branch inventory for warehouse and field staff Replaces the interim branch-less view: WAREHOUSE_STAFF\/FIELD_STAFF now auto-use their own branch from \/auth\/me (no cross-branch leakage), FIRM_ADMIN\/BRANCH_MANAGER keep the selector. Users with no branch get an informative empty state.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      14. <\/span>[11:17]<\/strong> (8faee6b<\/em>) docs: add day 16 own-branch and no-branch inventory screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      15. <\/span>[11:32]<\/strong> (31d2c8d<\/em>) feat(api): add UpdateThresholdDto for inventory threshold<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      16. <\/span>[11:33]<\/strong> (34194a8<\/em>) feat(api): add updateThreshold to inventory service Updates only minThreshold and writes no audit log — a threshold is a setting, not a stock movement. 404 when the record is missing; tenant scoping handled by the prisma extension.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      17. <\/span>[11:33]<\/strong> (ac3c255<\/em>) feat(api): add PATCH \/inventory\/:id\/threshold endpoint Restricted to FIRM_ADMIN and BRANCH_MANAGER (threshold is a management decision, not stock handling). Named path avoids clashing with POST \/inventory\/adjust and leaves room for a future generic PATCH \/inventory\/:id.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      18. <\/span>[11:43]<\/strong> (31e252a<\/em>) feat(web): add threshold schema to inventory schemas<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      19. <\/span>[11:43]<\/strong> (df627a0<\/em>) feat(web): add updateThreshold api call<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      20. <\/span>[11:43]<\/strong> (ae8fd62<\/em>) feat(web): add threshold mutation hook<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      21. <\/span>[11:54]<\/strong> (60a30e9<\/em>) feat(web): add threshold edit dialog Shows product name and current stock with a single integer field for the low-stock threshold.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      22. <\/span>[11:54]<\/strong> (144401f<\/em>) feat(web): make min threshold cell editable for managers MİN EŞİK cell is clickable with an edit icon for FIRM_ADMIN\/BRANCH_MANAGER, plain text for other roles.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      23. <\/span>[11:55]<\/strong> (c3d83e1<\/em>) docs: add day 16 inventory screenshots including threshold edit<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      24. <\/span>[12:29]<\/strong> (090fce4<\/em>) feat(web): add movement types separating list and detail shapes Movement (list) and MovementDetail differ: items carry the product relation only in the detail response. Separate types make accessing product name in a list row a compile error instead of a runtime undefined.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      25. <\/span>[12:29]<\/strong> (cf8f40e<\/em>) feat(web): add movement status labels and filter helpers Turkish status labels, filter ordering and a terminal-status helper.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      26. <\/span>[12:29]<\/strong> (8a735fd<\/em>) feat(web): add movement id and date formatting helpers<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      27. <\/span>[12:45]<\/strong> (d475d20<\/em>) feat(web): add movements api client for list, detail, create and actions runMovementAction wraps the five bodiless state-transition POSTs behind one call.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      28. <\/span>[12:47]<\/strong> (88a2e28<\/em>) feat(web): add hooks for fetching movement details and list<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      29. <\/span>[13:06]<\/strong> (45c250d<\/em>) feat(web): add single mutation for movement state transitions approve\/reject\/ship\/receive\/cancel share the same shape, so one actionMutation takes the action as a parameter; wired to buttons in the next stage.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      30. <\/span>[13:06]<\/strong> (ce0610b<\/em>) feat(web): add movement status chip consuming statusColors Dotted soft-background chip with Turkish labels, reusing the shared statusColors from the theme.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      31. <\/span>[13:14]<\/strong> (40fb1ed<\/em>) feat(web): add movement detail dialog with item table and actions slot Renders header info, the multi-item table and a note. Action buttons are injected via an actions prop so the RBAC + state-machine decision lives on the page, not the dialog.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      32. <\/span>[13:14]<\/strong> (d637a58<\/em>) feat(web): add movements list page with status filter, search and counts Status filter chips with client-side counts, search and pagination. Multi-item transfers summarized as \"N kalem\"; single-item rows show the quantity. Added a Cancelled filter chip absent from the mockup but present in the state machine.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      33. <\/span>[13:14]<\/strong> (9ebd847<\/em>) docs: add day 16 movements list, filtered and detail screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      34. <\/span>[13:48]<\/strong> (4a3bfb4<\/em>) fix(web): skip retry on 401\/403\/404 responses Auth and not-found errors were being retried once unnecessarily; excluded them so permission failures fail fast.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      35. <\/span>[13:54]<\/strong> (366d1cf<\/em>) feat(web): add movement form schema with multi-item and duplicate guard Requires at least one item, blocks same source\/destination branch and rejects the same product added twice.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      36. <\/span>[13:54]<\/strong> (b82c364<\/em>) feat(web): add movement action rules as single source of truth Encodes each action's state + role matrix, label and confirm text. Both the row buttons and the detail dialog derive visibility from availableActions() so they can never diverge.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      37. <\/span>[13:55]<\/strong> (46bf1f4<\/em>) feat(web): add shared movement action buttons for row and dialog stopPropagation keeps row-level action clicks from opening the detail dialog.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      38. <\/span>[13:56]<\/strong> (086bc73<\/em>) feat(web): add multi-item transfer creation dialog Dynamic product rows via useFieldArray with add\/remove; source branch selection surfaces per-branch stock from inventory. Empty note omitted from the payload.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      39. <\/span>[13:56]<\/strong> (4ba174e<\/em>) feat(web): add transfer create mutation hook<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      40. <\/span>[14:09]<\/strong> (38e8e5c<\/em>) feat(web): wire transfer creation and workflow actions into movements page New Transfer button, AKSİYON column with state+role gated buttons, and ConfirmDialog for each transition (especially ship\/receive which move stock).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      41. <\/span>[14:10]<\/strong> (a60217b<\/em>) docs: add day 16 transfer creation and action screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      42. <\/span>[17:26]<\/strong> (bc19190<\/em>) fix(api): return 400 instead of 500 for duplicate product in transfer items with the same productId twice violated @@unique([movementId, productId]) at the DB layer, surfacing as a 500. Added an early Set-based uniqueness check in create() so this predictable user error returns a 400 with a clear message before hitting the database. Ordered with the cheap same-branch check ahead of the existence queries.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      43. <\/span>[17:26]<\/strong> (50c2eb4<\/em>) docs(api): document duplicate-product 400 case on movement create<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      44. <\/span>[17:42]<\/strong> (f13a436<\/em>) feat(api): add findSelectable returning minimal branch list<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      45. <\/span>[17:42]<\/strong> (69cf61f<\/em>) feat(api): add GET \/branches\/selectable open to all roles Read-only minimal list (id, name, code) of active branches for transfer\/selection screens, available to every role. Full GET \/branches (management detail) stays limited to FIRM_ADMIN\/BRANCH_MANAGER. Route declared before \/:id to avoid the param catching \"selectable\".<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      46. <\/span>[17:42]<\/strong> (e3ef3ed<\/em>) feat(web): add SelectableBranch type<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      47. <\/span>[17:43]<\/strong> (e5269f0<\/em>) feat(web): add fetchSelectableBranches api call<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      48. <\/span>[17:43]<\/strong> (b75f908<\/em>) feat(web): add useSelectableBranches hook open to all roles<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      49. <\/span>[17:43]<\/strong> (5a25c29<\/em>) feat(web): source transfer branch selectors from selectable endpoint Lets WAREHOUSE_STAFF\/FIELD_STAFF pick branches in the transfer form; removed the \"no branch access\" warning. Inventory screen's useBranches usage untouched.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      50. <\/span>[17:43]<\/strong> (87190af<\/em>) docs: add day 16 transfer form screenshots for field and warehouse staff<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      51. <\/span>[18:06]<\/strong> (389962a<\/em>) feat(api): allow FIELD_STAFF to list products GET \/products now includes FIELD_STAFF so the role can pick products in the transfer form (plan §9.6 allows all roles to create transfers). Product management (POST\/PATCH\/DELETE) permissions unchanged — FIELD_STAFF still cannot manage products, only list them.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      52. <\/span>[18:06]<\/strong> (d7791e8<\/em>) docs: refresh day 16 transfer screenshots after field-staff fix<\/li>
                                                                                                                                                                                                                                                                                                                                                                                      53. <\/span>[18:10]<\/strong> (bd3e7ed<\/em>) docs: add day 16 build and lint outputs for web and api Co-Authored-By: Claude Opus 4.8 <\/li><\/ol>\n\n--- DAY 17 (2026-07-22) ---\n

                                                                                                                                                                                                                                                                                                                                                                                        Bugün iki büyük iş tamamlandı: web panelinin gerçek zamanlı hale getirilmesi (real-time) ve dashboard'un canlandırılması. Ayrıca planda normalde son güne (Gün 20) bırakılmış olan Docker yapılandırması, teslim gününün yükünü azaltmak için öne çekilerek bugün bitirildi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Socket.io Client Bağlantısı<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                        Backend'in socket altyapısı Gün 13'te kurulmuştu; bugün web tarafını buna bağladım. Uygulama genelinde tek bir bağlantı olacak şekilde bir singleton yapısı kurdum — her bileşen kendi bağlantısını açmasın diye. Kullanıcı giriş yaptığında bağlantı kuruluyor, çıkış yaptığında kapanıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Burada React'in StrictMode özelliğinden kaynaklanan bir sorun çıktı: geliştirme modunda React efektleri iki kez çalıştırdığı için bağlantı açılıp hemen kapanıyor, sonra tekrar açılıyordu. Bunu 300 milisaniyelik gecikmeli kapatma mantığıyla çözdüm — bağlantı kapatılmadan önce kısa süre bekleniyor, bu sürede yeni bir bağlantı isteği gelirse mevcut bağlantı korunuyor. Gerçek çıkışta ise süre dolup bağlantı kapanıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Canlı Güncellemeler<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                        Önceki günlerde bir kullanıcı transfer oluşturduğunda diğerleri ancak sayfayı yenileyince görüyordu. Bugün bunu değiştirdim: artık bir olay geldiğinde ilgili veri sorgusu geçersiz kılınıp otomatik yenileniyor. Böylece transfer oluşturma, durum değişikliği ve stok güncellemeleri açık olan tüm ekranlara anlık yansıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Güncelleme stratejisi olarak \"geçersiz kılıp yeniden çekme\" yöntemini seçtim. Alternatif olan \"önbelleği doğrudan güncelleme\" yöntemi daha hızlı olurdu ama gelen olaylar ürün bilgisi taşımadığı için eksik veriyle çalışırdı. Bu yüzden daha basit ve güvenilir olan yeniden çekme yöntemini tercih ettim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Backend Eksiği: Düşük Stok Bildirimi<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                        Real-time'ı test ederken bir boşluk fark ettim: bildirim (notification) olayı backend'de tanımlıydı ama hiçbir servis onu tetiklemiyordu. Yani web tarafında bildirim dinleyicisi hazırdı ama gönderen taraf yoktu. Bu boşluğu kapattım — bir ürünün stoğu minimum eşiğin altına yeni düştüğünde otomatik bildirim gönderiliyor. Burada dikkat ettiğim nokta, sadece \"yeni düşüş\"te bildirim göndermek oldu; stok zaten düşükken tekrar azalırsa yeni bildirim gitmiyor, böylece kullanıcı gereksiz bildirim yağmuruna maruz kalmıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Dashboard'un Canlandırılması<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                        Gün 14'te dashboard'u boş kartlarla (placeholder) bırakmıştım. Bugün gerçek verilerle doldurdum: toplam şube, toplam ürün, bekleyen transfer ve düşük stok sayılarını gösteren kartlar, son transferler listesi ve düşük stok listesi. Önemli bir tasarım tercihi yaptım — dashboard için ayrı bir veri sorgusu açmak yerine, diğer ekranların zaten kullandığı sorguları paylaştırdım. Bunun sonucunda real-time güncelleme dashboard'a \"bedavaya\" geldi; başka bir sekmede transfer oluşturulduğunda dashboard kartları otomatik güncelleniyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Dockerizasyon<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                        Günün ikinci büyük işi Docker'dı. Amaç, tüm sistemin (veritabanı + API + web) tek komutla ayağa kalkması: docker compose up --build<\/code>.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        API için<\/strong> çok aşamalı bir Docker imajı hazırladım. Burada en kritik sorun Prisma'nın veritabanı motoruydu: yerel makinemde çalışan motor, Docker'ın kullandığı Alpine Linux'ta çalışmıyordu. Prisma yapılandırmasına ikinci bir hedef mimari ekleyerek çözdüm. Ayrıca imaj boyutunu ölçüp gereksiz web paketlerini imajdan çıkararak 1.17 GB'tan 956 MB'a düşürdüm.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Web için<\/strong> nginx sunucusuyla servis eden ikinci bir imaj yaptım (94 MB). Burada önemli bir mimari karar verdim: web ve API'nin aynı origin üzerinden konuşması için nginx'i ters vekil (reverse proxy) olarak yapılandırdım. Böylece tarayıcı hem uygulamaya hem API'ye hem de socket bağlantısına tek adres üzerinden (:5173<\/code>) erişiyor; CORS ayarına gerek kalmıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        docker-compose<\/strong> dosyasında üç servisi birleştirdim. Veritabanının hazır olmasını bekleyen bir sağlık kontrolü (healthcheck) ekledim — API, veritabanı hazır olmadan başlamayı deneyip hata vermesin diye.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Docker'da Yakaladığım Sinsi Sorunlar<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                        Docker kurulumunda üç zorlu sorunla karşılaştım:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Birincisi, paylaşılan tip paketinin (shared-types) container içinde ayrıca derlenmesi gerekiyordu — yerelde çalışan bir kısayol container'da çalışmadı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        İkincisi çok sinsiydi: Git Bash terminali, \/api<\/code> değerini otomatik olarak bir Windows dosya yoluna çeviriyordu. Build \"başarılı\" görünüyordu ama üretilen dosyanın içine yanlış adres gömülmüştü. Ancak çıktının içine bakınca fark edebildim. Bir ortam değişkeni ayarıyla çözdüm.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Üçüncüsü, README dosyasındaki veritabanı port numarası yanlıştı (5432 yazıyordu ama gerçekte 5433). Bu, dokümanı takip eden birinin geliştirme modunu kuramamasına yol açacak bir hataydı; üç dosyada düzelttim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Test ve Doğrulama<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                        Real-time'ın gerçekten çalıştığını kanıtlamak için iki sekmeli testler yaptım. Testin kritik tasarımı şuydu: bir sekmenin işlemlerini doğrudan API üzerinden yaptım, arayüzden değil. Böylece diğer sekmedeki güncellemenin yalnızca socket olayından gelebileceğinden emin oldum. Toplam 24 senaryo test edildi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Docker için en önemli test, sistemi tamamen sıfırdan (önbellek silinmiş, veritabanı temizlenmiş) ayağa kaldırmaktı. docker compose up --build<\/code> tek komutuyla her şey kalktı ve gerçek zamanlı bağlantı dahil çalıştı. Bu, teslim günü hocanın yapacağı senaryonun tam olarak provası oldu.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Neler Öğrendim<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                        Bir çözümü test ederken alternatiflerini de tartmak önemli.<\/strong> Real-time güncelleme için \"önbelleği doğrudan güncelle\" yöntemi ilk bakışta daha şık görünüyordu ama gelen verinin eksikliği yüzünden çalışmazdı. Basit yöntemi seçmek bazen daha doğrudur.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        \"Başarılı görünen\" bir çıktı gerçekten başarılı olmayabilir.<\/strong> Git Bash'in dosya yolunu bozması, build başarılı görünürken içeriğin bozuk olmasına yol açtı. Çıktının sadece \"geçti\/kaldı\" durumuna değil, gerçek içeriğine bakmak gerekiyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Ortam farkları en beklenmedik yerde çıkar.<\/strong> Yerel makinemde çalışan Prisma motoru, Docker'ın Linux dağıtımında çalışmadı. \"Bende çalışıyor\" demek yetmiyor; kodun çalışacağı gerçek ortamı düşünmek gerekiyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        İleriki işleri öne çekmek riski dağıtır.<\/strong> Docker'ı teslim gününe bırakmak yerine bugün bitirmek, son gün panik yaşama ihtimalini büyük ölçüde azalttı. Bağımsız ve öngörülebilir işleri erkenden halletmek, kritik günü rahatlatıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Gün Sonu Durumu<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                        Web paneli artık tamamen bitti: tüm CRUD ekranları, gerçek zamanlı güncellemeler ve canlı dashboard çalışıyor. Ayrıca tüm sistem tek komutla ayağa kalkacak şekilde konteynerize edildi. Yarından itibaren (Gün 18) mobil saha uygulamasına başlayacağım; Docker'ı bugün bitirdiğim için teslim günü yalnızca mobil, son testler ve demo hazırlığı kalacak.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>[10:41]<\/strong> (1ab80f2<\/em>) chore: add playwright for browser-based e2e verification Reusable socket-verify script tracks WebSocket lifecycle across tabs; becomes the base for stage 2 two-tab realtime tests.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        2. <\/span>[10:42]<\/strong> (0cac93a<\/em>) chore(web): add socket.io-client dependency<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        3. <\/span>[10:43]<\/strong> (51bcbb7<\/em>) feat(web): add socket singleton with strictmode-safe lifecycle Reference-counted singleton with a 300ms grace period on teardown so React StrictMode's mount\/unmount\/mount cycle reuses one connection instead of reconnecting. Double-release guarded.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        4. <\/span>[10:43]<\/strong> (34dbd7f<\/em>) feat(web): add useSocket hook binding lifecycle to auth token Connects when authenticated, disconnects on logout; exposes connected state.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        5. <\/span>[10:43]<\/strong> (7dcf2fc<\/em>) feat(web): add socket provider for app-wide single connection<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        6. <\/span>[10:44]<\/strong> (46f2b40<\/em>) feat(web): mount socket provider under snackbar provider Placed below SnackbarProvider so stage 2 notification events can surface as snackbars.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        7. <\/span>[10:44]<\/strong> (5a9ee4a<\/em>) docs: add day 17 socket connection screenshot<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        8. <\/span>[10:57]<\/strong> (a90872a<\/em>) feat(web): sync realtime events into query cache Listens to movement:created\/statusChanged and inventory:updated, invalidating matching query keys (200ms coalesce absorbs bursts). notification events surface via snackbar. Gün 16 mutation invalidations kept — measured, no duplicate-fetch cost.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        9. <\/span>[10:57]<\/strong> (170a662<\/em>) feat(web): wire realtime sync into socket provider<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        10. <\/span>[10:57]<\/strong> (5f00bf3<\/em>) test: add two-tab realtime verification script Drives tab A via the API so tab B's updates can only come from socket events — no mutation onSuccess can mask a broken socket.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        11. <\/span>[10:57]<\/strong> (330eed8<\/em>) docs: add day 17 realtime sync screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        12. <\/span>[11:13]<\/strong> (4586b3e<\/em>) feat(api): add low-stock threshold-crossing helper crossedBelowThreshold(previous, new, threshold): true only on a new crossing (previous above, new at-or-below), and never when threshold <= 0 (unset). Uses <= to match the findAll(lowStock) filter so the notification boundary and the low-stock list agree.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        13. <\/span>[11:13]<\/strong> (cc119d0<\/em>) feat(api): emit low-stock notification on manual adjust After adjustInventory, if the new quantity newly crosses minThreshold, emit a LOW_STOCK notification. previousQuantity lifted out of the transaction for the check; reuses the existing best-effort emit try\/catch.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        14. <\/span>[11:13]<\/strong> (d447bea<\/em>) feat(api): emit low-stock notification on transfer ship Per shipped item, collect source-branch quantities that newly cross the threshold and emit LOW_STOCK after commit via emitToTenant. Added product\/branch include for the message text.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        15. <\/span>[11:13]<\/strong> (c23e756<\/em>) test: add low-stock notification verification script Verifies new-crossing emits, no re-emit when already low, ship-path emit and tenant isolation. Measures at the socket wire level to avoid MUI Snackbar DOM residue false-positives.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        16. <\/span>[11:14]<\/strong> (bdae743<\/em>) docs: add day 17 low-stock notification screenshot<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        17. <\/span>[11:29]<\/strong> (20fea05<\/em>) feat(web): add dashboard stats hook deriving kpis from existing queries Consumes the branches\/products\/movements\/inventory query keys so stage 2's invalidation updates the dashboard automatically — no extra socket wiring. KPI sources are role-aware: metrics a role cannot fetch are hidden rather than shown as fake zeros.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        18. <\/span>[11:30]<\/strong> (4a6da41<\/em>) feat(web): populate dashboard with live kpis and lists Replaces the Gün 14 placeholder: four KPI cards, recent transfers with status chips, and a low-stock list — all real data, live-updating via realtime sync. Low-stock scope follows the inventory screen's own-branch pattern for branch-scoped roles.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        19. <\/span>[11:30]<\/strong> (b1bc64f<\/em>) feat(web): add dashboard kpi card and list components<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        20. <\/span>[11:31]<\/strong> (d6227da<\/em>) test: add dashboard realtime verification script Confirms KPI counts and recent-transfers\/low-stock lists update live when actions are driven via the API in another context.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        21. <\/span>[11:31]<\/strong> (2957a77<\/em>) docs: add day 17 live dashboard screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        22. <\/span>[15:03]<\/strong> (901aab1<\/em>) docs: add day 17 build and lint outputs Co-Authored-By: Claude Opus 4.8 <\/li>
                                                                                                                                                                                                                                                                                                                                                                                        23. <\/span>[15:32]<\/strong> (fcea05a<\/em>) chore(api): add musl binary target for prisma in docker Added linux-musl-openssl-3.0.x alongside native so the Prisma query engine works in Alpine containers. Generator-only change, no migration; native keeps local dev intact.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        24. <\/span>[15:32]<\/strong> (17de433<\/em>) chore: add dockerignore excluding node_modules, dist, mobile and docs Recursive **\/ patterns so nested workspace node_modules\/dist stay out of the build context; .env.example kept for reference.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        25. <\/span>[15:32]<\/strong> (b29c95f<\/em>) chore: add multi-stage api dockerfile Builder installs only the api workspace subtree (pnpm --filter @stockroute\/api...) and builds shared-types + api explicitly, keeping web-only packages out. Runner on node:20-alpine with openssl for the musl Prisma engine. CMD runs migrate deploy + seed (idempotent upsert) + start at container boot. Image trimmed 1.17GB → 956MB; ts-node retained for runtime seed (documented tradeoff).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        26. <\/span>[15:44]<\/strong> (2abbcfc<\/em>) chore(web): add nginx config with spa fallback and api\/socket proxy try_files serves index.html for client-side routes. \/api and \/socket.io reverse-proxy to the api container with WebSocket upgrade headers so socket.io runs over a real WS connection (no polling fallback). proxy_redirect rewrites backend absolute redirects to \/api-relative.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        27. <\/span>[15:44]<\/strong> (9d4d2b8<\/em>) chore(web): add multi-stage web dockerfile with nginx serve Builder installs only the web workspace subtree and builds shared-types (needed for tsc -b type resolution, not just Vite bundling) before the web build. Vite env baked relative (VITE_API_URL=\/api, empty socket url) for single-origin via the nginx proxy. nginx:alpine runner carries only dist — 94MB image.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        28. <\/span>[15:56]<\/strong> (b2fe2b2<\/em>) chore: add docker-compose for db, api and web Postgres with pg_isready healthcheck; api waits on condition: service_healthy before migrate deploy + seed + start. Web builds with relative Vite args for single-origin through the nginx proxy. Host db port 5433 avoids clashing with a local Postgres; restart: unless-stopped for demo resilience. Verified from scratch: down -v → build --no-cache → up brings the whole system (including container WebSocket) up in one command.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        29. <\/span>[15:56]<\/strong> (e8b3bba<\/em>) test: add docker end-to-end verification script and outputs Verifies from-scratch bring-up: healthcheck ordering, migration, idempotent seed, login through the proxy, live dashboard and container WebSocket (101 Switching Protocols on origin :5173).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        30. <\/span>[16:13]<\/strong> (7c8dd28<\/em>) docs: align readme with docker setup and fix db port Corrected DATABASE_URL from 5432 to 5433 (compose maps the db to host 5433 to avoid clashing with a local Postgres) — the old value broke dev-mode setup. Added demo credentials, auto-seed note, docker single-origin\/reverse-proxy architecture, and a dev-vs-docker env warning. Every documented command verified against a from-scratch bring-up.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        31. <\/span>[16:13]<\/strong> (d20e13f<\/em>) chore: fix db port to 5433 in root env example Matches the compose host port mapping; note added explaining why.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                        32. <\/span>[16:13]<\/strong> (09ca7af<\/em>) chore(api): fix db port to 5433 in api env example<\/li><\/ol>\n\n--- DAY 18 (2026-07-23) ---\n

                                                                                                                                                                                                                                                                                                                                                                                          Bugün projenin mobil ayağına başladım. Şimdiye kadar sistem yalnızca web tarayıcısından kullanılabiliyordu; bugünden itibaren saha personelinin telefondan erişebileceği bir uygulama iskeleti oluştu.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Başlangıç Durumu ve Kurulum<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                          Mobil klasörü projenin ilk günlerinde temel bir Expo iskeleti olarak oluşturulmuştu, ancak içi büyük ölçüde boştu — navigasyon, tema, kimlik doğrulama ve API bağlantısı yoktu. Bugün bu eksikleri tamamladım.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          İlk iş, mobil uygulamanın paylaşılan paketleri (tip tanımları ve tasarım token'ları) kullanabilmesini sağlamaktı. React Native'in paketleyicisi Metro, projede kullandığımız paket yöneticisinin (pnpm) sembolik bağlantı yapısıyla varsayılan olarak sorun yaşayabiliyor. Yapılandırmayı ayarladıktan sonra bir ayrıntıyı fark ettim: Expo'nun resmi dokümanında önerilen bir ayarı açtığımda paket çözümlemesi bozuluyordu, kapalı bıraktığımda çalışıyordu. Bu ayarı kapalı bırakarak sorunu paket dosyalarına hiç dokunmadan çözdüm.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Uygulamanın simgesini (app icon) ve açılış ekranını (splash) marka klasöründeki logodan türettim. Kaynak görselin kenarlarında şeffaf boşluk vardı; içeriği kırpıp marka renginde bir zemine ortalayarak Expo'nun beklediği boyutlarda üç ayrı görsel ürettim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Kimlik Doğrulama<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                          Web tarafında çözdüğüm giriş akışını mobile uyarladım, ancak iki önemli fark vardı:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Token saklama:<\/strong> Web'de tarayıcının yerel deposu (localStorage) kullanılıyordu. Mobilde böyle bir şey yok; bunun yerine cihazın şifreli güvenli deposunu (Keychain\/Keystore) kullandım. Giriş bilgisi hassas olduğu için düz metin saklamak yerine şifreli depo tercih ettim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Eşzamansız veri okuma:<\/strong> Tarayıcıdaki depo anında okunurken, mobildeki depo eşzamansız çalışıyor. Yani uygulama açıldığında \"kullanıcı giriş yapmış mı?\" sorusunun cevabı bir süre bilinmiyor. Bu süre içinde yönlendirme yapılırsa, giriş yapmış kullanıcı bile bir an login ekranını görüyor. Bunu önlemek için depo okuması tamamlanana kadar marka renginde bir yükleme ekranı gösterip, ancak ondan sonra yönlendirme yapan bir yapı kurdum.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Ayrıca web'de daha önce karşılaştığım bir hatayı baştan engelledim: yetkisiz istek (401) durumunda kullanıcıyı çıkışa yönlendiren mekanizma, giriş isteğinin kendi hatasını da yakalarsa yanlış şifre girildiğinde sonsuz döngü oluşuyor. Giriş isteğini bu kuralın dışında tuttum.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Stok Listesi Ekranı (Plandan Öne Çekildi)<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                          İskelet kurulumu beklediğimden sorunsuz geçtiği için, normalde ertesi güne planlanmış olan şube stok listesi ekranını da bugün yaptım. Böylece yarın yalnızca barkod tarama işine odaklanabileceğim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Ekran, tasarım mockup'ına uygun olarak: şube seçimi, ürün arama, üç adet özet istatistik (toplam ürün, düşük stok, kategori sayısı) ve ürün listesi içeriyor. Stoğu minimum eşiğin altındaki ürünler kırmızıyla vurgulanıyor. Mobil kullanıcıların alışkın olduğu \"aşağı çekip yenileme\" hareketini de ekledim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Burada web tarafındaki bir kararı korudum: şube listesini görme yetkisi olmayan roller (depo ve saha personeli) şube seçici görmüyor, doğrudan kendi şubelerinin stoğunu görüyorlar. Böylece iki platform aynı mantıkla çalışıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Karşılaştığım Sorunlar<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                          Eksik yardımcı paket:<\/strong> Giriş ekranını yazdıktan sonra uygulama açılmayıp kırmızı hata ekranı verdi. Derleyicinin ihtiyaç duyduğu bir yardımcı paket, paket yöneticisinin iç deposunda kalmış ve erişilemiyordu. Bu paketi açıkça bağımlılık olarak tanımlayarak çözdüm — Expo projelerinde bilinen bir çözüm.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Tip tanımı dosyasının silinmesi:<\/strong> Expo, bazı işlemlerde kendi ürettiği bir tip tanımı dosyasını siliyor ve bu, tip kontrolünü kırıyordu. Kendi tanım dosyamı yazarak bu belirsizliği ortadan kaldırdım.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Kod denetleyicisi hiç çalışmıyormuş:<\/strong> Mobil klasörünün lint yapılandırması, var olmayan bir dosya yolunu işaret ediyordu. Yani bugüne kadar mobil tarafta kod denetimi hiç yapılmamış. Web ve API tarafındaki yapılandırmayla aynı hale getirerek düzelttim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Günün En Öğretici Kısmı: Beklenmedik Bir Regresyon<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                          Günün sonunda her şeyi doğrularken web tarafının derlenmesinin bozulduğunu fark ettim. Mobil için eklediğim paketler, doğrulama kütüphanesinin (zod) sürüm çözümlemesini kaydırmıştı: web sürüm 4'e ihtiyaç duyarken, artık sürüm 3'ü buluyordu.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Önce bunun gerçekten benim değişikliğimden mi kaynaklandığını doğruladım — projenin ana dalını ayrı bir kopyada test ettim ve orada derlemenin sorunsuz olduğunu gördüm. Yani sorunu ben tetiklemiştim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Kök nedeni araştırınca ilginç bir durum çıktı: web'in kullandığı bir form kütüphanesi, zod'a ihtiyaç duyduğunu resmi olarak beyan etmiyordu. Beyan olmayınca paket yöneticisi \"ortalıkta ne varsa onu kullan\" moduna geçiyor ve yanlış sürümü veriyordu.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Birkaç yaklaşım denedim, sonunda doğru çözümü buldum: paket yöneticisine \"bu kütüphanenin zod'a ihtiyacı var\" bilgisini dışarıdan tanımlattım. Böylece her paket kendi ihtiyaç duyduğu sürümü alıyor, tesadüfe kalmıyor. Uygulama kodlarına hiç dokunmadan, yalnızca proje yapılandırmasıyla çözüldü.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Doğrulama<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                          Uygulamayı gerçek bir Android emülatöründe çalıştırıp test ettim. API'yi de önceki gün hazırladığım Docker kurulumundan besledim; emülatörden konteynerdeki API'ye bağlantı sorunsuz çalıştı. Giriş, oturumun kalıcılığı (uygulamayı kapatıp açınca giriş korunuyor), stok listesi, arama, çıkış ve hatalı şifre senaryolarını görsel olarak doğruladım.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Ayrıca web ve API tarafında bozulma olmadığını da kontrol ettim — regresyon düzeltmesinden sonra ikisi de temiz.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Neler Öğrendim<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                          Aynı problemin farklı platformlarda farklı çözümü olabiliyor.<\/strong> Giriş akışı kavramsal olarak web'dekiyle aynıydı ama depolama eşzamansız olduğu için tamamen farklı bir yükleme mantığı gerekti. \"Web'de böyle yapmıştım\" demek her zaman yeterli olmuyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Bir paket eklemek başka bir yeri bozabiliyor.<\/strong> Mobil için eklediğim bağımlılıklar, hiç ilgisi olmayan web tarafının derlenmesini kırdı. Tek bir uygulama üzerinde çalışıyor gibi görünsem de aslında paylaşılan bir bağımlılık ağacına dokunuyorum. Bu yüzden her günün sonunda tüm projeyi doğrulamak gerekiyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Sorunun kendinden kaynaklandığını kanıtlamak önemli.<\/strong> Hatayı görünce \"belki zaten böyleydi\" diye geçiştirebilirdim. Ana dalı ayrı bir kopyada test ederek regresyonu benim tetiklediğimi kanıtladım; bu, doğru çözümü aramaya odaklanmamı sağladı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Semptomu bastırmak yerine nedeni düzeltmek.<\/strong> Sürüm sorununu geçici hilelerle susturabilirdim, ama eksik olan şey bir paketin bağımlılık beyanıydı. Onu tamamlayınca sorun kökten çözüldü.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Gün Sonu Durumu<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                          Mobil uygulama artık çalışır durumda: saha personeli telefondan firma koduyla giriş yapabiliyor, kendi şubesinin stok durumunu görebiliyor, arama yapabiliyor ve çıkış yapabiliyor. Oturum uygulama kapatılsa bile korunuyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Stok listesini bugüne çektiğim için yarın (Gün 19) yalnızca barkod tarama özelliğine odaklanacağım. Sonraki gün ise transfer teslim alma ve gerçek zamanlı bildirimler kalacak.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>[10:10]<\/strong> (35e8a10<\/em>) chore(mobile): add state, form, http and secure storage dependencies ui-tokens, zustand, tanstack-query, axios, react-hook-form, zod, expo-secure-store, vector-icons. RN aligned to 0.76.9 per expo install --check.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          2. <\/span>[10:11]<\/strong> (0924bcb<\/em>) chore(mobile): add metro and babel config for pnpm monorepo watchFolders + nodeModulesPaths resolve workspace packages. Hierarchical lookup left enabled on purpose — disabling it breaks pnpm's nested .pnpm symlinks (expo-router → @expo\/metro-runtime). Verified: shared-types and ui-tokens both land in the bundle.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          3. <\/span>[10:11]<\/strong> (346bf7c<\/em>) fix(mobile): resolve shared eslint config correctly Config pointed at a non-existent subpath (@stockroute\/config\/.eslintrc.js), so lint never actually ran in apps\/mobile. Aligned with the web\/api pattern using require.resolve.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          4. <\/span>[10:11]<\/strong> (491b389<\/em>) chore(mobile): add env example with api url and platform defaults EXPO_PUBLIC_API_URL with notes: Android emulator 10.0.2.2, iOS simulator localhost, physical device LAN IP.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          5. <\/span>[10:15]<\/strong> (e3b44e8<\/em>) feat(mobile): add theme sourced from ui-tokens Colors, spacing, radius and statusColors derived from @stockroute\/ui-tokens so mobile and web share one visual language. No hardcoded hex.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          6. <\/span>[10:18]<\/strong> (8ad1422<\/em>) feat(mobile): add app icon, adaptive icon and splash from brand asset Derived from docs\/brand\/stockroute-icon-1x1.png: content cropped and centered on the #2563EB brand background. icon 1024², adaptive foreground with safe-zone padding, splash 1284×2778.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          7. <\/span>[10:26]<\/strong> (3684450<\/em>) chore(mobile): consume theme and shared-types in stock placeholder Temporarily renders theme colors and UserRole values to prove monorepo package resolution in the Metro bundle; replaced with the real stock list in a later stage.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          8. <\/span>[10:27]<\/strong> (dd4c1bd<\/em>) docs: add day 18 stage 1 bundle evidence and app screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          9. <\/span>[11:47]<\/strong> (385c146<\/em>) chore(mobile): add @babel\/runtime as explicit dependency The dev transform for login.tsx resolves @babel\/runtime helpers, which pnpm keeps only in the .pnpm store. Declaring it explicitly is the standard fix for Expo\/RN in pnpm monorepos; no workspace package files touched.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          10. <\/span>[11:50]<\/strong> (f578b81<\/em>) chore(mobile): add own env type declarations Expo deletes expo-env.d.ts in some flows, breaking process.env typecheck; local declarations make it deterministic.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          11. <\/span>[11:51]<\/strong> (0760921<\/em>) feat(mobile): add axios api client with bearer token and 401 handling baseURL from EXPO_PUBLIC_API_URL, falling back to platform defaults (Android 10.0.2.2, iOS localhost). Response interceptor logs out on 401 but skips \/auth\/login's own 401 (web Gün 14 lesson — avoids a retry loop on a wrong password). Redirect is left to the route guard.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          12. <\/span>[11:51]<\/strong> (3165fca<\/em>) feat(mobile): add persisted auth store backed by secure-store Zustand persist with a SecureStore adapter (Keychain\/Keystore-encrypted). Holds accessToken, user (including branch) and tenantSlug. Exposes hasHydrated so the route guard can wait for async rehydration instead of redirecting early; the flag itself is excluded from persistence.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          13. <\/span>[11:51]<\/strong> (9983490<\/em>) feat(mobile): add zod login schema with turkish messages<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          14. <\/span>[11:54]<\/strong> (3af909b<\/em>) feat(mobile): add useLogin mutation hook Posts to \/auth\/login then fetches \/auth\/me to fill the user's branch; a failing \/me does not invalidate an otherwise successful login.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          15. <\/span>[11:54]<\/strong> (3d60a69<\/em>) feat(mobile): add logo component<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          16. <\/span>[12:00]<\/strong> (a855b8b<\/em>) feat(mobile): add login screen Follows plan §12.2: logo, firma kodu \/ e-posta \/ şifre, full-width submit with loading state. KeyboardAvoidingView, autoCapitalize=\"none\" on email and slug, secureTextEntry, returnKeyType field traversal. Turkish zod errors and a 401 message. Colors from theme tokens.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          17. <\/span>[12:03]<\/strong> (de04774<\/em>) feat(mobile): mount query client provider at the root<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          18. <\/span>[12:03]<\/strong> (e17aa93<\/em>) docs: add day 18 login and persistence screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          19. <\/span>[14:41]<\/strong> (83882ba<\/em>) chore(mobile): add gitignore for expo build output and secrets Excludes .expo\/, dist\/, metro cache, native signing keys and .env files; only .env.example is tracked.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          20. <\/span>[14:42]<\/strong> (ae4257f<\/em>) chore(mobile): drop generated expo type references from tsconfig expo-env.d.ts and .expo\/types are regenerated (and sometimes deleted) by Expo, which made typecheck non-deterministic. Own declarations in src\/types\/env.d.ts cover process.env instead.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          21. <\/span>[17:59]<\/strong> (5f96f8b<\/em>) feat(mobile): add auth guard waiting for store hydration useProtectedRoute shows a branded loading state while the persisted store rehydrates, then redirects based on the current segment — no early navigation before auth state is known.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          22. <\/span>[18:00]<\/strong> (f297c0a<\/em>) feat(mobile): add bottom tab navigation Stok \/ Tara \/ Transferler with Ionicons, active color from theme primary.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          23. <\/span>[18:00]<\/strong> (b385f82<\/em>) refactor(mobile): move login redirect into the root guard Removed the screen-level Redirect so navigation happens in one place, avoiding a double-redirect race.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          24. <\/span>[18:00]<\/strong> (a5892b2<\/em>) feat(mobile): add inventory and branch response types<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          25. <\/span>[18:00]<\/strong> (df6e28e<\/em>) feat(mobile): add useDebounce hook for search input<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          26. <\/span>[18:00]<\/strong> (83f2de2<\/em>) feat(mobile): add useInventory query hook<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          27. <\/span>[18:01]<\/strong> (0686f0f<\/em>) feat(mobile): add initials avatar component<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          28. <\/span>[18:08]<\/strong> (cea91b8<\/em>) feat(mobile): add branch stock list screen Follows the mobile-stok mockup minus the barcode button (day 19). Branch source is role-aware, mirroring the web inventory screen: roles that can list branches get a picker, warehouse\/field staff see their own branch fixed. Client-side search over name and SKU (300ms debounce), three summary stats, low-stock rows highlighted at quantity <= minThreshold, pull-to-refresh, and distinct empty states for no-branch \/ no-stock \/ no-search-result.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          29. <\/span>[18:08]<\/strong> (072a60d<\/em>) chore(mobile): add overlay token to theme Replaces a hardcoded rgba value in the branch picker modal.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          30. <\/span>[18:08]<\/strong> (a8008de<\/em>) docs: add day 18 stock list, logout and 401 screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          31. <\/span>[18:59]<\/strong> (17503e3<\/em>) fix(monorepo): declare zod peer for @hookform\/resolvers Adding the mobile dependencies shifted pnpm's fallback zod from 4 to 3 (the api's Scalar packages pull zod@3), which broke the web build: @hookform\/resolvers@5.4.0 requires zod\/v4\/core without declaring zod as a peer, so it fell through to the hoisted zod@3. Declaring the peer via pnpm.packageExtensions makes pnpm inject each importer's own zod (web→4, mobile→3) instead of relying on fallback resolution. Verified against main in a worktree that this was a regression introduced today; no api or web source touched.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          32. <\/span>[18:59]<\/strong> (4ae5480<\/em>) docs: add day 18 final verification outputs typecheck, lint, expo export, web build and api test results plus the consolidated summary.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                          33. <\/span>[18:59]<\/strong> (7b64662<\/em>) docs: add day 18 app screenshot after the dependency fix<\/li><\/ol>\n\n--- DAY 19 (2026-07-24) ---\n

                                                                                                                                                                                                                                                                                                                                                                                            Bugün mobil uygulamanın iki ana özelliği tamamlandı: barkod tarama ve gelen transferlerin teslim alınması. Barkod işi planlanandan hızlı ilerlediği için, normalde son güne bırakılmış olan transfer teslim ekranı da bugüne çekildi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Barkod Tarama<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                            Kamera ve izinler.<\/strong> Expo'nun kamera modülü kuruldu. Kamera izni üç ayrı durumda ele alındı: izin henüz istenmemiş, reddedilmiş ama tekrar sorulabilir, kalıcı olarak reddedilmiş. Son durumda kullanıcı doğrudan uygulama ayarlarına yönlendiriliyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Kamera görünümü, tasarım mockup'ından ölçülerek yapıldı: vizör çerçevesi ekran genişliğinin %63'ü, köşelerde L şeklinde işaretler, ortada dikey olarak hareket eden tarama çizgisi. Fener (torch) desteği de eklendi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Sekme değiştirildiğinde kameranın gerçekten kapandığını işletim sistemi seviyesinde doğruladım — pil tüketimi ve gizlilik açısından önemli bir davranış.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Tarama akışı.<\/strong> Barkod okunduğunda ürün sorgulanıyor ve sonuç kartında ürün adı, SKU ve o şubedeki stok miktarı gösteriliyor. Ele alınan durumlar: ürün bulundu, stok düşük (kırmızı vurgu), bu şubede stok kaydı yok, şube seçilmemiş, barkod bulunamadı (404), bağlantı hatası. Başarılı okumada ve hatada farklı titreşim geri bildirimleri verildi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Tekrar tarama koruması.<\/strong> Kamera saniyede onlarca kare işlediği için, koruma olmasa aynı barkod için yüzlerce istek giderdi. Sonuç kartı açıkken kamera dinleyicisi durduruluyor. Bunu veritabanı sorgu logu ile ölçtüm: kart 20 saniye açık kaldı, kamera bu sürede yaklaşık 600 kare işledi, sunucuya yalnızca 1 sorgu gitti.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Miktar verisinin kaynağı.<\/strong> Ürün sorgusu stok miktarı döndürmüyor ve envanter endpoint'i ürün bazlı filtreleme kabul etmiyor. Bu yüzden miktar, stok ekranının zaten önbelleğe aldığı envanter listesinden ürün kimliğiyle eşleştiriliyor. Ek fayda: düşük stok eşiği de aynı kayıttan geldiği için renklendirme ekstra istek gerektirmiyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Gelen Transferler ve Teslim Alma<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                            Yolda (IN_TRANSIT<\/code>) durumundaki, hedefi kullanıcının şubesi olan transferler listeleniyor. Her transferde onaylı bir \"Teslim Al\" akışı var; teslim alınınca hedef şubenin stoğu artıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Yakalanan tuzak.<\/strong> Sunucudaki şube filtresi, şubenin kaynak veya hedef<\/em> olduğu tüm transferleri döndürüyor. Yani bu şubeden çıkan<\/strong> sevkiyatlar da teslim listesinde görünürdü — kullanıcı kendi gönderdiği malı teslim almaya çalışırdı. Bunu servis kodunu okuyarak fark ettim ve istemci tarafında hedef şubeye göre ayrıca filtreledim. Doğruluğunu kanıtlamak için ters yönde bir transfer oluşturdum: sunucu 2 kayıt döndürdü, ekranda 1 kart göründü.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Uçtan uca doğrulama.<\/strong> Kısayol kullanmadan gerçek yaşam döngüsünü işlettim: transfer oluştur → onayla → sevk et → mobilden teslim al. Teslim sonrası hedef şubenin stoğu beklendiği gibi arttı (Kahve 65→95, Çay 120→165). Çay'daki artışın beklenenden 5 eksik olmasının sebebi, filtre testi için oluşturduğum ters yön transferinin sevk edilirken aynı stoktan 5 düşürmesiydi — aritmetik doğrulandı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Bağlantı Hatası Süresi<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                            Uygulamanın HTTP istemcisinde zaman aşımı ayarı yoktu; sunucu erişilemezken hata ekranı yaklaşık 50 saniye sonra çıkıyordu. Mobilde bu, uygulamanın donduğu izlenimi veriyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            10 saniyelik zaman aşımı eklendi ve sorgu tekrar deneme sayısı 1'e indirildi — ikincisi olmasa varsayılan 3 deneme düzeltmeyi boşa çıkarırdı. Bekleme süresi ~50 saniyeden ~12-25 saniyeye indi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Bu iş sırasında ilk yaklaşımımın yanlış olduğunu fark ettim: zaman aşımı hatası için ayrı bir mesaj dalı yazdım ama ekranda hiç görünmedi. Cihazdan gerçek hatayı loglayınca sebebi anladım — React Native'in ağ katmanı, erişilemeyen sunucuyu kendi sayacı dolmadan farklı bir hata koduyla sonlandırıyor. Aynı istek masaüstünde beklediğim kodu veriyordu; yani ortam farkı vardı. Doğrulamasaydım hiç çalışmayacak bir kod dalı bırakmış olacaktım. Üç hata kodunu tek bir bağlantı hatası dalında birleştirdim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Test Verisi Onarımı<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                            Stok listesinde ürün adları bozuk görünüyordu (�ay 1kg<\/code>). Ham baytlara baktığımda karakterin bozulmadığını, tamamen yok edildiğini gördüm — geri döndürülemez bir kayıp.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Sebep, önceki gün test verisini PowerShell üzerinden göndermemdi: gövde sistem karakter setine düşürülünce Türkçe karakterler kayboluyor. Kayıp gönderim anında olmuş, veritabanı veya API kusuru değil.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Dört alan API üzerinden düzeltildi. Tekrarı önlemek için istek gövdesini önce UTF-8 dosyaya yazıp öyle gönderdim; böylece veri hiçbir noktada kabuk kodlamasına maruz kalmadı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Dokümantasyon<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                            README güncellendi; kapsam kararları ve gelecek iyileştirmeler bölümü yeniden düzenlendi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Doğrulanamayan Sınırlar<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                            Kameranın barkodu optik olarak okuması<\/strong> test edilemedi. Emülatörün arka kamerası yapay bir 3B sahne gösteriyor; ekrandaki bir barkodu kameraya göstermek mümkün değil. Okuma sonrasındaki tüm akış gerçek koşullarda doğrulandı, ancak \"barkod okutup test ettim\" demiyorum. Aynı şekilde titreşim ve fener ışığı, emülatörde ilgili donanım bulunmadığı için doğrulanamadı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Neler Öğrendim<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                            Çözümün çalıştığını varsaymak yerine gözlemlemek gerekiyor.<\/strong> Zaman aşımı için yazdığım hata dalı mantıklı görünüyordu ama o platformda hiç tetiklenmiyordu. Cihazdan gerçek hatayı loglamasaydım, ölü kod bırakmış olacaktım.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Sapmayı görmezden gelmemek.<\/strong> Stok artışı beklediğimden 5 eksik çıktığında \"yaklaşık doğru\" deyip geçebilirdim. Farkı hesaplayınca sebebi bulundu ve sayı birebir tuttu. Açıklanamayan küçük sapmalar, genelde anlaşılmamış bir davranışın işareti oluyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Filtre mantığını okumadan kullanmamak.<\/strong> Sunucudaki şube filtresinin \"kaynak veya hedef\" eşleştirdiğini varsaymasaydım, kullanıcılar kendi gönderdikleri malı teslim almaya çalışacaktı. Parametre adının anlamı, davranışını garanti etmiyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Ölçüm düzeneği de hatalı olabilir.<\/strong> Tekrar tarama korumasını ilk ölçtüğümde beklenenden fazla sorgu göründü. Zaman damgalarına bakınca sorunun kodda değil, test yönteminde olduğunu anladım. Ölçüm sonucunu sorgulamadan kabul etmek yanlış teşhise götürüyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Gün Sonu Durumu<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                            Mobil uygulamanın işlevsel kapsamı tamamlandı: giriş, şube stok listesi, barkod tarama ve transfer teslim alma çalışıyor. 20. gün gerçek zamanlı senkronizasyon, son doğrulamalar ve teslim hazırlığı kalıyor.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>[10:18]<\/strong> (7f7a324<\/em>) chore(mobile): add expo-camera and expo-haptics Installed via expo install for SDK 52 compatibility. Lockfile change is additive only — no other package's resolution shifted (full regression check in the final stage).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            2. <\/span>[10:18]<\/strong> (3dbcffb<\/em>) chore(mobile): register expo-camera plugin with permission message Writes NSCameraUsageDescription on iOS and the CAMERA permission on Android.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            3. <\/span>[10:18]<\/strong> (c5ea3a2<\/em>) feat(mobile): add branch store for the selected branch Kept separate from the auth store: auth answers \"who is the user\", this holds a transient UI selection. Avoids ambiguity about what should survive logout.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            4. <\/span>[10:19]<\/strong> (6aa1aaa<\/em>) feat(mobile): add useEffectiveBranch as single source of truth Resolves which branch the user is looking at, preserving the day 18 role logic: branch-selecting roles read the store, warehouse\/field staff read user.branch.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            5. <\/span>[10:19]<\/strong> (b7949a0<\/em>) refactor(mobile): read selected branch from the shared store Replaces local useState so the scanner screen can show quantities for the same branch. Behaviour unchanged.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            6. <\/span>[10:19]<\/strong> (9155431<\/em>) chore(mobile): add scanner tokens to theme Dark scanner surface and frame colors, following the overlay token pattern from day 18 — no hardcoded hex in screens.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            7. <\/span>[10:19]<\/strong> (12c64bf<\/em>) feat(mobile): add scanner viewfinder frame Corner markers plus a vertically looping scan line on the native driver so the animation does not compete with the camera feed on the JS thread. Dimensions measured from the mockup: 63% width, 47% aspect, positioned slightly above center to leave room for the result card.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            8. <\/span>[10:19]<\/strong> (fba1c47<\/em>) feat(mobile): add barcode scanner screen with permission flow CameraView with torch toggle and three permission states: undetermined, denied-but-askable, and permanently denied (opens app settings). Camera is released when the tab loses focus — verified at the OS level via active camera clients. Back button from the mockup omitted: in tab navigation there is no stack to pop.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            9. <\/span>[10:20]<\/strong> (81602d0<\/em>) docs: add day 19 stage 1 permission and camera screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            10. <\/span>[10:58]<\/strong> (cc0e2a5<\/em>) feat(mobile): add barcode product lookup hook TanStack Query with enabled gating so the request only fires for a scanned barcode.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            11. <\/span>[10:58]<\/strong> (21dbdce<\/em>) feat(mobile): add scan result card Follows the mockup: scanned badge, product icon with name and monospace SKU, divider, then the branch quantity. Quantity comes from the cached inventory list matched by productId (GET \/inventory has no productId filter). Low stock is red, matching the stock screen. Distinct states for no stock record and no branch selected. Mockup's cropped second button omitted — no target for it in the plan.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            12. <\/span>[10:59]<\/strong> (48442a1<\/em>) feat(mobile): wire barcode scanning to product lookup Scan handler locks further reads until the result card closes — verified via postgres statement logging: one trigger, card open 20s with the camera running (~600 frames), exactly one query. Haptics signal success and not-found. The dev-only trigger used for verification is stripped from production bundles (confirmed with --no-bytecode export).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            13. <\/span>[10:59]<\/strong> (840d53d<\/em>) docs: add screenshot after fixing mangled product names Day 18 test data was sent through PowerShell 5.1, which downgraded the body to the system ANSI codepage and replaced Ç\/Ş\/İ\/ı with U+FFFD — unrecoverable, so the records were re-sent via PATCH with a UTF-8 file body.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            14. <\/span>[10:59]<\/strong> (8727fdb<\/em>) docs: add day 19 stage 2 scan result and error state screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            15. <\/span>[11:55]<\/strong> (f244ceb<\/em>) feat(mobile): add movement types for the incoming transfers list<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            16. <\/span>[11:55]<\/strong> (7c7b2df<\/em>) feat(mobile): add incoming transfers hook Sends branchId to narrow the server result, then filters client-side by destinationBranchId: the API's branchId matches source OR destination, so outgoing shipments would otherwise appear in the receive list.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            17. <\/span>[11:55]<\/strong> (1a1d7fd<\/em>) feat(mobile): add incoming transfers screen with receive action Lists IN_TRANSIT movements destined for the effective branch, with confirmation before POST \/movements\/:id\/receive and pull-to-refresh. Field staff only receive here — approve\/ship\/cancel stay on web per plan §12.2. Item rows show count and total quantity rather than product names, since the list response carries only productId.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            18. <\/span>[11:55]<\/strong> (25b3e79<\/em>) docs: add day 19 stage 3 incoming transfers screenshots and verification<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            19. <\/span>[12:30]<\/strong> (7b645d9<\/em>) fix(mobile): add request timeout and unify connection error handling Without a timeout, requests to an unreachable API hung ~50s. Added a 10s timeout; the error branch handles ECONNABORTED, ETIMEDOUT and ERR_NETWORK together, because React Native's XHR layer aborts unreachable hosts with ERR_NETWORK before axios' own timer fires — a timeout-only branch would have been unreachable code on Android (verified by logging the real error on device).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            20. <\/span>[12:30]<\/strong> (59b4bd0<\/em>) fix(mobile): add request timeout and unify connection error handling Without a timeout, requests to an unreachable API hung ~50s. Added a 10s timeout; the error branch handles ECONNABORTED, ETIMEDOUT and ERR_NETWORK together, because React Native's XHR layer aborts unreachable hosts with ERR_NETWORK before axios' own timer fires — a timeout-only branch would have been unreachable code on Android (verified by logging the real error on device).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            21. <\/span>[12:32]<\/strong> (cfd1464<\/em>) refactor(mobile): use shared connection error message across screens<\/li>
                                                                                                                                                                                                                                                                                                                                                                                            22. <\/span>[16:41]<\/strong> (1310d3e<\/em>) docs: add day 19 final verification outputs<\/li><\/ol>\n\n--- DAY 20 (2026-07-27) ---\n

                                                                                                                                                                                                                                                                                                                                                                                              Projenin son geliştirme günü. Bugün iki blok iş yapıldı: mobil uygulamaya gerçek zamanlı senkronizasyon eklendi ve backend tarafında son tutarlılık düzeltmeleri tamamlandı. Ardından tüm sistem sıfırdan uçtan uca doğrulandı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Çalışma Sırası<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                              Günü planlarken işleri riskine göre sıraladım. Mobil gerçek zamanlı katman backend'e dokunmuyordu, yani izole bir işti — onu önce yapıp bitirmek güvenliydi. Backend düzeltmeleri ise mevcut testleri kırma ihtimali taşıyordu. Bu yüzden önce mobil tarafı tamamlayıp doğruladım, sonra riskli backend işine geçtim ve her adımdan sonra testleri çalıştırdım.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Mobil Gerçek Zamanlı Senkronizasyon<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                              Web tarafında daha önce kurduğum gerçek zamanlı katmanı mobile taşıdım. Uygulama artık sunucudaki stok ve transfer değişikliklerini anlık olarak alıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Mobilde web'de olmayan bir sorun vardı: uygulama arka plana alındığında bağlantı kopabiliyor ve o sırada gerçekleşen güncellemeler kaçıyor. Bunu çözmek için uygulama öne geri döndüğünde bağlantıyı yenileyip ilgili verileri baştan çeken bir mekanizma kurdum — böylece arka plandayken kaçırılan olaylar telafi ediliyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Bildirimler için de mobile özel bir karar verdim: web'deki gibi bir snackbar mobilde yok, o yüzden üstten inip otomatik kapanan bir banner ile kısa bir titreşim kullandım.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Gerçek zamanlı çalışmayı iki yönlü olarak canlı doğruladım. Emülatörde giriş yaptım, web panelinden bir transfer sevk ettim ve telefonun ekranına dokunmadan transferin listede belirdiğini gördüm. Ters yönde de test ettim: telefondan bir transferi teslim aldım ve web tarafında durumun anında değiştiğini, hedef şubenin stoğunun arttığını doğruladım.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Backend Son Rötuşları<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                              Dört düzeltme yaptım. Her birinden sonra test paketini çalıştırdım; 58 testin tamamı baştan sona korundu, tek bir test bile kırılmadı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Standart hata formatı.<\/strong> API'nin döndürdüğü hatalar tutarsızdı. Tüm hataları ortak bir zarfa oturtan bir katman ekledim — artık her hata durum kodu, mesaj, hata tipi, istek yolu ve zaman damgası içeriyor. Beklenmeyen hatalarda sunucu iç detaylarının sızmamasına dikkat ettim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Türkçe doğrulama mesajları.<\/strong> Form doğrulama hataları İngilizce dönüyordu (örneğin \"password must be longer than...\"). Arayüzün geri kalanı Türkçeyken bu tutarsızdı. On adet veri şemasındaki tüm kuralları Türkçeleştirdim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Silme hatası düzeltmesi.<\/strong> İlişkili bir kaydı (örneğin stoğu olan bir ürünü) silmeye çalışmak \"sunucu hatası\" (500) döndürüyordu. Oysa bu öngörülebilir bir kullanıcı durumu. Bunu anlamlı bir \"çakışma\" hatasına (409) çevirdim: \"Bu kayıt başka kayıtlarla ilişkili olduğu için silinemez.\" Kök nedeni araştırırken silme metotlarının hata yakalama bloğu içermediğini, yani hatanın hiç işlenmeden dışarı çıktığını fark ettim; sadece hata eşlemesine ekleme yapmak yetmezdi, silme metotlarını da doğru yerden geçirmem gerekti.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Pasif kayıt filtresi.<\/strong> Pasife alınan ürünler operasyonel listelerde görünmeye devam ediyordu. Bu listeleri yalnızca aktif kayıtları döndürecek şekilde filtreledim. Yönetim listelerine dokunmadım — çünkü yöneticinin pasif kayıtları görüp tekrar aktifleştirebilmesi gerekiyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Uçtan Uca Doğrulama<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                              Son adım, tüm sistemi sıfırdan ayağa kaldırıp gerçek bir kullanım senaryosunu baştan sona işletmekti — teslimde yapılacak gösterimin provası.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Veritabanını ve önbelleği tamamen silip tek komutla (docker compose up --build<\/code>) sistemi kurdum. Ardından tam akışı işlettim: web'den giriş, şube ve ürün oluşturma, stok girişi, transfer oluşturup onaylama ve sevk etme, telefondan teslim alma (ve web'de durumun anlık değişmesi), barkod tarama, son olarak düşük stok tetikleyip hem web hem telefonda bildirimin geldiğini görme. Yedi adımın tamamı sorunsuz çalıştı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Ayrıca bugün eklediğim backend düzeltmelerinin canlı sistemde de çalıştığını doğruladım: boş form gönderince Türkçe hata mesajı ve standart zarf, ilişkili ürünü silmeye çalışınca 409, pasife alınan ürünün listeden düşmesi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Dokümantasyon Tutarlılığı<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                              Dün README'yi, bugün yapılacak beş özelliği de kapsayacak şekilde ileriye dönük güncellemiştim — yani doküman bir an için kodun önündeydi. Bugün bu beş maddenin hepsi gerçekten koda girdi ve canlı doğrulandı. Artık README'de anlatılan her şey kodda birebir karşılığını buluyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Neler Öğrendim<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                              İşleri riske göre sıralamak zaman kazandırıyor.<\/strong> İzole ve güvenli olan mobil işi önce bitirip \"kasaya koymak\", sonra riskli backend işine geçmek, bir şey kırılsaydı bile sebebini daraltmayı sağlardı. Rastgele sırayla çalışsaydım, bir hata çıktığında hangi değişiklikten geldiğini bulmak zorlaşırdı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Bir hatayı düzeltirken kök nedene inmek gerekiyor.<\/strong> Silme hatasında yüzeysel çözüm \"hata eşlemesine bir satır eklemek\" gibi görünüyordu, ama asıl sorun hatanın hiç yakalanmamasıydı. Belirtiyi değil nedeni düzeltmek, sorunun tekrar etmesini önledi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Dokümantasyonun kodla uyumlu kalması bir teslim şartı.<\/strong> Dokümanı geçici olarak kodun önünde bırakmak bilinçli bir tercihti, ama teslimden önce ikisinin buluşması gerekiyordu. \"Yazdım ama yapmadım\" durumu, projenin en başındaki hataların tersi olurdu.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Sıfırdan kurulum, en dürüst testtir.<\/strong> Kendi makinemde çalışan sistemi görmek yeterli değil; veritabanını ve önbelleği silip tek komutla her şeyin kalktığını görmek, teslimde karşılaşılacak gerçek durumu bugünden görmemi sağladı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Proje Sonu Durumu<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                              Yirmi günlük süreç tamamlandı. Ortaya çıkan sistem: çok firmalı bir backend API (firma izolasyonu ve rol bazlı yetkilendirme, otomatik testlerle), bir web yönetim paneli, bir mobil saha uygulaması, ve bunların hepsini birbirine bağlayan gerçek zamanlı bir katman. Tüm sistem tek komutla ayağa kalkıyor ve dokümantasyonu kodla tutarlı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Yapılmayan bazı özellikler bilinçli olarak kapsam dışı bırakıldı ve gerekçeleriyle birlikte belgelendi. Böylece hem tamamlanan işin sınırları net, hem de ileride nereden devam edileceği belli.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                              <\/p>


                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>[10:11]<\/strong> (b952043<\/em>) chore(mobile): add socket.io-client Installed via expo install for SDK 52; lockfile change additive.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              2. <\/span>[10:11]<\/strong> (9988c18<\/em>) chore(mobile): add EXPO_PUBLIC_SOCKET_URL to env example<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              3. <\/span>[10:11]<\/strong> (18fe084<\/em>) feat(mobile): add socket singleton with auth token Reference-counted with a grace period on teardown, mirroring the web fix so a single connection survives re-mounts.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              4. <\/span>[10:20]<\/strong> (942acc4<\/em>) feat(mobile): add socket provider with app-wide single connection Reconnects and invalidates inventory\/movements queries when the app returns to foreground, so events missed while backgrounded are recovered. Disconnects on logout.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              5. <\/span>[10:20]<\/strong> (d65b744<\/em>) feat(mobile): sync realtime events into query cache inventory:updated and movement:* invalidate their query keys; notification surfaces as an auto-dismissing top banner with haptics (no snackbar on mobile).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              6. <\/span>[10:21]<\/strong> (2646cc8<\/em>) feat(mobile): mount socket provider at the root<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              7. <\/span>[16:47]<\/strong> (164ac07<\/em>) docs: add day 20 stage 1 realtime verification outputs Co-Authored-By: Claude Opus 4.8 <\/li>
                                                                                                                                                                                                                                                                                                                                                                                              8. <\/span>[17:34]<\/strong> (4a10990<\/em>) feat(api): add global exception filter with path and timestamp Standardizes the error envelope: statusCode, message, error, path, timestamp. HttpExceptions pass through with their status; unexpected errors become a generic 500 without leaking stack traces. Matches the README error contract.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              9. <\/span>[17:35]<\/strong> (d2734dd<\/em>) feat(api): register the global exception filter<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              10. <\/span>[17:35]<\/strong> (621075c<\/em>) feat(api): localize login dto validation messages<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              11. <\/span>[17:35]<\/strong> (0c12a59<\/em>) feat(api): localize register-tenant dto validation messages<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              12. <\/span>[17:35]<\/strong> (ddddc6a<\/em>) feat(api): localize branch dto validation messages<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              13. <\/span>[17:35]<\/strong> (32138da<\/em>) feat(api): localize inventory adjust dto validation messages<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              14. <\/span>[17:35]<\/strong> (39d7cf4<\/em>) feat(api): localize inventory filter dto validation messages<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              15. <\/span>[17:36]<\/strong> (305a899<\/em>) feat(api): localize threshold dto validation messages<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              16. <\/span>[17:36]<\/strong> (ab086ac<\/em>) feat(api): localize movement dto validation messages<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              17. <\/span>[17:36]<\/strong> (f21f61d<\/em>) feat(api): localize movements filter dto validation messages<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              18. <\/span>[17:36]<\/strong> (233743d<\/em>) feat(api): localize product dto validation messages<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              19. <\/span>[17:36]<\/strong> (b5dcdae<\/em>) feat(api): localize user dto validation messages<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              20. <\/span>[17:38]<\/strong> (6466507<\/em>) fix(api): return 409 instead of 500 on foreign key delete remove() lacked a try\/catch, so P2003 never reached the error mapping and surfaced as 500. Routed deletes through the mapping helper; FK violations now return 409 with a clear message.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              21. <\/span>[17:38]<\/strong> (e5c9bc2<\/em>) fix(api): return 409 on foreign key delete for branches<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              22. <\/span>[17:38]<\/strong> (305a596<\/em>) feat(api): filter inactive products and return 409 on fk delete GET \/products now returns only active records (operational list); P2003 on delete mapped to 409.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              23. <\/span>[17:38]<\/strong> (56c3bfc<\/em>) feat(api): filter inactive records from inventory list<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              24. <\/span>[17:38]<\/strong> (f903c71<\/em>) test(api): register global exception filter in e2e setup Filter now runs in the real HTTP flow so the standardized envelope is exercised; existing assertions unchanged.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              25. <\/span>[17:38]<\/strong> (e2f40aa<\/em>) docs: add day 20 backend polish verification output<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              26. <\/span>[18:25]<\/strong> (c093703<\/em>) docs: add day 20 stage 3 end-to-end verification outputs<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              27. <\/span>[18:34]<\/strong> (500e25f<\/em>) docs: add day 20 final verification outputs<\/li>
                                                                                                                                                                                                                                                                                                                                                                                              28. <\/span>[19:14]<\/strong> (190b4a3<\/em>) docs: showcase real app screenshots and add day 20 outputs<\/li><\/ol>\n" + }, + "Eren Kara": { + "id": 25, + "email": "erenkara1549@gmail.com", + "repo": "https:\/\/github.com\/erenkara0\/Smart-E-Commerce-Assistant", + "github_username": "erenkara0", + "total_entries": 23, + "commits_count": 0, + "commits_sample": [], + "full_text": "\n--- DAY 1 (2026-07-06) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                On the first day of the internship, the topic for the project was determined. A RAG-based smart assistant project, designed to generate responses based on store data for use in micro-export and e-commerce processes, was planned. To ensure the technical scope and development process proceed systematically, an implementation_plan.md<\/code> file was created. This document broadly outlines the technologies to be utilized, the system architecture, and the upcoming development phases. By the end of the day, the project concept was successfully finalized, and a foundational roadmap for the development process was established.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>[18:05]<\/strong> (7c5751d<\/em>) Initial commit<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                2. <\/span>[21:48]<\/strong> (ab95971<\/em>) docs: add implementation_plan.md<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                3. <\/span>[21:58]<\/strong> (c241da9<\/em>) docs: add implementation_plan.md<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                4. <\/span>[22:20]<\/strong> (f694aba<\/em>) Merge branch 'main' of https:\/\/github.com\/erenkara0\/Smart-E-Commerce-Assistant<\/li><\/ol>\n\n--- DAY 2 (2026-07-07) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                  Today, brand and user interface preparation work was carried out for the project. The logo, app icon, color palette, and foundational design system for the MikroAsistan project were created. Additionally, initial mockup designs were prepared for the web chat interface, observability dashboard, Scalar API interface, and mobile chat screen. Project tasks were divided into phases in accordance with the GitHub Kanban structure, and an issue\/milestone system was planned to track the development process. By the end of the day, the project's visual identity, core design documentation, and workflow tracking structure were fully established.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>[14:50]<\/strong> (9d816f6<\/em>) docs: plan revize edildi<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>[15:24]<\/strong> (9bdf9d4<\/em>) docs: implementation plan güncellendi<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                  3. <\/span>[21:00]<\/strong> (8640ca4<\/em>) docs: add initial project plan, design system and mockups<\/li><\/ol>\n\n--- DAY 3 (2026-07-08) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                    Today, the foundational development environment for the project was successfully set up. The monorepo structure was organized to clearly define and separate the backend and frontend directories. For the backend, the initial application framework was built using FastAPI, while the frontend development environment was established using Next.js, TypeScript, and Tailwind CSS.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                    To ensure project security, a unified .gitignore<\/code> file was created in the root directory, preventing .env<\/code> files, virtual environments, node_modules<\/code>, .next<\/code> folders, and local databases from being tracked by Git. Furthermore, an .env.example<\/code> file was added to serve as a template for the required environment variables. Finally, the root README.md<\/code> file was updated to thoroughly document the project's objectives, technology stack, directory structure, security guidelines, and development phases.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                    Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>[14:07]<\/strong> (ee31efb<\/em>) chore: initialize project setup and environment configuration<\/li><\/ol>\n\n--- DAY 4 (2026-07-09) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                      As part of the M2 milestone for the MikroAsistan project, the core chat endpoint was developed. Request and response schemas were mapped for the POST \/chat<\/code> endpoint, Scalar API documentation was integrated via the \/scalar<\/code> route, and API error responses were standardized. Following comprehensive testing—which included validations for empty messages, valid inputs, non-existent endpoints, and the \/docs<\/code> and \/scalar<\/code> routes—all changes were appended to the existing M2 API vertical slice PR, and the PR description was updated accordingly.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>[11:04]<\/strong> (382f73f<\/em>) chore: setup api foundation<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                      2. <\/span>[16:05]<\/strong> (945888c<\/em>) feat: add health check endpoint<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                      3. <\/span>[19:37]<\/strong> (68a22bf<\/em>) feat: add chat request and response schemas<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                      4. <\/span>[19:58]<\/strong> (dbf92e1<\/em>) feat: add basic chat endpoint<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                      5. <\/span>[20:56]<\/strong> (2cdc360<\/em>) docs: add Scalar API documentation<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                      6. <\/span>[22:14]<\/strong> (87ae891<\/em>) feat: standardize API error responses<\/li><\/ol>\n\n--- DAY 5 (2026-07-10) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                        Today, I focused on the product data structure for the project. I created the product_loader.py<\/code> script to parse sample product data from the products.json<\/code> file, ensuring that the data is correctly validated against the Product<\/code> model. Following this, I developed the GET \/products<\/code> endpoint, enabling the API to return the product list along with the total product count. Testing confirmed that 10 products were successfully loaded and the endpoint is functioning exactly as expected. All developments have been pushed to GitHub, and the corresponding issues have been closed.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>[15:52]<\/strong> (eba3588<\/em>) feat: add product schema and sample data<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                        2. <\/span>[17:28]<\/strong> (676fc01<\/em>) feat: add product data loader<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                        3. <\/span>[18:03]<\/strong> (db4a276<\/em>) feat: add products listing endpoint<\/li><\/ol>\n\n--- DAY 6 (2026-07-13) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                          Today, I continued working on the M3 milestone of the Smart E-Commerce Assistant project. The main focus was preparing product data for future retrieval and RAG workflows.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                          First, I implemented a product document builder service that converts structured product records into readable text documents. These documents include key information such as product ID, name, category, brand, price, stock, rating, description, and features. This structure makes the product data more suitable for future embedding-based search.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                          Then, I developed an initial in-memory vector store service. This service builds an index from the prepared product documents, stores them temporarily, and provides access to them when needed. Although a real vector database has not been integrated yet, this service provides a foundation for future ChromaDB and semantic search integration.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                          I also added a basic product search mechanism and exposed it through the GET \/products\/search<\/code> endpoint. The endpoint was tested with the query laptop<\/code>, and it successfully returned matching product documents with score values.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                          Finally, I updated the README.md<\/code> and implementation_plan.md<\/code> files to document the completed M3 progress and the next planned steps for the RAG and vector search structure. The changes were committed, pushed to GitHub, and included in the related pull request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>[14:03]<\/strong> (e7f842a<\/em>) feat: add product document builder<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                          2. <\/span>[15:32]<\/strong> (058d717<\/em>) feat: add vector store service<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                          3. <\/span>[15:41]<\/strong> (53b3c3e<\/em>) feat: add product search endpoint<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                          4. <\/span>[20:01]<\/strong> (3261a25<\/em>) docs: update M3 documentation<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                          5. <\/span>[21:58]<\/strong> (71b4c96<\/em>) Merge pull request #40 from erenkara0\/m3-product-document-builder M3: Add product document search foundation<\/li><\/ol>\n\n--- DAY 7 (2026-07-14) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                            Today, as part of the M4 phase, I focused on the RAG-based response generation infrastructure. First, I refactored the configuration setup to centralize the management of OpenAI, retrieval, and RAG settings. Next, I developed the retrieval context builder service, which retrieves relevant product documentation based on the user's message and processes it into a context format suitable for the chat interface. I then integrated the RAG prompt builder to ensure the generation of controlled prompts derived from both the user's query and the product context.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                            Additionally, the OpenAI client service was established, and the POST \/chat<\/code> endpoint was integrated with these services to generate natural language responses grounded in product data. Standard fallback mechanisms were also implemented to handle scenarios involving missing context or service errors. Testing confirmed that the system successfully generates accurate responses for product-specific queries (such as laptop recommendations), while appropriately returning a controlled \"insufficient product information found\" message for irrelevant inputs. All changes have been committed and pushed to GitHub, and the corresponding PR has been opened.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>[14:39]<\/strong> (9ee23d2<\/em>) feat: add RAG configuration settings<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            2. <\/span>[15:37]<\/strong> (83c38d2<\/em>) feat: add retrieval context builder<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            3. <\/span>[15:43]<\/strong> (80cfcb6<\/em>) feat: integrate chat endpoint with retrieval context<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            4. <\/span>[15:51]<\/strong> (0bd8c4e<\/em>) feat: add OpenAI client service<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            5. <\/span>[16:00]<\/strong> (d473b44<\/em>) feat: add RAG prompt builder<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            6. <\/span>[16:27]<\/strong> (b16aea0<\/em>) feat: integrate RAG response generation in chat<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            7. <\/span>[16:44]<\/strong> (cc474eb<\/em>) feat: standardize RAG fallback responses<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            8. <\/span>[16:46]<\/strong> (530ad3d<\/em>) chore: update retrieval result limit<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                            9. <\/span>[16:48]<\/strong> (3b7b106<\/em>) chore: update default retrieval limit<\/li><\/ol>\n\n--- DAY 8 (2026-07-16) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                              Today, I improved the reliability and maintainability of the OpenAI integration in the Smart E-Commerce Assistant project. I added configurable timeout and retry settings to the backend configuration and documented these parameters in the .env.example<\/code> file. I also strengthened the openai_client.py<\/code> service by handling different API error scenarios, including authentication failures, rate limits, request timeouts, connection problems, invalid requests, and server-side errors.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                              In addition, I created centralized and user-friendly fallback responses for each error type and updated the chat endpoint to use these responses consistently. I manually tested the normal RAG workflow, unrelated product queries, and multiple error scenarios to ensure that the system continues to work correctly without exposing technical details or sensitive information to the user. Finally, I committed the changes, pushed them to GitHub, and prepared a pull request for review.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>[00:38]<\/strong> (6258b60<\/em>) Merge pull request #54 from erenkara0\/m4-rag-context-foundation M4: Add RAG context and answer generation foundation<\/li><\/ol>\n\n--- DAY 9 (2026-07-17) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                Today, I implemented session-based chat memory for the Smart E-Commerce Assistant. I added SQLite-backed message storage, automatic session_id<\/code> generation, and support for maintaining the same session across multiple chat requests. I also integrated recent conversation history into the RAG prompt and retrieval query so that follow-up questions such as “What is its price?” can be answered using previous messages. After resolving merge conflicts and synchronizing the branch with the latest main<\/code> changes, I tested the full chat flow through Scalar, verified that conversation history persisted after restarting the backend, committed the changes, and pushed the m4-session-memory<\/code> branch to GitHub.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>[14:23]<\/strong> (e167dff<\/em>) feat: add SQLite session memory service<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                2. <\/span>[16:20]<\/strong> (3191230<\/em>) feat: add session-based chat memory<\/li><\/ol>\n\n--- DAY 10 (2026-07-20) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                  Today, I completed the remaining M4 observability and documentation tasks for the Smart E-Commerce Assistant project. I integrated LangSmith with the OpenAI client by adding conditional tracing support, endpoint configuration, and the required dependency, then verified the integration by generating and reviewing a real trace containing request, response, latency, and token usage information. I also prepared detailed validation notes for the RAG flow, session-based chat memory, SQLite persistence, OpenAI error handling, and LangSmith monitoring. Finally, I updated the README and implementation plan to reflect the completed M0–M4 milestones, current project structure, backend setup steps, environment variables, API endpoints, session management flow, and remaining planned integrations, and committed the changes to the project branch.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>[14:27]<\/strong> (3e9e2da<\/em>) feat: add LangSmith observability<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>[14:42]<\/strong> (f5d094c<\/em>) docs: add M4 RAG and session validation notes<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                  3. <\/span>[16:16]<\/strong> (4bcf6b7<\/em>) docs: finalize M4 documentation<\/li><\/ol>\n\n--- DAY 11 (2026-07-21) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                    Today, I developed the initial interactive chat interface for the MikroAsistan project and connected it to the FastAPI backend through a Next.js API route. I added message sending, suggested questions, loading and error states, session continuity with session_id<\/code>, automatic scrolling, and a new chat reset feature. I also refactored the frontend using clean code principles by separating the interface into reusable components, moving chat state and API logic into a custom hook, and defining shared TypeScript types. Finally, I validated the implementation with lint, production build, and functional tests, then prepared the changes for a pull request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                    Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>[14:40]<\/strong> (2eb4aac<\/em>) feat: add frontend API configuration<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                    2. <\/span>[14:48]<\/strong> (da7e8c6<\/em>) feat: add initial chat interface<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                    3. <\/span>[15:13]<\/strong> (cc3c8c2<\/em>) feat: add interactive chat message flow<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                    4. <\/span>[15:41]<\/strong> (4b27c64<\/em>) feat: add frontend chat API proxy<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                    5. <\/span>[15:42]<\/strong> (1974124<\/em>) chore: ignore TypeScript build cache<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                    6. <\/span>[16:39]<\/strong> (d556233<\/em>) feat: connect chat interface to backend<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                    7. <\/span>[16:44]<\/strong> (5c3ea8f<\/em>) feat: add automatic chat scrolling<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                    8. <\/span>[18:41]<\/strong> (feecbe7<\/em>) refactor: split chat interface into reusable components<\/li><\/ol>\n\n--- DAY 12 (2026-07-22) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                      Today, I improved the MikroAsistan frontend chat interface by adding Enter-to-send, Shift+Enter for new lines, automatic textarea resizing, and input restrictions during loading. I also enhanced the responsive design for mobile, tablet, and desktop screens, improved message wrapping for long texts and URLs, and prevented horizontal overflow. After completing functional tests for chat flow, session continuity, error handling, scrolling, and responsive behavior, I documented the validation results, updated the README and implementation plan, and prepared the changes for a pull request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>[14:32]<\/strong> (5b73d62<\/em>) feat: improve chat input interactions<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                      2. <\/span>[16:02]<\/strong> (b5630dd<\/em>) feat: improve responsive chat layout<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                      3. <\/span>[23:14]<\/strong> (2b73b13<\/em>) docs: document M5 chat interface validation<\/li><\/ol>\n\n--- DAY 13 (2026-07-23) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                        Today, I completed the M6 security and Docker infrastructure work for the MikroAsistan project. I added configurable CORS settings to the FastAPI backend, prevented wildcard origins in production, and verified allowed and rejected origin scenarios. I then created Dockerfiles and .dockerignore<\/code> files for both the backend and frontend, enabled Next.js standalone output, and tested both containers successfully. Finally, I added a Docker Compose configuration with health checks, persistent SQLite storage, service networking, and runtime environment variables, verified frontend–backend communication, updated the README with Docker usage instructions, and prepared the changes for a pull request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>[15:49]<\/strong> (7430747<\/em>) feat: configure backend CORS security<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                        2. <\/span>[17:31]<\/strong> (eec7f95<\/em>) feat: containerize frontend and backend<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                        3. <\/span>[20:33]<\/strong> (7eeaed2<\/em>) feat: add Docker Compose workflow<\/li><\/ol>\n\n--- DAY 14 (2026-07-24) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                          Today, I completed the M7 backend testing milestone by setting up the pytest infrastructure, adding an isolated temporary SQLite database, and creating automated tests for health, root, product, and chat endpoints. I also tested session ID generation and reuse, conversation history, validation errors, missing context, empty model responses, and OpenAI rate limit, timeout, and connection error fallbacks without making real API calls. I updated the deprecated HTTP 422 status constant, documented the testing process and coverage in the README, verified that all 15 tests passed successfully, committed the changes, and pushed the m7-backend-tests<\/code> branch to GitHub.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>[19:09]<\/strong> (c5a3300<\/em>) test: set up backend test infrastructure<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                          2. <\/span>[20:09]<\/strong> (8607f8d<\/em>) test: add automated API endpoint tests<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                          3. <\/span>[20:39]<\/strong> (c914dfa<\/em>) test: add chat session and fallback tests<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                          4. <\/span>[20:44]<\/strong> (d832f87<\/em>) docs: finalize backend testing documentation<\/li><\/ol>\n\n--- DAY 15 (2026-07-27) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                            Today, I prepared the project for final delivery and demonstration. I reviewed the environment configuration, removed unused variables from the .env.example<\/code> file, and updated the README with clear backend and frontend setup instructions. I also documented the demo workflow, final validation results, and security notes for API keys. After checking the repository for unexpected generated files, I committed the changes, pushed the final-project-delivery<\/code> branch to GitHub, and prepared a Pull Request for the final documentation updates.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>[17:50]<\/strong> (e13bfbc<\/em>) docs: prepare final project delivery<\/li><\/ol>\n\n--- DAY 16 (2026-07-28) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                              I finalized the project’s v1.0.0<\/code> release, completed the GitHub release process, and planned the next development phase. I decided to continue the project as an assistant for a single e-commerce store and selected Excel as the main product data source.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>[02:11]<\/strong> (bc1a2e4<\/em>) Merge pull request #74 from erenkara0\/final-project-delivery docs: prepare final project delivery<\/li><\/ol>\n\n--- DAY 17 (2026-07-29) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                I started the M8 Excel Product Data Foundation milestone. I created the milestone, issue, and development branch, defined the product Excel data contract, prepared a reusable .xlsx<\/code> template with validation rules and example products, documented the import structure and expected behavior, verified the files, and committed the changes.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>[16:20]<\/strong> (95c597d<\/em>) docs: add product Excel contract and template<\/li><\/ol>\n\n--- DAY 18 (2026-07-30) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                  Today, I continued the M8 Excel Product Data Foundation milestone by implementing the backend Excel product parser and validation system. I added the openpyxl<\/code> dependency, created a dedicated product import schema, and developed a parser that reads the Products<\/code> worksheet, validates required columns and product fields, ignores empty rows, normalizes values, and detects duplicate product IDs and SKUs. I also added structured row-level error reporting and automated tests for valid and invalid Excel files. All 8 new parser tests passed, and the complete backend test suite reached 23 successful tests. Finally, I committed the changes, pushed the m8-excel-product-parser<\/code> branch, and prepared the Pull Request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>[15:30]<\/strong> (c6d3223<\/em>) Merge pull request #76 from erenkara0\/m8-product-excel-template docs: define product Excel contract and template<\/li><\/ol>\n\n--- DAY 19 (2026-07-31) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                    Today, I implemented the product database foundation for MikroAsistan. I added SQLAlchemy and Alembic, created the database engine and session management infrastructure, and defined the product ORM model with unique product ID and SKU constraints. I also added validation constraints for price, stock, and rating, JSON-based feature storage, active product indexes, and timestamp fields. Then, I created and tested the initial Alembic migration without modifying the existing chat session table. I added isolated database tests, verified that all 9 new tests passed, and confirmed that the complete backend test suite reached 32 successful tests. Finally, I committed and pushed the changes and opened a stacked Pull Request linked to the Excel parser PR.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                    Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>[01.08.2026 00:04]<\/strong> (159a592<\/em>) Merge pull request #78 from erenkara0\/m8-excel-product-parser feat: add Excel product parser and validation<\/li><\/ol>\n\n--- DAY 20 (2026-08-03) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                      Yesterday, I implemented the product import and upsert workflow for the MikroAsistan project. I added schemas for import results and persistence errors, developed a service to create, update, or keep existing products unchanged in the database, and added validation for duplicate product IDs and SKU conflicts. I also integrated the Excel parser with the database import service so that invalid Excel files do not modify the database. Unit and integration tests were added for all scenarios, and the complete backend test suite passed with 45 tests. Finally, I committed the changes, pushed the branch to GitHub, and opened a pull request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>[22:29]<\/strong> (ec4599e<\/em>) Merge pull request #80 from erenkara0\/m8-product-database-foundation feat: add product database foundation<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                      2. <\/span>[17:12]<\/strong> (336f769<\/em>) feat: add product import and upsert service<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                      3. <\/span>[17:26]<\/strong> (ffeebdb<\/em>) feat: integrate Excel parsing with product import<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                      4. <\/span>[22:29]<\/strong> (9257c2d<\/em>) Merge pull request #83 from erenkara0\/m8-product-import-upsert M8 product import upsert<\/li><\/ol>\n\n--- DAY 21 (2026-08-04) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                        Today, I implemented an Excel product import API endpoint for the MikroAsistan project. I created issue #84 and a dedicated branch, added multipart file upload support, and developed the POST \/products\/import\/excel<\/code> endpoint. The endpoint validates .xlsx<\/code> files, rejects unsupported, empty, or corrupted uploads, and connects the Excel parser with the product import and upsert workflow. I also added a standardized response schema, registered the new route in the FastAPI application, and wrote seven endpoint tests using a temporary SQLite database. All backend tests passed successfully with a total of 52 tests. Finally, I committed the changes, pushed the branch to GitHub, and prepared the pull request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>[15:00]<\/strong> (bac806d<\/em>) feat: add Excel product import API endpoint<\/li><\/ol>\n\n--- DAY 22 (2026-08-05) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                          Today, I migrated the product listing workflow from a JSON-based structure to a database-backed architecture. I created a product repository to retrieve active products from SQLite using SQLAlchemy, added deterministic ordering by product ID, and developed a query service to map database models to the existing API product schema. I updated the GET \/products<\/code> endpoint to use the database while preserving the current response format and added support for empty database results. I also improved the test setup with isolated temporary databases, added repository and service tests, and created an end-to-end test verifying that products imported from Excel can be listed through the API while inactive products remain hidden. All backend tests passed successfully, reaching a total of 55 tests. Finally, I committed the changes, pushed the branch, and prepared the pull request.<\/p>\n\n--- DAY 23 (2026-08-06) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                          Today, I migrated the product search workflow from JSON-based indexing to a database-backed vector search architecture. I refactored the in-memory vector store to make it independent from the data source, created a service that retrieves active products from the database, converts them into searchable documents, refreshes the index, and performs product searches. I updated the GET \/products\/search<\/code> endpoint to use this new workflow, ensured that inactive products are excluded, empty databases are handled safely, and repeated index rebuilds do not create duplicate documents. I also added service tests and an end-to-end test verifying that products imported from Excel can be found through the search API. All backend tests passed successfully, reaching a total of 60 tests. <\/p>\n" + }, + "ismet can sezgin": { + "id": 27, + "email": "ismet.can.sezgin96@erzurum.edu.tr", + "repo": "https:\/\/github.com\/ismetcansezgin\/EEG-Flow", + "github_username": "ismetcansezgin", + "total_entries": 15, + "commits_count": 0, + "commits_sample": [], + "full_text": "\n--- DAY 1 (2026-07-13) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                          Subject of Work:<\/strong> Project Scope Definition, Roadmap Design, and Git Repository Setup<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                          Detailed Description:<\/strong> On the first day of the internship, the scope, technical requirements, and system architecture of the EEGFlow (EEG Signal Processing and Machine Learning Classification Dashboard) project were defined. While working on biomedical signals like EEG, which are highly sensitive and contain significant noise, one of the most critical challenges is subject-level data leakage. To address this issue, research was conducted on the \"Group K-Fold\" cross-validation method for machine learning model training, ensuring models generalize across subjects rather than memorizing individual differences. Subsequently, Git was chosen as the version control system to ensure project maintainability, and a public repository was created on GitHub. A detailed implementation_plan.md file was prepared, outlining the 20-day project roadmap, technical stack (FastAPI, NumPy, SciPy, Pandas, Scikit-Learn, XGBoost, Vanilla JS), and success criteria. This file was committed as the repository's initial commit. Finally, based on feedback from the internship advisors, the development process was structured into three main phases (Phase 1: Pipeline Design, Phase 2: Feature Engineering, Phase 3: Model and Validation) with associated milestones, and the implementation plan was updated accordingly.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                          Associated Git Commits:<\/strong>\t<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>[13.07.2026 15:15]<\/strong> (dda6b06<\/em>) feat: initial commit with implementation_plan.md<\/li><\/ol>\n\n--- DAY 2 (2026-07-14) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                            Subject of Work:<\/strong> Directory Structure Setup, Environment Dependencies Definition, and Git Workflow Initialization (Branch\/PR)<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                            Detailed Description:<\/strong> On the second day of the internship, the project directory structure and development environment were set up in accordance with modular and clean code principles. To comply with the Git Workflow guidelines, a new feature branch named feature\/day2-setup was created from the main branch (master) to isolate the setup changes. To support the modular architecture of the application, directories were established for backend, frontend, data, tests, and documentation, with .gitkeep placeholder files placed inside them. Furthermore, the backend\/requirements.txt file was created, listing all backend dependencies (FastAPI, Uvicorn, NumPy, SciPy, Pandas, Scikit-Learn, XGBoost, PyTest). A comprehensive .gitignore file was implemented to prevent tracking local virtual environments (.venv), IDE settings (.vscode, .idea), OS cache files, and bulky data files. Finally, a basic README.md introducing the project and its development phases was written and added to the root directory. The changes were split logically and recorded locally as separate commits. Once finalized, the branch was pushed to GitHub, a Pull Request (PR) was opened for the advisor's review, and after receiving approval, the branch was merged back into the master branch.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                            Associated Git Commits:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>[14.07.2026 16:13]<\/strong> (220d3ed<\/em>) chore: setup project directory structure - Established the modular directory layout for the EEGFlow application. - Created key folders in the workspace: * backend\/utils: To house FastAPI controllers, signal processing filters, feature extractors, and ML pipeline scripts. * frontend: To contain UI assets (HTML, Vanilla CSS, and JavaScript). * data: Designated directory for raw and synthetic EEG datasets. * tests: Created to hold PyTest unit tests for mathematical correctness. * docs: Created for storing project documentation and system design architecture. - Implemented .gitkeep placeholders to ensure empty directory tracking by Git.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                            2. <\/span>[14.07.2026 16:13]<\/strong> (af13b8b<\/em>) chore: add environment requirements and gitignore - Added backend\/requirements.txt file specifying the core Python libraries: * fastapi & uvicorn: For hosting the REST API server. * numpy, scipy, & pandas: For high-performance matrix calculations and digital signal filtering. * scikit-learn & xgboost: For machine learning classification models. * pytest: For executing automated unit and integration tests. - Implemented a comprehensive .gitignore file to exclude unnecessary assets from the repository: * Python compilation artifacts (__pycache__, *.pyc). * Virtual environments (.venv, env, venv). * Local IDE configuration folders (.vscode, .idea). * OS garbage files (.DS_Store, Thumbs.db). * Local raw data files (*.csv) to prevent repository bloat.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                            3. <\/span>[14.07.2026 16:13]<\/strong> (9b37dee<\/em>) docs: create readme for project introduction - Created the introductory README.md file in the root workspace directory. - Provided a high-level project summary explaining the EEGFlow framework. - Listed the core features of the system, including data loading, Butterworth filtering, epoching, and Group K-Fold cross-validation. - Documented the three development phases and milestones agreed with the advisors (Faz 1: Pipeline Tasarımı, Faz 2: Öznitelik Mühendisliği, Faz 3: Model ve Doğrulama). - Outlined baseline layout structure for installation and setup guides.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                            4. <\/span>[14.07.2026 17:07]<\/strong> (98cf906<\/em>) Merge pull request #3 from from feature\/day2-setup Integrate Day 2 environment setup and project structure: - Establish backend, frontend, data, tests, and docs directories. - Implement requirements.txt with backend dependencies. - Configure .gitignore to exclude temporary files.<\/li><\/ol>\n\n--- DAY 3 (2026-07-16) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                              Subject of Work:<\/strong> EEG CSV Data Loading, Multi-Channel Validation, and Robust Group-Wise Interpolation<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                              Detailed Description:<\/strong> Developed the core data_loader.py module to handle EEG data loading from CSV format. The module automatically identifies channel columns, target labels, participant IDs, and timestamps. It calculates the sampling frequency dynamically from the time difference of samples. In addition, key improvements were implemented to prevent data leakage and artifacts: numeric metadata (like age, session, or trial ID) are filtered out from EEG electrode channels. Missing values (NaNs) are resolved using linear interpolation grouped by subject ID to avoid mixing signal data across different participants. Finally, the sampling rate estimation was made robust by using median calculation of valid positive time differences to prevent issues caused by jitter. Additionally, created the tests\/test_data_loader.py suite to run unit tests verifying the correctness of the validation rules. The tests successfully passed. All changes were committed to feature\/day3-data-loader branch and merged into master via a Pull Request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>[16.07.2026 10:24]<\/strong> (36a5927<\/em>) feat: implement csv data loader and validation utility <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                              2. <\/span>Created backend\/utils\/data_loader.py to load, validate, and clean EEG data in CSV format. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                              3. <\/span>Implemented automatic column classification to identify Time, Subject, Event\/Label, and numeric EEG channels.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                              4. <\/span>Added missing value (NaN) cleaning using linear interpolation to preserve continuous signal integrity. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                              5. <\/span>Added automatic sampling frequency (fs) estimation based on timestamp difference calculation. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                              6. <\/span>Designed metadata output dictionary containing channel names, sample counts, and trial states.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>[16.07.2026 14:31]<\/strong> (51b0549<\/em>) feat(loader): enhance validation with subject-grouped cleaning and robust sampling rate estimation <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                2. <\/span>Added a numeric metadata exclusion list (e.g., age, session, trial) to prevent non-electrode numeric columns from being classified as EEG channels. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                3. <\/span>Implemented subject-grouped linear interpolation and forward\/backward filling to prevent data contamination across different subjects. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                4. <\/span>Set a threshold limit of 5 samples for linear interpolation to avoid generating artificial data over extended signal gaps. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                5. <\/span>Upgraded sampling frequency (fs) estimation to use median-based calculations, filtering out non-finite or invalid time differences. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                6. <\/span>Refined total duration calculation in metadata output to be mathematically exact.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>[16.07.2026 14:45]<\/strong> (bfd5a95<\/em>) test: add unit tests for data loader verification - Created tests\/test_data_loader.py to verify data loading, validation, and cleaning. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>Implemented unit tests for detecting EEG channel columns and excluding metadata. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  3. <\/span>Verified subject-grouped linear interpolation for NaN values on a mock EEG dataset. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  4. <\/span>Verified sampling frequency (fs) auto-estimation using temporal differences. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  5. <\/span>Executed tests using 'python -m pytest tests\/test_data_loader.py': <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  6. <\/span>Status: <\/strong>SUCCESS (1 passed in 0.55s) <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  7. <\/span>Scenario 1:<\/strong> Channels Fp1 and F3 correctly detected. * <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  8. <\/span>Scenario 2:<\/strong> Metadata (time_ms, subject_id, trial_id, label) successfully excluded from channels. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  9. <\/span>Scenario 3:<\/strong> Sampling rate auto-calculated exactly to 250.0 Hz from 4ms time intervals. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  10. <\/span>Scenario 4: <\/strong>Subject-grouped interpolation verified (Subject 1 Fp1 filled with 2.0, Subject 2 Fp1 filled with 12.0).<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>[16.07.2026 18:35]<\/strong> (c081e83<\/em>) Merge pull request #3 from feature\/day3-data-loader Integrate Day 3 EEG CSV data loader and validation pipeline: <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                    2. <\/span>Implement EEGDataLoader class for robust loading and multi-channel validation. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                    3. <\/span>Implement subject-grouped linear interpolation and ffill\/bfill to prevent cross-subject data leakage. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                    4. <\/span>Implement median-based calculations for jitter-resistant sampling frequency estimation. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                    5. <\/span>Integrate PyTest unit tests (test_data_loader.py) verifying columns classification and interpolation.<\/li><\/ol>\n\n--- DAY 4 (2026-07-17) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                      Subject of Work:<\/strong> EEG Synthetic Signal Simulator Development and Data Loader Integration Testing <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      Detailed Description:<\/strong> Developed the generate_sample_data.py script to simulate realistic, multi-subject, multi-state EEG data. The generator models 8 standard EEG channels (Fp1 to O2) with custom frequency band components (Delta, Theta, Alpha, Beta, Gamma) and simulates biological artifacts such as baseline drift, 50 Hz power-line interference, and Gaussian measurement noise. State-dependent neurophysiological changes, specifically the eyes-closed alpha wave synchronization (Alpha blocking effect), were simulated accurately. Sparse NaN missing values (96 total) were injected to test the robustness of the data loading module. Generated the dataset data\/sample_eeg.csv and created a new integration test inside the tests\/test_data_loader.py suite. The test verifies that the EEGDataLoader successfully parses the generated dataset, autodetects the 250 Hz sampling rate, and cleans all 96 NaNs via subject-grouped interpolation. The test passed successfully. All changes were committed to feature\/day4-sample-data branch and merged into master via a Pull Request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      [17.07.2026 12:07] (dcf8e79)<\/strong> feat: implement realistic synthetic eeg data generator <\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t- Created data\/generate_sample_data.py to generate multi-subject, multi-state EEG datasets.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t- Simulated 8 channels (Fp1, Fp2, F3, F4, C3, C4, O1, O2) with standard EEG band frequencies (Delta, Theta, Alpha, Beta, Gamma). <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t- Modeled eyes-closed (Relaxed) vs. eyes-open (Task) states to simulate alpha blocking, with occipital channels (O1, O2) showing increased alpha power. <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t- Integrated Gaussian noise, slow baseline drifts (0.1-0.3Hz), and 50Hz power-line interference.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t- Injected sparse NaN missing values (96 total, 12 per channel) avoiding block boundaries to test preprocessing robustness. <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      [17.07.2026 14:50] (82ccd55) test: generate and add synthetic eeg sample dataset <\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t- Executed the generator script to create 'data\/sample_eeg.csv'. - Dataset properties: <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t\t* Rows: 15,000 samples (250 Hz * 10 seconds * 2 states * 3 subjects).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t\t* Subjects: 3 participants (1, 2, and 3). * Channels: 8 active channels (Fp1 to O2). <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t\t* Injected NaNs: 96 missing values (12 per channel) for interpolation testing.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      [17.07.2026 15:28] (6a54859) test: verify data loader integration with synthetic eeg dataset <\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t- Appended 'test_data_loader_with_synthetic_dataset' to 'tests\/test_data_loader.py' to run integration tests using the generated 'sample_eeg.csv' file. <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t- Verified the following test outcomes (2 passed in 0.50s): <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t\t* Channel mapping: Correctly maps 8 EEG channels and excludes metadata.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t\t* Sampling rate: Autodetects 250.0 Hz and 60.0s total duration. <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      \t\t* NaN cleaning: Successfully resolves all 96 missing values with 0 NaNs remaining.<\/p>\n\n--- DAY 5 (2026-07-20) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                      Subject of Work:<\/strong> FastAPI Backend Ingestion API Development, Interactive Dashboard Interface, and Dataset Guidelines Documentation<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      Detailed Description:<\/strong> Developed the FastAPI web server (backend\/main.py) to provide an ingestion endpoint (\/api\/upload) for EEG CSV datasets. The endpoint validates file structures using EEGDataLoader, performs subject-grouped interpolation, and returns processed metadata. A premium glassmorphic frontend dashboard was designed with HTML5, CSS3, and JavaScript, featuring drag-and-drop file upload, live progress tracking, and dynamic KPI metric cards. Additionally, an interactive Dataset Guidelines documentation page was integrated to guide users on formatting raw EEG datasets and converting files from EDF, MATLAB, or OpenBCI formats. Executed PyTest test suite to verify backend stability (4 passed in 0.71s). Added actual working dashboard screenshots to docs\/screenshots\/ and updated README.md. All changes were committed to feature\/day5-upload-api and merged into master via a Pull Request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>[20.07.2026 11:41]<\/strong> (678d508<\/em>) feat(api): add fastapi backend server with upload and static file serving - Implemented FastAPI backend server in backend\/main.py with CORS middleware. - Added POST \/api\/upload endpoint to validate CSV files via EEGDataLoader. - Added static file serving to host frontend index.html directly at root URL. - Verified endpoints via PyTest test suite in tests\/test_upload_api.py.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>[20.07.2026 15:42]<\/strong> (4b0f6a7<\/em>) feat(ui): implement glassmorphic eeg dashboard, guidelines, and add ui preview - Designed modern glassmorphic dashboard interface for EEG file ingestion. - Implemented drag-and-drop file upload zone with animated progress indicator. - Connected fetch API to backend \/api\/upload endpoint and displayed KPI metric cards. - Added Dataset Guidelines view with format conversion guide (EDF\/MATLAB\/OpenBCI). - Added UI preview image (docs\/dashboard_preview.png) and updated README.md.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>[20.07.2026 15:48]<\/strong> (d3d3429<\/em>) docs(ui): add actual working dashboard screenshots and update readme gallery - Added real working application screenshots of the EEGFlow dashboard to docs\/screenshots\/. - Included upload view, validation results dashboard, and dataset guidelines sections. - Updated README.md with screenshot gallery table and main dashboard preview image.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>\n\n--- DAY 6 (2026-07-21) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subject of Work:<\/strong> Digital Signal Processing (DSP): Butterworth Band-pass Filter Implementation and Zero-Phase Signal Verification<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                            Detailed Description:<\/strong> Developed the core digital signal filtering module (backend\/utils\/filters.py) to attenuate low-frequency baseline drifts (<0.5 Hz) and high-frequency physiological\/electromagnetic artifacts (>45 Hz). Designed the Butterworth Band-pass filter using Second-Order Sections (SOS) format for optimal numerical stability. Applied zero-phase filtering (scipy.signal.sosfiltfilt) to prevent temporal phase shifts in EEG waveforms. Created a batch DataFrame filtering function to process multi-channel signals while preserving non-EEG metadata columns (timestamp, subject ID, event markers). Built a unit test suite (tests\/test_filters.py) to verify pass-band power retention (>90% power retained for 10 Hz sine waves), noise attenuation (<5% power remaining for 60 Hz noise), output length consistency, and error handling for invalid cut-off frequencies (8 passed in 2.37s). Committed changes via two distinct Git commits to feature\/day6-bandpass-filter and submitted a Pull Request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>[12:52]<\/strong> (1ffe798<\/em>) feat(dsp): implement butterworth bandpass filter module <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                            2. <\/span>Created backend\/utils\/filters.py with Butterworth Band-pass filter utilities.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                            3. <\/span>Implemented design_bandpass_filter() using SOS format for numerical stability. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                            4. <\/span>Implemented apply_bandpass_filter() with zero-phase sosfiltfilt() for single channels.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                            5. <\/span>Implemented apply_filter_to_dataframe() to filter all EEG channels preserving metadata.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>[16:21]<\/strong> (00cfc00<\/em>) test: add unit tests for butterworth bandpass filter <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              2. <\/span>Added tests\/test_filters.py with 8 comprehensive unit tests. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              3. <\/span>Verified SOS array shape, in-band signal preservation (>90% power retained). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              4. <\/span>Verified out-of-band attenuation (60 Hz noise reduced to <5% power). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              5. <\/span>Verified output length consistency, DataFrame metadata preservation. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              6. <\/span>Verified ValueError raised for invalid frequency combinations and short signals. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              7. <\/span>All 8 tests passed in 2.37s.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>[18:22]<\/strong> (c63a15a<\/em>) Merge pull request #9 from ismetcansezgin\/day6-bandpass-filter Day 6: Butterworth Band-pass Filter Module & DSP Unit Tests<\/li><\/ol>\n\n--- DAY 7 (2026-07-22) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Subject of Work:<\/strong> Digital Signal Processing: 50Hz\/60Hz Notch Filtering, Baseline Linear Detrending, and Expanded Unit Test Suite<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Detailed Description:<\/strong> Expanded the digital signal processing module (backend\/utils\/filters.py) by adding zero-phase IIR Notch filtering (apply_notch_filter) to eliminate 50 Hz\/60 Hz power-line interference. Implemented linear detrending (apply_linear_detrend) to correct baseline drift caused by electrode impedance changes and motion artifacts. Created DataFrame wrapper functions to apply these filters across multi-channel EEG datasets while preserving non-EEG metadata columns. Expanded the unit test suite (tests\/test_filters.py) to 15 total tests, validating target frequency attenuation (>95% power reduction at 50 Hz), pass-band preservation, linear trend removal (<1% residual RMS), and metadata integrity (15 passed in 4.52s). All changes were committed across 4 logical commits to feature\/day7-notch-detrend and submitted as a Pull Request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>[22.07.2026 12:36]<\/strong> (59ef7ec<\/em>) feat(dsp): implement notch filter for 50hz\/60hz power-line interference removal <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>Added apply_notch_filter() using scipy iirnotch with SOS conversion for numerical stability. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  3. <\/span>Applied zero-phase sosfiltfilt() to prevent time-shift in filtered EEG signal. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  4. <\/span>Added apply_notch_to_dataframe() to batch-filter all EEG channels while preserving metadata. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  5. <\/span>Supports configurable quality factor (Q) for narrow or wide notch bandwidth.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>[22.07.2026 14:05]<\/strong> (ca692b1<\/em>) feat(dsp): implement linear detrending for eeg baseline drift correction <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2. <\/span>Added apply_linear_detrend() using scipy.signal.detrend to remove slow baseline drift. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    3. <\/span>Removes the best-fit straight line (y = mx + b) from the signal to center it at zero.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    4. <\/span>Added apply_detrend_to_dataframe() to batch-detrend all EEG channels preserving metadata.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>[22.07.2026 15:00]<\/strong> (8ecafcd<\/em>) test: add unit tests for notch filter <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. <\/span>Added test_notch_filter_attenuates_target_frequency(): verifies 50Hz noise reduced to <5% power. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3. <\/span>Added test_notch_filter_preserves_other_frequencies(): verifies 10Hz signal retains >95% power. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      4. <\/span>Added test_notch_filter_output_length_unchanged(): verifies length consistency. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      5. <\/span>Added test_notch_filter_invalid_frequency_raises(): verifies ValueError above Nyquist. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      6. <\/span>All 12 tests passed in 2.56s.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>[22.07.2026 16:29]<\/strong> (ce3b8c0<\/em>) test: add unit tests for linear detrending <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. <\/span>Added test_linear_detrend_removes_known_slope(): verifies pure ramp reduced to <1% RMS. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. <\/span>Added test_linear_detrend_output_length_unchanged(): verifies length consistency. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. <\/span>Added test_detrend_dataframe_preserves_metadata(): verifies time\/subject\/event columns unchanged. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. <\/span>All 15 tests passed in 4.52s.<\/li><\/ol>\n\n--- DAY 8 (2026-07-23) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Subject of Work:<\/strong> Signal Processing Backend Integration: REST API Filtering Endpoints and Automated Integration Testing<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Detailed Description:<\/strong> Developed and integrated the multi-stage EEG signal filtering REST API endpoint (POST \/api\/filter) in backend\/main.py. The endpoint ingests raw EEG CSV uploads along with configurable filtering parameters (apply_bandpass, lowcut, highcut, order, apply_notch, notch_freq, quality_factor, apply_detrend). Designed the backend controller to execute the signal processing pipeline in optimal sequence (detrending → band-pass → notch filtering) using the previously validated filters.py module. Constructed JSON response payloads containing raw vs filtered channel statistical metrics (mean, standard deviation, RMS, peak-to-peak) alongside initial sample preview arrays for frontend visualization. Created an automated integration test suite (tests\/test_filter_api.py) leveraging FastAPI TestClient to validate full pipeline execution, single-filter isolation modes, parameter reflection, error handling for non-CSV files, and array lengths (10\/10 passed in 4.20s). Committed changes across two structured Git commits to day8-filter-api and opened a Pull Request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>[12:56]<\/strong> (5afabe0<\/em>) feat(api): add \/api\/filter endpoint for multi-stage eeg signal processing Description: <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. <\/span>Integrated POST \/api\/filter endpoint in backend\/main.py.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3. <\/span>Accepts CSV file and filter parameters (apply_bandpass, lowcut, highcut, order, apply_notch, notch_freq, quality_factor, apply_detrend). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4. <\/span>Executes signal processing pipeline sequentially (detrend -> bandpass -> notch). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          5. <\/span>Returns raw vs filtered channel statistics (mean, std, rms, peak-to-peak) and sample preview array.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          6. <\/span>[15:48]<\/strong> (b7f231c<\/em>) test: add integration tests for \/api\/filter endpoint <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          7. <\/span>Created tests\/test_filter_api.py with 10 integration tests for POST \/api\/filter. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          8. <\/span>Tests cover: all filters enabled (200 OK), individual filter modes (bandpass\/notch\/detrend only). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          9. <\/span>Tests verify: all filters disabled returns unchanged stats, non-CSV returns 400. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          10. <\/span>Tests validate: all 8 EEG channels present, filtering changes signal statistics. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          11. <\/span>Tests confirm: pipeline_config reflects sent parameters, sample_preview has 100 samples. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          12. <\/span>All 10 tests passed in 4.20s.<\/li><\/ol>\n\n--- DAY 9 (2026-07-24) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subject of Work:<\/strong> Frontend Engineering: Interactive EEG Preprocessing Dashboard UI, Filter API Binding, and Visual Metrics Visualization<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Detailed Description:<\/strong> Developed the interactive frontend Preprocessing Dashboard (frontend\/index.html, frontend\/style.css, frontend\/app.js) to provide an intuitive browser interface for digital signal processing. Unlocked the navigation route and constructed three glassmorphic filter control cards: Butterworth Band-pass (frequency range sliders from 0.1 to 100 Hz, order selector), IIR Notch (50 Hz\/60 Hz power-line radio toggles, Q-factor slider), and Linear Detrending baseline removal. Styled the controls with custom CSS range sliders, iOS-style toggle switches, responsive KPI summary cards, and per-channel comparison tables. Bound the UI controls to the POST \/api\/filter REST API using FormData and implemented dynamic metric rendering to display Root Mean Square (RMS) and Peak-to-Peak amplitude reductions across all EEG channels. Updated the repository documentation (README.md) with actual working application screenshots (docs\/screenshots\/). Pushed 3 structured commits to day9-preprocessing-ui and created a Pull Request.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>[12:40]<\/strong> (c3f98b5<\/em>) feat(ui): add eeg preprocessing dashboard section and filter controls html\/css <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2. <\/span>Unlocked Preprocessing navigation item in frontend\/index.html sidebar. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3. <\/span>Added Preprocessing page view with active dataset banner and 3 filter cards. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            4. <\/span>Implemented controls for Butterworth Band-pass (lowcut\/highcut sliders, order select), IIR Notch (50Hz\/60Hz radio pills, Q-factor slider), and Linear Detrending. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            5. <\/span>Added glassmorphic styling, iOS-style toggle switches, slider badges, KPI summary grid, and per-channel comparison table in frontend\/style.css.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>[15:49]<\/strong> (c65e510<\/em>) feat(ui): connect preprocessing controls to \/api\/filter api with dynamic metrics table <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              2. <\/span>Updated SPA page router in frontend\/app.js to navigate seamlessly to page-preprocess. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              3. <\/span>Added event listeners for range sliders to dynamically update live value badges. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              4. <\/span>Bound \"Apply Signal Processing Pipeline\" button to submit FormData to POST \/api\/filter. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              5. <\/span>Implemented renderFilterResults() to calculate and display per-channel RMS\/Peak-to-Peak change deltas and populate summary KPI cards. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              6. <\/span>Added sample dataset fallback loader and reset filters handler.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>[16:20]<\/strong> (a24e1de<\/em>) docs(ui): add eeg preprocessing dashboard screenshots and update readme gallery <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. <\/span>Added actual working application screenshots of the EEGFlow Preprocessing Dashboard to docs\/screenshots\/. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. <\/span>Included 04_preprocessing_controls.png (filter control cards & sliders) and 05_preprocessing_results.png (filtering metrics & per-channel comparison table). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. <\/span>Updated README.md screenshot gallery table to display the new UI views.<\/li><\/ol>\n\n--- DAY 10 (2026-07-27) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Subject of Work:<\/strong> Signal Visualization: Chart.js Interactive Time-Series Waveform Plotting and Phase 1 Pipeline Completion<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Detailed Description:<\/strong> Completed Day 10 and Phase 1 (Pipeline Design) by integrating an interactive time-series EEG waveform visualization component into the frontend dashboard (frontend\/index.html, frontend\/style.css, frontend\/app.js). Integrated Chart.js v4 and implemented renderSignalChart() to plot dual-trace signal waveforms comparing Raw EEG (dashed orange trace) against Filtered EEG (solid cyan line with gradient glow) with millisecond-level time precision. Added interactive channel selector buttons (#chartChannelPills) enabling seamless switching between electrode channels (Fp1, Fp2, C3, C4, O1, O2). Configured custom tooltips displaying instantaneous amplitude values in µV. Updated project documentation (README.md) with the new visual component screenshot (06_signal_waveform_chart.png). Verified system integrity across all 29 automated unit and integration tests (29 passed in 3.45s). Submitted final Phase 1 Pull Request to branch day10-signal-visualization.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>[12:08]<\/strong> (7ce78b3<\/em>) feat(ui): add Chart.js library and signal waveform canvas to index.html <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>Imported Chart.js v4.4.1 CDN library in index.html head. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  3. <\/span>Added live time-series waveform comparison card section in page-preprocess view. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  4. <\/span>Included channel selector pills container (#chartChannelPills) and canvas element (#signalChart). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  5. <\/span>Added custom legend indicators for Raw (coral\/orange) vs Filtered (cyan) signal traces.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>[14:23]<\/strong> (74bcb08<\/em>) style(ui): add glassmorphic styles for signal chart canvas and channel pills <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2. <\/span>Added .chart-card, .chart-card-header, and .chart-canvas-wrap CSS classes for Chart.js container. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    3. <\/span>Added custom legend styling for Raw (coral dot) vs Filtered (cyan dot) signals. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    4. <\/span>Added .chart-channel-selector and .chart-pill button styles with active state glow effects. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    5. <\/span>Added responsive media queries for signal chart layout on smaller screens.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>[17:37]<\/strong> (cb0a5cb<\/em>) feat(ui): implement Chart.js time-series waveform plot and channel selector <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. <\/span>Added renderSignalChart() function using Chart.js v4 to draw live time-series EEG waveforms in frontend\/app.js. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3. <\/span>Plotted raw (dashed coral line) vs filtered (solid cyan line with gradient glow) waveform traces. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      4. <\/span>Added dynamic channel selector pills (#chartChannelPills) allowing real-time switching between electrode signals. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      5. <\/span>Configured custom tooltips, milliseconds X-axis scale, and amplitude µV Y-axis scale.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>[17:44]<\/strong> (68029b5<\/em>) docs(ui): add live signal waveform chart screenshot and update readme gallery <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. <\/span>Added working screenshot 06_signal_waveform_chart.png showing Chart.js time-series waveform comparison to docs\/screenshots\/. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. <\/span>Displayed interactive Raw (dashed orange) vs Filtered (cyan glow) waveform plot with active channel pills and tooltips. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. <\/span>Updated README.md screenshot gallery table to feature the new live visualization view.<\/li><\/ol>\n\n--- DAY 11 (2026-07-28) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Subject of Work:<\/strong> Feature Engineering Phase: Sliding Window EEG Epoch Segmentation Module and Unit Test Coverage<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Detailed Description:<\/strong> Initiated Phase 2 (Feature Engineering) by implementing the sliding window EEG segmentation module in backend\/utils\/epoching.py. Developed create_epochs() to transform 1D or 2D EEG arrays into (n_epochs, n_channels, n_samples_per_epoch) 3D matrices based on configurable parameters (window_size_sec and overlap_ratio). Developed create_epochs_from_dataframe() to process tabular CSV inputs while maintaining metadata alignment through majority-vote categorical event labeling and subject identification per temporal window. Created a test suite in tests\/test_epoching.py containing 13 automated unit tests to validate output shapes, mathematical epoch counts, array value fidelity, boundary edge cases, and metadata extraction (13\/13 passed in 1.66s, bringing overall test suite to 42 passed). Opened a Pull Request to branch feature\/day11-epoching.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>[13:37]<\/strong> (2f61846<\/em>) feat(epoching): add sliding window epoch segmentation module <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. <\/span>Created backend\/utils\/epoching.py with create_epochs() and create_epochs_from_dataframe(). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3. <\/span>create_epochs(): Segments 1D\/2D NumPy EEG arrays into (n_epochs, n_channels, n_samples) shape using configurable window_size_sec and overlap_ratio parameters. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4. <\/span>create_epochs_from_dataframe(): Epochs multi-channel DataFrame, aligns majority-vote event labels and subject_id to each epoch. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          5. <\/span>Returns structured dict with epochs, labels, subjects, n_epochs, and epoch_info metadata. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          6. <\/span>Validated 1D, 2D, and DataFrame inputs produce correct shapes and labels.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>[16:39]<\/strong> (c42c763<\/em>) test: add unit tests for sliding window epoch segmentation module <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2. <\/span>Created tests\/test_epoching.py with 13 unit tests for backend\/utils\/epoching.py. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3. <\/span>Tests verify: 1D\/2D epoch shapes, N_epochs formula correctness, 0% and 75% overlap counts. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            4. <\/span>Tests confirm: first epoch data matches original signal slice exactly (array_almost_equal). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            5. <\/span>Tests validate: ValueError on signal shorter than window and invalid overlap_ratio >= 1.0. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            6. <\/span>Tests check: DataFrame shape, event label majority-vote alignment, subject_id alignment. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            7. <\/span>Tests ensure: epoch_info dict contains all required metadata keys (fs, n_channels, etc.). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            8. <\/span>All 13 tests passed in 1.66s.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>[17:20]<\/strong> (61839fc<\/em>) refactor(epoching): optimize dataframe slicing and add float rounding safety <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              2. <\/span>Updated window_samples and step_samples calculations to use int(round(window_size_sec * fs)) preventing floating-point truncation issues (addressing Faruk-T review). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              3. <\/span>Converted event and subject_id DataFrame columns to NumPy arrays prior to the epoch loop to improve performance (addressing Faruk-T review). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              4. <\/span>Validated all 42 pytest unit & integration tests pass.<\/li><\/ol>\n\n--- DAY 12 (2026-07-29) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subject of Work:<\/strong> Feature Engineering REST API: Implementation of POST \/api\/epoch Endpoint and Integration Testing<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Detailed Description:<\/strong> Developed the POST \/api\/epoch REST API endpoint in backend\/main.py to expose the sliding window EEG segmentation engine to web clients. Designed the endpoint to ingest uploaded CSV files along with configurable form parameters (window_size_sec defaulting to 2.0s and overlap_ratio defaulting to 0.5). Implemented parameter validation rules to reject non-CSV file types, zero\/negative window durations, and out-of-bound overlap ratios (>= 1.0) returning HTTP 400 Bad Request responses. Handled JSON serialization of 3D epoch dimensions (n_epochs, n_channels, n_samples), majority-vote event labels, subject IDs, and initial epoch sample previews. Constructed an integration test suite in tests\/test_epoch_api.py featuring 9 automated tests to validate endpoint functionality across default settings, custom window sizes, 0% non-overlapping windows, and 75% overlap conditions (9\/9 passed in 1.41s, total test suite: 51 passed). Opened a Pull Request on branch day12-epoch-api.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>[15:57]<\/strong> (e0b19f8<\/em>) feat(api): add \/api\/epoch endpoint for eeg time-window segmentation <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. <\/span>Integrated POST \/api\/epoch endpoint in backend\/main.py. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. <\/span>Accepts raw\/filtered EEG CSV uploads along with window_size_sec (default: 2.0) and overlap_ratio (default: 0.5) form parameters. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. <\/span>Validates input parameter ranges (window_size_sec > 0, 0.0 <= overlap_ratio < 1.0). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                5. <\/span>Executes create_epochs_from_dataframe() and returns 3D epoch dimensions (n_epochs, n_channels, n_samples), event labels, subject IDs, epoch_info metadata, and sample preview.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>[15:58]<\/strong> (b41970c<\/em>) test: add integration tests for \/api\/epoch endpoint <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>Created tests\/test_epoch_api.py with 9 integration tests for POST \/api\/epoch. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  3. <\/span>Tests cover default parameters (2.0s window, 50% overlap → 200 OK), custom parameters, zero overlap, and 75% overlap. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  4. <\/span>Tests validate 400 Bad Request responses for non-CSV files, invalid overlap_ratio (>= 1.0), and invalid window_size_sec (<= 0). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  5. <\/span>All 51 unit and integration tests passed in 2.19s.<\/li><\/ol>\n\n--- DAY 13 (2026-07-30) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subject of Work:<\/strong> Phase 2 Feature Engineering: Signal Epoching Dashboard UI Integration and 3D Tensor Visualization<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Detailed Description:<\/strong> Completed the frontend integration of the Signal Epoching Dashboard in frontend\/index.html, frontend\/style.css, and frontend\/app.js. Designed glassmorphic control panels allowing users to adjust window duration (window_size_sec) and sliding overlap percentage (overlap_ratio) via interactive range sliders. Developed dynamic JavaScript calculations to update step stride samples and data augmentation multipliers in real-time. Connected the interface to the POST \/api\/epoch REST API endpoint and implemented dynamic rendering for the output 3D tensor shape (N_epochs × N_channels × N_samples_per_epoch), KPI summary grids, event class distribution pills, and subject-wise epoch counts. Captured high-resolution UI screenshots (07_epoching_controls.png and 08_epoching_tensor_results.png) and updated the README.md project gallery. Opened a Pull Request on branch day13-epoching-ui.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>[15:25]<\/strong> (73792d8<\/em>) feat(ui): add signal epoching dashboard section and controls html\/css <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2. <\/span>Unlocked Signal Epoching navigation item in frontend\/index.html sidebar. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    3. <\/span>Added Signal Epoching page view with active dataset banner and 3 control cards. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    4. <\/span>Implemented sliders for window_size_sec (0.5s–5.0s) and overlap_ratio (0%–80%). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    5. <\/span>Added computed step specs card, 3D tensor shape callout banner, KPI grid, and class\/subject distribution cards in frontend\/style.css.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>[16:31]<\/strong> (05dc96f<\/em>) feat(ui): connect epoching controls to \/api\/epoch api with 3d tensor shape display <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. <\/span>Updated SPA page router in frontend\/app.js to navigate to page-epoching. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3. <\/span>Implemented updateEpochCalculations() to live-calculate step stride samples and augmentation multiplier on slider input. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      4. <\/span>Bound \"Generate EEG Epochs\" button to submit FormData to POST \/api\/epoch. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      5. <\/span>Implemented renderEpochResults() to calculate and render 3D tensor shape (N_epochs x N_channels x N_samples), KPI summary grid, and event class distribution pills.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>[16:37]<\/strong> (7ccdd1e<\/em>) Merge pull request #14 from ismetcansezgin\/day11-epoching Day 11: EEG Signal Epoching (Sliding Window) Module & Unit Tests<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>[16:42]<\/strong> (31c3dc3<\/em>) docs(ui): add signal epoching dashboard screenshots and update readme gallery <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. <\/span>Added high-resolution screenshots of the EEGFlow Signal Epoching Dashboard to docs\/screenshots\/. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3. <\/span>Included 07_epoching_controls.png (window duration\/overlap sliders & step specs calculator) and 08_epoching_tensor_results.png (3D tensor shape (59 x 8 x 500) & event\/subject label distribution). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4. <\/span>Updated README.md screenshot gallery table to feature the new Phase 2 UI views.<\/li><\/ol>\n\n--- DAY 14 (2026-07-31) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subject of Work:<\/strong> Feature Engineering Phase: Implementation of Time and Frequency Domain EEG Feature Extraction Engine and Unit Testing<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Detailed Description:<\/strong> Developed the EEG feature extraction engine in backend\/utils\/features.py to convert 3D epoched signal matrices (n_epochs, n_channels, n_samples) into 2D tabular feature matrices (n_epochs, n_features) for machine learning classification. Implemented extract_time_domain_features() to compute 7 statistical metrics per channel (Mean, Standard Deviation, Variance, Root Mean Square, Peak-to-Peak Amplitude, Skewness, and Kurtosis). Developed extract_frequency_domain_features() utilizing Welch Power Spectral Density (PSD) to compute absolute and relative band powers across standard EEG frequency bands: Delta (0.5–4 Hz), Theta (4–8 Hz), Alpha (8–13 Hz), Beta (13–30 Hz), Gamma (30–45 Hz), and Total Power. Built extract_all_features() to combine time and frequency domain features into a 146-column DataFrame formatted with subject and event metadata. Developed a unit test suite in tests\/test_features.py containing 12 automated tests to verify mathematical accuracy, spectral energy concentration on synthetic sine waves, 2D input handling, and normalization (12\/12 passed in 1.11s, bringing total test suite to 63 passed). Opened a chained Pull Request targeting branch day13-epoching-ui.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>[15:59]<\/strong> (256212a<\/em>) feat(features): add time and frequency domain eeg feature extraction module <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2. <\/span>Created backend\/utils\/features.py with extract_time_domain_features(), extract_frequency_domain_features(), and extract_all_features(). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3. <\/span>Time-domain features (7 per channel): Mean, Std, Variance, RMS, Peak-to-Peak, Skewness, Kurtosis. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            4. <\/span>Frequency-domain features via Welch PSD (11 per channel): Absolute & Relative band powers for Delta (0.5-4Hz), Theta (4-8Hz), Alpha (8-13Hz), Beta (13-30Hz), Gamma (30-45Hz), and Total Power. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            5. <\/span>Transforms 3D epoch matrices (n_epochs, n_channels, n_samples) into 2D tabular DataFrames (n_epochs, n_features) with optional event\/subject labels. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            6. <\/span>Validated on 8-channel EEG producing 146 features per epoch window.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>[16:26]<\/strong> (eee947c<\/em>) test: add unit tests for time and frequency eeg feature extraction module <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              2. <\/span>Created tests\/test_features.py with 12 unit tests for backend\/utils\/features.py. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              3. <\/span>Tests verify: time-domain feature shape (n_epochs, n_channels * 7), precision on constant signals and sine waves. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              4. <\/span>Tests verify: frequency-domain feature shape (n_epochs, n_channels * 11), Welch PSD spectral power distribution (10 Hz alpha sine > 80% rel_alpha, 20 Hz beta sine > 80% rel_beta). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              5. <\/span>Tests confirm: extract_all_features() combines 18 features per channel (144 features for 8 channels) and appends event\/subject_id metadata columns. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              6. <\/span>Tests validate: 2D single epoch input compatibility, absence of NaN\/Inf values, custom channel prefixes, and relative power summation (~1.0). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              7. <\/span>All 63 total unit and integration tests passed in 2.66s.<\/li><\/ol>\n\n--- DAY 15 (2026-08-03) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subject of Work: <\/strong>Feature Engine REST API Endpoint, Alpha Wave ERD Validation Dashboard, and System Styling Integration<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Detailed Description: <\/strong>Developed the POST \/api\/extract-features REST API endpoint in backend\/main.py to bridge the sliding window epoching and 144-dimensional feature extraction modules. The endpoint processes CSV uploads, validates sliding window parameters (window_size_sec, overlap_ratio), and returns tabular feature shapes, class-specific band powers, and relative alpha suppression ratios. Created the \"Feature Engine & Alpha Wave Validation\" dashboard in frontend\/index.html and frontend\/app.js, incorporating control cards, parameter sliders, KPI grids, and dynamic Chart.js bar plots. Implemented a physiological validation algorithm detecting Event-Related Desynchronization (ERD), triggering an \"Alpha ERD Confirmed \" badge when relative alpha power in \"Relaxed\" states (75.6%) exceeds the \"Task\" state (20.5%) by over 20%. Patched UI visual inconsistencies in frontend\/style.css by defining glassmorphic panel classes (.controls-grid, .control-card, .tensor-banner, and .kpi-grid). Developed 12 integration tests in tests\/test_feature_api.py validating upload verification, parameter ranges, and JSON response models (all 12 passed, verifying 63\/63 total system tests). Opened a chained Pull Request targeting branch day14-feature-extraction.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>[10:43]<\/strong> (9e11bc1<\/em>) feat(api): add \/api\/extract-features endpoint with alpha wave validation output <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. <\/span>Added POST \/api\/extract-features REST API endpoint to backend\/main.py. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. <\/span>Accepts CSV file, window_size_sec, overlap_ratio, include_time_features, include_freq_features as form params. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. <\/span>Performs epoch segmentation + feature extraction pipeline and returns: feature_matrix_shape [59, 144], feature_names list, class_band_summary per event class, and alpha_validation dict for Milestone 2 Alpha wave validation chart. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                5. <\/span>Alpha validation confirmed: Relaxed=0.756 vs Task=0.205 relative alpha power (physiologically correct). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6. <\/span>Added backend\/utils\/features.py (extracted from day14 branch for chained PR compatibility).<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>[13:47]<\/strong> (c3e5e73<\/em>) test: add integration tests for \/api\/extract-features endpoint <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>Created tests\/test_feature_api.py with 12 integration tests for POST \/api\/extract-features. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  3. <\/span>Tests verify: 200 OK with valid feature_matrix_shape [59, 144], custom window\/overlap params, time-only and freq-only feature modes. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  4. <\/span>Tests validate: 400 errors for non-CSV files, invalid overlap (>=1.0), invalid window_size (<=0), and both features disabled. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  5. <\/span>Tests check: all required response keys, feature_names length == n_features, alpha_validation floats in [0,1], and class_band_summary contains all 5 EEG bands (delta\/theta\/alpha\/beta\/gamma). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  6. <\/span>All 12 integration tests passed in 6.17s.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>[16:45]<\/strong> (5ab1302<\/em>) feat(ui): add feature engine dashboard with alpha wave validation visualization <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2. <\/span>Unlocked and integrated the Feature Engine section in sidebar (nav-features). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    3. <\/span>Added full page-features HTML: window\/overlap sliders, feature domain toggles, feature matrix shape banner, KPI cards, Alpha wave validation bar chart, all-band power table, validation badge, and feature preview table. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    4. <\/span>Connected \"Extract EEG Features\" button to POST \/api\/extract-features API. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    5. <\/span>Implemented dynamic rendering of 2D feature matrix shape (59 × 144), Alpha ERD validation bars (Relaxed=75.6% vs Task=20.5%), 5-band power table (delta\/theta\/alpha\/beta\/gamma), and physiological validation badge. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    6. <\/span>Alpha ERD Confirmed: Relaxed Alpha power is 3.69x higher than Task Alpha power (Milestone 2 validated). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    7. <\/span>Added glassmorphic CSS: alpha-bar-fill animations, band-pill color chips, validation-result badge with green\/red variants. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    8. <\/span>All 63 unit and integration tests passing (63\/63 in 10.75s).<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>[16:56]<\/strong> (e5085ab<\/em>) fix(ui): add missing control card css and remove internal milestone labels from ui <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. <\/span>Added missing shared CSS classes: .controls-grid (3-col grid), .control-card (glassmorphic card), .control-card-header, .control-icon-wrap, .control-value-badge, .epoch-slider, .btn-epoch, .btn-reset, .no-dataset-banner, .tensor-banner, .tensor-shape, .kpi-grid, .kpi-card. <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3. <\/span>Removed all internal \"Milestone 2\" references from user-facing UI (page subtitle, alpha section heading, validation badge). <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      4. <\/span>Replaced with proper technical\/scientific labels: \"Welch Power Spectral Density\", \"Event-Related Desynchronization (ERD)\".<\/li><\/ol>\n" + }, + "Alesam Baath": { + "id": 28, + "email": "isambais15@gmail.com", + "repo": "https:\/\/github.com\/isambais\/SmartHome-EnergyRL", + "github_username": "isambais", + "total_entries": 18, + "commits_count": 0, + "commits_sample": [], + "full_text": "\n--- DAY 1 (2026-07-13) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Bugün Ne Yapıldı?<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Projenin resmi başlangıcı olarak GitHub üzerinde SmartHome-EnergyRL adlı repository oluşturuldu ve staj boyunca izlenecek tüm geliştirme süreci bu repo üzerinden, branch\/PR akışıyla yönetilecek şekilde planlandı. Günün odağı kod yazmaktan çok, kalan 19 günün üzerine sağlam ve gri nokta bırakmayan bir temel inşa etmekti.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Hazırlanan Belgeler<\/strong><\/h2>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>implementation_plan.md — Projenin tek doğruluk kaynağı (single source of truth) olarak tasarlandı. İçinde problem tanımı, RL ortam tasarımı (gözlem\/aksiyon\/ödül), sistem mimarisi, veri kaynakları, test stratejisi, 20 günlük yol haritası, git workflow ve risk yönetimi gibi 22 ayrı bölüm yer alıyor.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. <\/span>README.md — Projenin ne olduğunu, hangi teknolojileri kullandığını, nasıl kurulup çalıştırılacağını özetleyen tanıtım dosyası yazıldı.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. <\/span>requirements.txt — Projede kullanılacak kütüphaneler belirlendi: gymnasium (RL ortam arayüzü), stable-baselines3 ve torch (PPO algoritması), pandas\/numpy (veri işleme), xgboost ve statsmodels (fiyat tahmini), streamlit ve plotly (dashboard), tensorboard (deney takibi), pytest (test).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. <\/span>.gitignore — Sanal ortam, önbellek ve ham\/gizli veri dosyalarının (ör. data\/raw\/*) repoya girmemesi için yapılandırıldı.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Kararlaştırılan Mimari Yaklaşım — Curriculum Learning<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Mentor geri bildirimiyle projenin en kritik riski netleşti: bir RL ajanını, tüm karmaşıklığı (batarya + güneş + ev talebi + ertelenebilir cihazlar) aynı anda tek seferde öğretmeye çalışmak yakınsama (convergence) sorununa yol açabilir. Bu yüzden ortam üç aşamalı bir \"curriculum\" (aşamalı öğretim) olarak tasarlandı:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>Aşama 1 — Saf Batarya Arbitrajı: Ajan sadece batarya doluluk seviyesi ve saatlik fiyatı görüp, ucuzken şarj edip pahalıyken deşarj etmeyi öğrenir.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. <\/span>Aşama 2 — Pasif Tüketim ve Güneş Entegrasyonu: Ortama ev talebi ve güneş üretimi eklenir; ajan şebekeden çekmeden önce güneşi ve bataryayı kullanmayı (öz-tüketim) öğrenir.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3. <\/span>Aşama 3 — Ertelenebilir Cihazlar ve Tahmin Dayanıklılığı: Çamaşır makinesi gibi cihazların ne zaman çalıştırılacağı kararı eklenir, gerçek (oracle) fiyat yerine gürültülü tahmin verisiyle çalışılır.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Bir sonraki aşamaya, mevcut aşamanın beklenen davranışı doğrulanmadan geçilmeyecek şekilde katı bir kural belirlendi (Gün 8, 11 ve 14 birer \"kalibrasyon checkpoint'i\" olarak planlandı).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Proje Dizin Yapısı<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Kodun büyüyeceği modüler bir klasör yapısı önceden planlandı: src\/env (RL ortamı), src\/data (veri yükleyiciler), src\/agents (PPO eğitimi), src\/baselines (sezgisel karşılaştırma), src\/forecasting (fiyat tahmini), src\/evaluation (karşılaştırma\/metrikler), src\/dashboard (Streamlit arayüzü), ayrıca data\/, models\/, notebooks\/, tests\/ ve docs\/ klasörleri.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Öğrenilenler \/ Değerlendirme<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Bir RL projesinde en pahalı hata, kod yazmaya erken başlayıp yarı yolda mimariyi değiştirmektir. Bu yüzden ilk gün tamamen plana ayrıldı; bu sayede sonraki her gün \"ne yapacağım\" sorusuna değil doğrudan uygulamaya odaklanabilecek. Ayrıca reward hacking (ajanın ödül fonksiyonundaki bir açığı sömürmesi, örn. cihazı hiç çalıştırmayarak maliyeti düşürmesi) riski daha ilk günden yol haritasına ve risk tablosuna not edildi.<\/p>\n\n--- DAY 2 (2026-07-14) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Bugün Ne Yapıldı?<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Yol haritasındaki Gün 2 hedefi doğrultusunda, projenin ilk gerçek kod modülü olan EpiasLoader yazıldı. Amaç, EPİAŞ Şeffaflık Platformu'ndan (seffaflik.epias.com.tr) indirilen Piyasa Takas Fiyatı (PTF) CSV dosyalarını okuyup, RL ortamının doğrudan kullanabileceği temiz ve standart bir saatlik fiyat serisine dönüştürmekti.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Karşılaşılan Teknik Zorluk: Türkçe Sayı Formatı<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            EPİAŞ'ın verdiği CSV dosyaları noktalı virgülle (;) ayrılmış ve fiyatlar Türkçe\/Avrupa sayı formatında geliyor — binlik basamaklar nokta ile, ondalık kısım virgül ile ayrılıyor (örnek: \"3.325,00\" aslında 3325.00 TL\/MWh demek). Python'un standart float() dönüşümü bu formatı doğrudan tanımadığı için, sayıyı önce binlik noktadan arındırıp sonra ondalık virgülü noktaya çeviren özel bir _parse_turkish_number() fonksiyonu yazıldı. Bu, ileride ortamın yanlış fiyat sinyaliyle beslenmesini önleyen kritik bir düzeltme.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Yazılan Kod — EpiasLoader Sınıfı<\/strong><\/h2>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>load_csv(filename): Tek bir günlük CSV dosyasını okur; Tarih ve Saat kolonlarını birleştirip gerçek bir datetime damgasına çevirir, fiyatı Türkçe formattan float'a çevirir, sonucu timestamp ve price_tl_mwh kolonlarına indirger ve zamana göre sıralar.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2. <\/span>load_range(filenames): Birden fazla günlük CSV dosyasını art arda okuyup tek, zamana göre sıralanmış bir seri hâlinde birleştirir — ileride ortamın çok günlük\/haftalık bölümler (episode) oluşturabilmesi için gerekli.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Test Stratejisi ve Doğrulama<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Gerçek EPİAŞ dosyasına bağımlı, kırılgan bir test yazmak yerine (o dosya zaten .gitignore'da, repoya girmiyor), pytest'in tmp_path fixture'ı ile test sırasında geçici, küçük bir örnek CSV oluşturulup okundu. Üç birim testi yazıldı: (1) Türkçe sayı formatının doğru parse edildiğinin doğrulanması, (2) sonucun zamana göre sıralı (monotonic increasing) çıktığının doğrulanması, (3) timestamp kolonunun gerçekten datetime tipinde olduğunun doğrulanması.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Kod, sadece yazılıp bırakılmadı — hem otomatik testler hem de gerçek bir 24 saatlik örnek PTF dosyasıyla elle çalıştırılarak doğrulandı: pytest çalıştırıldığında 3 test de (PASSED) geçti; gerçek dosyayla yapılan manuel kontrolde 24 satırın tamamı doğru okundu, en düşük fiyat 521,43 TL\/MWh ve en yüksek fiyat 4.009,65 TL\/MWh doğru şekilde ayrıştırıldı, kayıtlar saate göre sıralı çıktı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Git Workflow<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Değişiklikler doğrudan main branch'e değil, planda belirlenen kurala uygun şekilde feature\/epias-loader adlı ayrı bir branch üzerinde yapıldı. Dosyalar src\/data\/epias_loader.py ve tests\/test_epias_loader.py olarak eklendi, commit mesajı proje standardına uygun yazıldı: \"feat(data): EpiasLoader ve PTF veri parse testleri eklendi\". Ardından GitHub'da #7 numaralı Pull Request açıldı, dosya değişiklikleri (5 dosya, +133 satır) tek tek gözden geçirildi, main ile çakışma olmadığı doğrulandı ve PR onaylanıp main branch'e merge edildi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Sonraki Adım (Gün 3)<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Yol haritasına göre bir sonraki hedef, güneş üretimi ve ev talebi için açık veri kaynaklarının (NREL PVWatts, UK-DALE) araştırılması; bu kaynaklara erişim veya format uygun değilse parametrik sentetik profil üretimine geçiş planının netleştirilmesidir.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Öğrenilenler \/ Değerlendirme<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Gerçek dünya verisiyle çalışırken \"format varsayımı yapmamak\" gerektiğini somut olarak deneyimledim — EPİAŞ'ın sayı formatı ilk bakışta gözden kaçabilecek, ama sessizce yanlış (10-100 kat büyük\/küçük) fiyat üretebilecek bir hataydı. Ayrıca testleri gerçek harici bir dosyaya bağımlı yazmak yerine küçük, kontrollü bir örnek veriyle yazmanın testleri hem hızlı hem de tekrarlanabilir kıldığını gördüm.<\/p>\n\n--- DAY 3 (2026-07-16) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Bugün Ne Yapıldı?<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Yol haritasındaki Gün 3 hedefi doğrultusunda, güneş üretimi ve ev talebi için açık veri kaynakları araştırıldı. Sadece araştırmayla kalınmadı; her iki kaynak için de gerçek, çalışan ve test edilmiş kod yazıldı — plandaki \"erişilemezse sentetiğe geç\" yedek planına hiç gerek kalmadı, çünkü ikisi de gerçekten erişilebilir çıktı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Güneş Üretimi — NREL\/NLR PVWatts API<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              PVWatts API'si (ücretsiz, API key veya test için herkese açık DEMO_KEY ile erişilebiliyor) araştırıldı. SolarProfileGenerator sınıfı yazıldı: fetch_hourly_profile() PVWatts'tan TMY (Typical Meteorological Year) tabanlı 8760 saatlik üretim verisini çekiyor; align_to_dates() bu tipik yılı ay-gün-saat eşlemesiyle gerçek hedef tarihlere hizalıyor. Hem sahte (mock) testlerle hem gerçek API çağrısıyla (İstanbul koordinatları, 41.01\/28.98) doğrulandı — gerçek üretim verisi başarıyla alındı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Ev Talebi — UK-DALE Gerçek Veri<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              UK-DALE veri seti (Jack Kelly & William Knottenbelt, Scientific Data 2015) indirildi (3.5 GB, sadece dağıtılmış\/disaggregated CSV kısmı). house_1\/channel_1.dat dosyasının evin \"aggregate\" (toplam güç) kanalı olduğu doğrulandı: 2012-2017 arası 4.3 yıllık, 6 saniyede bir ölçüm (21.8 milyon satır). DemandProfileGenerator sınıfı yazıldı: ham veriyi saatlik ortalamaya indirgiyor, çok yıllık veriden haftanın günü + saat bazında bir \"tipik hafta\" profili (168 değer) çıkarıyor. Gerçek veriyle doğrulandı: ortalama günlük tüketim 9.06 kWh, akşam 18-20 arası tepe (~520-530 W), gece düşük tüketim (~200-250 W) — gerçekçi bir ev paterni.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Karşılaşılan Teknik Detay: Gürültü\/Varyans Eksikliği<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              İlk yazımda align_to_dates() fonksiyonu her hafta aynı saat için birebir aynı (deterministik) değeri döndürüyordu. implementation_plan.md Bölüm 8'in \"ortalama bir konut profiline indirgenir, gürültü eklenir\" talimatı fark edilip düzeltildi: artık her saat için gerçek veriden hesaplanan standart sapmaya göre normal dağılımdan örneklenmiş gerçekçi bir varyans ekleniyor (negatif olmayacak şekilde sıfırda kırpılıyor), tekrarlanabilirlik için sabit seed kullanılıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Dokümantasyon<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Gün 2 PR'ında bıraktığı \"docs eksik\" geri bildirimine yanıt olarak docs\/data-sources.md dosyası oluşturuldu — EPİAŞ, PVWatts ve UK-DALE kaynaklarının detayları, erişim yöntemleri, ham\/işlenmiş veri örnekleri ile.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Doğrulama<\/strong><\/h2>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>SolarProfileGenerator: 4 birim test (mock) + gerçek PVWatts API çağrısıyla doğrulama<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              2. <\/span>DemandProfileGenerator: 7 birim test (gürültü ve tekrarlanabilirlik testleri dahil) + gerçek 328 MB'lık dosyayla uçtan uca çalıştırma (21.8M satır → 37.843 saatlik nokta → 168 değerlik tipik hafta profili)<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Git Workflow<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                feature\/solar-profile ve feature\/demand-profile branch'leri açıldı, açıklamaları yazıldı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Commit mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>feat(data): PVWatts API ile SolarProfileGenerator eklendi<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. <\/span>feat(data): UK-DALE gercek veriyle DemandProfileGenerator eklendi, docs\/data-sources.md guncellendi<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Sonraki Adım (Gün 4)<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  implementation_plan.md'ye göre üç veri kaynağının (fiyat, güneş, talep) saatlik takvimde hizalanıp data\/processed\/ altında birleşik bir veri seti oluşturulması.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Öğrenilenler \/ Değerlendirme<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Gerçek veriyle çalışmak, sentetik veriye göre çok daha fazla \"sürpriz\" teknik detay çıkarıyor (Türkçe sayı formatı, UK-DALE'in kanal yapısı, PVWatts'ın TMY mantığı gibi) — ama bu sürprizleri erken yakalamak, ileride ortamı kurarken yanlış varsayımlarla ilerlemekten çok daha ucuz.<\/p>\n\n--- DAY 4 (2026-07-17) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Bugün Ne Yapıldı?<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  implementation_plan.md Bölüm 8'de projedeki en kritik ön işleme adımı olarak işaretlenen hizalama görevi için build_dataset.py modülü yazıldı. Amaç: EpiasLoader'dan gelen fiyat serisini referans takvim olarak alıp, SolarProfileGenerator ve DemandProfileGenerator'ın ürettiği verileri bu takvime hizalayarak tek, ortamın doğrudan kullanabileceği bir CSV dosyasında birleştirmekti.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Yazılan Kod — build_aligned_dataset() ve save_processed_dataset()<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  build_aligned_dataset(), price_df'in zaman damgalarını referans alıp solar_generator.align_to_dates() ve demand_generator.align_to_dates() metotlarını çağırarak güneş ve talep verisini aynı saatlere oturtuyor, ardından üçünü timestamp üzerinden birleştiriyor. save_processed_dataset() sonucu data\/processed\/aligned_dataset.csv olarak kaydediyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Karşılaşılan Teknik Karar: Erken Hata Fırlatma (Fail-Fast)<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Plan Bölüm 8'in \"bu adım aksarsa ortam yanlış sinyal üretir\" uyarısı ciddiye alınarak üç güvenlik kontrolü eklendi: (1) tekrarlanan zaman damgası varsa ValueError, (2) birleştirme sonrası satır sayısı değiştiyse ValueError, (3) eksik (NaN) değer kalırsa ValueError. Amaç, hizalama hatasının sessizce geçip haftalar sonra RL ortamında anlaşılmaz bir davranış olarak ortaya çıkmasını önlemekti.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Doğrulama<\/strong><\/h2>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>tests\/test_build_dataset.py: 4 birim testi — birleştirme doğruluğu, tekrarlanan zaman damgasında ValueError, satır sırasının korunması, CSV kaydet\/yeniden oku. Hepsi (PASSED) geçti.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>Uçtan uca gerçek veriyle çalıştırma: gerçek EPİAŞ tam yıl verisi (8784 saatlik satır) ve gerçek UK-DALE ev talebi verisiyle birleştirildi. Sonuç: 8784 satır, 0 eksik (NaN) değer, ortalama fiyat ≈2208 TL\/MWh, ortalama güneş üretimi ≈1.11 kW, ortalama ev talebi ≈0.385 kW.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Not: Sandbox Kısıtlaması<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Bu uçtan uca doğrulama koşusunda PVWatts API'sine sandbox'tan canlı erişim mümkün olmadı; güneş sütunu o tek entegrasyon testinde temsili bir eğriyle dolduruldu. SolarProfileGenerator'ın kendisi Gün 3'te gerçek PVWatts API'siyle ayrıca doğrulanmıştı; production kullanımında gerçek API verisi kullanılacak.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Dokümantasyon Güncellemesi<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    docs\/data-sources.md dosyasındaki Hizalama Notu bölümü hâlâ gelecek zamanla yazılmıştı; bölüm tamamlandığını belirtecek ve gerçek doğrulama rakamlarını içerecek şekilde güncellendi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Git Workflow<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    feature\/build-dataset branch'i açıldı, build_dataset.py ve test_build_dataset.py eklendi, umitunc reviewer olarak eklendi. Kanban board'da Gün 4 kartı (Issue #7) şu anda Review sütununda, onay bekleniyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Commit mesajı (proje standardına uygun, feat(kategori): açıklama formatında):<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>feat(data): uc veri kaynagini hizalayan build_dataset.py eklendi<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      git log --oneline ile branch geçmişi kontrol edildi; feature\/build-dataset dalı PR #8 ve PR #9 merge edildikten sonraki güncel main üzerine kurulmuş. Tüm önceki commit'ler de standarda uygun, boş olmayan mesajlarla main'e sadece PR\/merge commit'leri üzerinden girmiş.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Sonraki Adım (Gün 5)<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      implementation_plan.md'ye göre Faz 1'in başlangıcı: src\/env\/energy_env.py içinde minimal bir SmartHomeEnergyEnv iskeleti — sadece batarya SOC'si ve 24 saatlik fiyat gözlemi, tek boyutlu battery_action ile Curriculum Aşama 1.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Öğrenilenler \/ Değerlendirme<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Bu gün bana veri hizalamanın neden en kritik ön işleme adımı olarak işaretlendiğini gösterdi: üç farklı veri kaynağı üç farklı takvim mantığına sahip ve bunları birleştirirken sessizce yanlış bir eşleme yapmak kolay olabilirdi. Erken hata fırlatma yaklaşımını burada bilinçli bir tasarım kararı olarak uyguladım.<\/p>\n\n--- DAY 5 (2026-07-20) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Bugün Ne Yapıldı?<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      implementation_plan.md Bölüm 15 (Gün 5) ve Bölüm 6 (Curriculum Aşama 1) hedefi doğrultusunda, RL ajanının içinde çalışacağı ilk ve en basit ortam yazıldı: SmartHomeEnergyEnv. Bu ortam, projedeki üç aşamalı curriculum yaklaşımının ilk aşaması — sadece batarya ve elektrik fiyatı var; güneş, ev talebi ve cihazlar bilerek dışarıda bırakıldı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Gözlem ve Aksiyon Uzayı Tasarımı<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Gözlem uzayı 25 boyutlu: batarya SOC'si (0-1 arası tek değer) + günün 24 saatlik elektrik fiyatı (oracle, yani gerçek\/bilinen fiyat). Aksiyon uzayı tek boyutlu ve sürekli: battery_action ∈ [-1, 1] — pozitif değer şarj, negatif değer deşarj anlamına geliyor.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Batarya Fizik Modeli<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      step() fonksiyonu içine basit ama gerçekçi bir batarya modeli eklendi: round-trip efficiency (varsayılan %90) şarj ve deşarj verimliliği olarak karekök alınıp simetrik bölüştürüldü (charge_efficiency × discharge_efficiency = round_trip_efficiency). Şarj\/deşarj işlemleri her zaman batarya kapasitesine göre sınırlandırılıyor, yani SOC hiçbir zaman 0 ile 1 aralığının dışına çıkamıyor — bu, 200 rastgele adımlık bir testle doğrulandı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Görsel Doğrulama: render() ve pygame<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Gerçek bir gymnasium ortamı gibi, canlı bir pencerede gösterdim. Bunun üzerine SmartHomeEnergyEnv'e gerçek bir render(render_mode='human') metodu eklendi — pygame ile batarya doluluk seviyesini (renk kodlu: kırmızı\/sarı\/yeşil), o anki aksiyonu (şarj\/deşarj\/bekle oku) ve günün fiyat grafiğini (o anki saat vurgulu) çizen bir pencere açılıyor.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      scripts\/watch_env.py<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Ortamı her curriculum aşamasından sonra gözle doğrulamak için scripts\/watch_env.py adında kalıcı bir yardımcı script eklendi. Bu script, mümkünse data\/processed\/aligned_dataset.csv'deki gerçek EPİAŞ verisini kullanıyor; dosya yoksa (henüz üretilmediyse) gömülü gerçek bir güne düşüyor. Klavye ile (yukarı ok=şarj, aşağı ok=deşarj, boşluk=bekle) bataryayı bizzat yönetip günlük kazancı gözlemleyebiliyorum.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Kod Standardı Kontrolü: Eksik Bulundu ve Düzeltildi<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      İmplementation_plan.md Bölüm 12'nin \"tüm public fonksiyonlarda type hints\" şartına rağmen step(), reset(), render(), close() metotlarında eksik tip ipuçları vardı — eklendi. (2) Aynı bölümün \"black + ruff ile otomatik formatlama\/lint\" şartı hiç uygulanmamıştı — ilk kez çalıştırıldı: black 3 dosyayı yeniden biçimlendirdi, ruff bir import-sırası hatası buldu, ikisi de düzeltildi. Düzeltmelerden sonra tüm testler tekrar çalıştırılıp hâlâ geçtiği doğrulandı<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Doğrulama<\/strong><\/h2>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>tests\/test_energy_env.py: 10 birim testi — SOC sınırları, şarj\/deşarj ödül işareti, boşken deşarjın no-op olması, bölüm süresi, tekrarlanabilirlik. Hepsi (PASSED) geçti.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. <\/span>Gymnasium'un resmi gymnasium.utils.env_checker.check_env() fonksiyonu hatasız geçti (implementation_plan.md Bölüm 13 şartı).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3. <\/span>Basit bir eşik-tabanlı strateji (ucuzken şarj, pahalıyken deşarj) gerçek EPİAŞ verisiyle test edildi: 1 günde +16 TL kazanç, bataryayı hiç kullanmayan taban strateji ise 0 TL — arbitraj sinyalinin doğru çalıştığı doğrulandı.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        watch_env.py ile gerçek 15 Temmuz 2025 EPİAŞ verisi üzerinde klavye kontrollü elle test yapıldı<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Git Workflow<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        feature\/energy-env branch'i açıldı, src\/env\/energy_env.py, tests\/test_energy_env.py, scripts\/watch_env.py ve düzeltilmiş .gitignore eklendi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Commit mesajı:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>feat(env): SmartHomeEnergyEnv batarya arbitraji ortami eklendi<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PR #13 açıldı (\"Feature\/energy env\").<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Sonraki Adım (Gün 6)<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          implementation_plan.md'ye göre Gün 6 hedefi ilk ödül fonksiyonu, check_env() doğrulaması ve birim testleriydi — bunların büyük kısmı Gün 5 içinde zaten tamamlandı (reward mantığı, check_env, 10 test). Gün 6'da kalan iş: ödül fonksiyonu ağırlıklarının gözden geçirilmesi ve varsa ek kalibrasyon; ardından Gün 7'de Stable-Baselines3 PPO ile ilk eğitim denemesine geçilecek.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Öğrenilenler \/ Değerlendirme<\/strong><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Bu gün, projenin gerçek RL kısmına ilk kez dokunduğum gündü — önceki dört gün veri ve altyapıyla ilgiliydi, bugün ise ajanın içinde yaşayacağı ortamı kurdum. Bu bana, soyut bir problemi (batarya ne zaman şarj\/deşarj edilmeli) somut bir yazılım arayüzüne (gözlem\/aksiyon\/ödül) nasıl döktüğümü ilk elden gösterdi. Ayrıca 'kod çalışıyor' ile 'plana ve standartlara tam uyuyor' arasındaki farkın, sadece teoride değil pratikte de önemli olduğunu gördüm — bir özelliği bitirmiş olmak, onu gerçekten bitirmiş olmak anlamına gelmiyor; süreç disiplini (temiz commit geçmişi, kod standartları, dokümantasyon) kadar dikkat gerektiriyor. Bugün ayrıca kendi kodumu daha eleştirel gözle kontrol etmeyi ve küçük görünen bir ayrıntının bile büyük etkisi olabileceğini öğrendim<\/p>\n\n--- DAY 6 (2026-07-21) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 6 — Ödül Fonksiyonu ve Politika Değerlendirici<\/span><\/h1>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 5'te SmartHomeEnergyEnv'in step() metoduna gömülü olan ödül hesabı, bağımsız bir _compute_reward() metoduna taşındı. Bu değişiklik yeni bir özellik eklemek değil; projenin ilerleyen aşamalarında (Gün 9, 13) ödül fonksiyonu değiştiğinde sadece tek bir metodun güncellenmesini sağlamak için yapıldı. Aynı gün içinde episode istatistikleri (toplam ödül, maliyet, gelir) info sözlüğüne eklendi; her bölümün sonu artık detaylı bir özet döndürüyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Bunların yanı sıra üç farklı karar politikasını karşılaştıran scripts\/eval_policy.py scripti yazıldı ve ödül fonksiyonunun tasarım gerekçeleri docs\/reward-design.md dosyasında belgelendi.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Teknik Detaylar<\/span><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          _compute_reward() Metodu<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ödül formülü: reward = revenue_tl - cost_tl. Şarj sırasında şebekeden çekilen enerji × fiyat maliyet olarak hesaplanıyor; deşarj sırasında bataryadan çıkan enerji × deşarj verimliliği × fiyat gelir olarak elde ediliyor. Ceza terimleri henüz yok — bunlar Curriculum Aşama 3'te (Gün 13+) eklenecek.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Episode İstatistikleri<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          step() metoduna toplam ödül, maliyet ve gelir sayaçları eklendi. Bölüm bitişinde (terminated=True) bu değerler info['episode'] sözlüğü içinde döndürülüyor. Eğitim sırasında her günün performansını takip etmek için temel altyapı kurulmuş oldu.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Politika Karşılaştırması (eval_policy.py)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          30 gün üzerinde üç politika değerlendirildi:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Bekle (hiçbir şey yapma): 0.00 TL\/gün — alt referans sınırı<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Rastgele: -0.32 TL\/gün — verimlilik kaybı nedeniyle zarar<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Eşik (ucuza şarj, pahalıya deşarj): +31.52 TL\/gün — insan sezgisi<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 8'deki kalibrasyon checkpoint'inde PPO ajanının en azından eşik politikasını geçmesi bekleniyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Yeni Birim Testleri (4 adet)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Bekle aksiyonunda ödül sıfır<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Şarj edip hemen deşarj edince verimlilik kaybı nedeniyle net zarar<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Yüksek fiyatta deşarj düşük fiyattan daha fazla kazandırır<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Episode bitişinde info['episode'] anahtarı mevcut<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Doğrulama<\/span><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 14 birim testi — hepsi PASSED (10 önceki + 4 yeni)<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • black + ruff: 3 dosya temiz<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • eval_policy.py: Bekle=0.00 TL, Rastgele=-0.32 TL, Esik=+31.52 TL<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Git Workflow<\/span><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Branch: feature\/reward-function<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Commit: feat(reward): _compute_reward metodu, episode istatistikleri, eval_policy scripti ve reward tasarım dokumanı<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Sonraki Adım<\/span><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 7 — Stable-Baselines3 PPO ile ilk eğitim denemesi ve TensorBoard entegrasyonu.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Öğrenilenler \/ Değerlendirme<\/span><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 6, projedeki ilk temizlik günüydü — yeni bir özellik eklemek yerine var olanı daha sürdürülebilir hale getirdik. Başta bu tür bir günün değerini anlamak zor; kod zaten çalışıyordu, neden değiştirelim ki? Ama ödül hesabını step() içinden çıkarıp _compute_reward()'a taşımanın gerekçesini kavrayınca bakış açım değişti: bir şeyin bugün çalışması ile yarın kolayca değiştirilebilir olması farklı şeyler. Gerçek bir projede kodu sadece bugünkü ihtiyaç için değil, ilerideki değişiklikleri göz önünde bulundurarak yazmak gerekiyor. Bu, mühendislik düşüncesinin benim için yavaş yavaş oturmaya başladığı bir gündü.<\/p>\n\n--- DAY 7 (2026-07-22) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 7 — PPO ile İlk Eitim ve TensorBoard<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 6'da ödül fonksiyonu bağımsız hale getirilmişti ve politika karşılaştırma scripti çalışıyordu. Sıra artık ortama gerçek bir pekiştirmeli öğrenme algoritması bağlamaya gelmişti. Gün 7'de Stable-Baselines3 kütüphanesinin PPO implementasyonu kullanılarak scripts\/train_ppo.py yazıldı; model 50.000 adım boyunca eğitildi. Eğitim sırasında TensorBoard entegrasyonu kuruldu ve ödül eğrisi canlı olarak izlendi. Eğitilen model eval_policy.py'ye eklenerek kural tabanlı politikalarla karşılaştırıldı. Gün sonunda eğitilmiş ajanı pygame penceresiyle görselleştiren enjoy_ppo.py tamamlandı ve eğitim sürecini belgeleyen docs\/training-notes.md oluşturuldu.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Teknik Detaylar:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PPO Eğitimi (train_ppo.py)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Stable-Baselines3'ün PPO implementasyonu kullanıldı. Ortam, eğitim verimliliğini artırmak için 4 paralel kopya olarak sarmalandı (make_vec_env). Hiperparametreler: learning_rate=3e-4, n_steps=512, batch_size=64, n_epochs=10, gamma=0.99, seed=42. Her 2.500 adımda bir EvalCallback devreye girerek o anki politikanın ortalama ödülünü ölçtü ve en iyi modeli models\/ dizinine kaydetti. Eğitim 50.000 adımda tamamlandı; ortalama bölüm ödülü başlangıçta -7.5 TL iken 50.000. adımda +15.3 TL'ye yükseldi.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          TensorBoard Entegrasyonu<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          model.learn() çağrısına tensorboard_log parametresi eklendi; eğitim logları logs\/ppo_smarthome dizinine yazıldı. Tarayıcıda python -m tensorboard.main --logdir logs\/ppo_smarthome komutuyla açılan gösterge panelinde ep_rew_mean (ortalama bölüm ödülü) ve train\/value_loss eğrileri izlendi. Ödül eğrisi yaklaşık 35.000. adıma kadar düzenli biçimde yükseldi, ardından düzleşti — bu, ajanın öğrenebileceği kadar öğrendiğinin göstergesi.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Kurulum Sorunu ve Çözümü<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          stable-baselines3[extra] kurulumunda pygame bileşeni SSL sertifika hatası verdi. [extra] olmadan yalnızca stable-baselines3 ve tensorboard kurulunca sorun ortadan kalktı. train_ppo.py dosyasında proje kök dizininin Python path'ine eklenmesi gereken satırlar (sys.path.insert, os.chdir) E402 import sırası kuralını ihlal ediyordu; ilgili satırlara # noqa: E402 etiketi eklenerek ruff kontrolü yerel olarak devre dışı bırakıldı.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Politika Karşılaştırması (eval_policy.py)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Eğitilmiş model ppo_policy olarak eval_policy.py'ye eklendi ve dört politika 30 gün üzerinden değerlendirildi:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Bekle (hiçbir şey yapma): 0.00 TL\/gün — alt referans sınırı<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Rastgele: -6.49 TL\/gün — verimlilik kaybı nedeniyle zarar<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Eşik (ucuza şarj, pahalıya deşarj): +31.52 TL\/gün — insan sezgisi, tam fiyat bilgisiyle<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • PPO: +15.32 TL\/gün — öğrenilmiş politika, sadece mevcut gözleme dayanarak<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PPO'nun eşik politikasının gerisinde kalması beklenen bir sonuçtu: eşik politikası gün içindeki tüm fiyatları önceden biliyor (oracle), PPO ise yalnızca mevcut durumu gözlemleyerek karar alıyor. Tek günlük veri üzerinde eğitilmesine karşın negatif olmayan bir ödül elde etmesi anlamlı.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Görselleştirme (enjoy_ppo.py)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Eğitilmiş model yüklenerek her adımda model.predict(obs, deterministic=True) ile karar alındı ve SmartHomeEnergyEnv'in render_mode='human' seçeneği üzerinden pygame penceresi açıldı. Pencerede sol tarafta batarya doluluk göstergesi (yeşil\/sarı\/kırmızı), sağ tarafta o günün 24 saatlik fiyat çubuk grafiği (o anki saat turuncu), ortada ajanın son kararı (SARJ \/ DESARJ \/ BEKLE) gösterildi. Mevcut tek günlük veriyle eğitildiğinden ajan yalnızca deşarj yaptı — bu, Gün 8'de gerçek 366 günlük EPIAS verisiyle yeniden eğitimde düzelecek.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Yeni Birim Testleri (4 adet — test_train_ppo.py)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • PPO eğitimi 500 adımda hatasız tamamlanıyor<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Model dosyası kaydediliyor ve yeniden yüklenebiliyor<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Eğitilmiş model geçerli aksiyonlar üretiyor (şekil (1,), aralık [-1, 1])<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Eğitilmiş model 24 adımlık tam bir bölümü sonlandırabiliyor<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Doğrulama<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 4 birim testi — hepsi PASSED<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • black + ruff: tüm dosyalar temiz<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • eval_policy.py: Bekle=0.00 TL, Rastgele=-6.49 TL, Esik=+31.52 TL, PPO=+15.32 TL<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • TensorBoard: ep_rew_mean eğrisi -7.5'ten +15.3'e yükseldi, 35.000. adımdan sonra düzleşti.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Git Workflow<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Branch: <\/strong>feature\/ppo-training<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Commit: <\/strong>feat(ppo): PPO egitimi, TensorBoard, enjoy_ppo, politika karsilastirmasi ve egitim notlari<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PR: <\/strong>#18 — açıldı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Sonraki Adım<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 8 — Kalibrasyon checkpoint'i: PPO gerçek 366 günlük EPIAS verisiyle yeniden eğitilecek ve eşik politikasını geçip geçemediği ölçülecek.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Öğrenilenler \/ Değerlendirme<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 7, projedeki ilk gerçek eğitim günüydü. Bir algoritmanın 'öğrendiğini' okumak ile terminalde sayıların değiştiğini ve TensorBoard'da eğrinin yükseldiğini canlı olarak görmek arasında büyük bir fark var. ep_rew_mean -7.5'ten başlayıp +15.3'e çıkarken 'bu ajan gerçekten bir şey öğreniyor' duygusu çok somutlaştı.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PPO'nun clip mekanizmasının ne işe yaradığını bu süreçte daha iyi kavradım: politikayı çok büyük adımlarla güncellemek yerine eski ve yeni politika arasındaki oranı [0.8, 1.2] bandında tutmak, öğrenmeyi kararlı kılıyor. Aksi hâlde ajan bir anda çok büyük bir güncelleme alıp öğrendiklerini unutabiliyor. tek günlük veriyle eğitimde daha fazla adım ezber anlamına geliyor, yeni bir şey öğretmiyor. Gün 8'de gerçek veriyle bu kısıt ortadan kalkacak.<\/span><\/p>\n\n--- DAY 8 (2026-07-23) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 8 — Gerçek EPIAS Verisi, VecNormalize ve Çok Algoritmali Eğitim<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 7'de PPO tek günlük yapay veriyle eğitilmişti ve eşik politikasının yarısı kadar ödül elde edebilmişti. Gün 8'in hedefi buydu: gerçek piyasa verisiyle yeniden kalibrasyon. Sabah EPIAS'tan indirilen 15.07.2025–15.07.2026 tarihleri arasındaki PTF verisini işleyerek başladım. Ardından Optuna ile en iyi hiperparametreleri buldum, PPO'yu 500.000 adım yeniden eğittim ve projeye iki yeni algoritma ekledim: A2C ve SAC. Günün sonunda altı farklı politikayı gerçek veriye karşı karşılaştıran bir grafik elimde vardı.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Teknik Detaylar<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gerçek EPIAS Verisi (prepare_epias_data.py)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ham veri Türkçe sayı formatındaydı: '3.230,00' gibi binlik ayracı nokta, ondalık ayracı virgüldü. prepare_epias_data.py bu formatı parse ederek 8.784 saatlik temiz bir CSV oluşturdu. Ortalama fiyat 2.207,9 TL\/MWh, minimum 0,0, maksimum 4.500,0 TL\/MWh. Sentetik veri üreten generate_epias_data.py de yedek olarak eklendi.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Optuna Hiperparametre Araması (optuna_search.py)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          20 deneme, her biri 10.000 adım. En iyi sonuç Trial #8'de geldi: 13,69 TL. Bulunan parametreler: learning_rate=3,25e-4, n_steps=256, batch_size=128, gamma=0,953. Bu parametreler tüm PPO eğitimlerinde kullanıldı.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Seed Robustness (seed_robustness.py)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Aynı hiperparametrelerle 5 farklı random seed (0–4) üzerinde 50.000 adım eğitim yapıldı. Sonuçlar: 13,14 — 11,13 — 11,53 — 11,11 — 12,56 TL. Ortalama 11,89 TL, standart sapma 0,81 TL. Std < 1 TL olduğu için model stabil kabul edildi.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PPO Yeniden Eğitimi (train_ppo.py)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Optuna parametreleri + 256×256 sinir ağı + VecNormalize + 4 paralel ortam + 500.000 adım. VecNormalize gözlem uzayını normalize ediyor: 300–4.500 TL\/MWh aralığındaki fiyatları [-3, 3] bandına çekiyor. Bu sayede sinir ağı daha hızlı öğreniyor. eval\/mean_reward: 13,0 TL.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          A2C Eğitimi (train_a2c.py)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Advantage Actor-Critic algoritması PPO ile aynı VecNormalize altyapısıyla eğitildi. Temel farklar: n_steps=32 (PPO'nun 256'sına karşı), ent_coef=0,01 (entropi bonusu — keşfi artırır), learning_rate=7e-4. 500.000 adım, 4 paralel ortam. eval\/mean_reward: 12,1 TL. Eğitim süresi ~4 dakika — PPO'nun yarısı kadar.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          SAC Eğitimi (train_sac.py)<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Soft Actor-Critic, off-policy bir algoritmadır: geçmiş 200.000 deneyimi replay buffer'da tutar ve her güncellemede bunlardan rastgele örnekler çeker. Sadece anlık deneyimi kullanan PPO\/A2C'ye kıyasla çok daha sample-efficient. Sürekli aksiyon uzayı [-1, 1] için özellikle uygundur. 100.000 adımda PPO\/A2C'nin 500.000 adımdaki performansını yakaladı. eval\/mean_reward: 10,8 TL. Yarın 500.000 adımla yeniden denenecek.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Politika Karşılaştırması — 30 Gün<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Altı politika gerçek EPIAS verisi üzerinde 30 günlük değerlendirmeye tabi tutuldu:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Bekle: +0,00 TL — referans alt sınır<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Rastgele: -4,56 TL — verimlilik kaybı nedeniyle zarar<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Eşik (oracle): +20,99 TL — tüm gün fiyatlarını önceden biliyor<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • PPO: +12,97 TL — VecNormalize + 500k adım<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • A2C: +12,97 TL — PPO ile aynı stratejiye yakınsadı<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • SAC: +12,83 TL — yalnızca 100k adımla PPO seviyesini yakaladı<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Eşik politikasının önde olması beklenen bir sonuç: o politika gün başlamadan 24 saatin tüm fiyatlarını biliyor (oracle). Gerçek dünyada bu bilgi mevcut değil. PPO bu kısıt altında eşiğin %62'sine ulaşıyor; bu anlamlı bir başarı.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Doğrulama<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • eval_policy.py: Bekle=0,00 | Rastgele=-4,56 | Eşik=+20,99 | PPO=+12,97 | A2C=+12,97 | SAC=+12,83 TL<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • docs\/policy_comparison.png: 6 politika bar chart oluşturuldu<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Seed robustness: 5 seed, std=0,81 TL — model stabil<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • black + ruff: tüm dosyalar temiz<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Git Workflow<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Branch 1: feature\/epias-calibration<\/code><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Commit: a98fd72 — feat(epias): gercek EPIAS verisi isleme, PPO yeniden egitimi, Optuna hiperparametre arama, seed robustness testi<\/code><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PR #19: feat(epias): gerçek piyasa verisi işleme, PPO kalibrasyon, Optuna optimizasyonu ve seed robustness testi eklendi<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Branch 2: feature\/multi-algo-training<\/code><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Commit: bcc0860 — feat(algos): A2C ve SAC egitimi, VecNormalize, eval ve grafik guncelleme<\/code><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PR #20: feat(algos): A2C ve SAC eğitimi, VecNormalize normalizasyonu ve çok algoritmali politika karşılaştırması eklendi<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Sonraki Adım<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 9 iki adımdan oluşacak:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • SAC 500.000 adım yeniden eğitilecek ve bugünkü 100.000 adımlık sonuçla karşılaştırılacak. Sample efficiency bulgusunun doğrulanması bekleniyor: SAC'ın daha az adımla ne kadar yaklaştığı net görülecek.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Curriculum Aşama 2 başlıyor: ortama sabit ev talebi (Load) ve güneş üretimi (PV) gözlemleri eklenecek. SolarProfileGenerator ve DemandProfileGenerator src\/data\/ altında zaten mevcut; SmartHomeEnergyEnv'e bağlanacak. Ödül fonksiyonu öz-tüketim önceliğini (önce ev ihtiyacı, sonra şebekeye satış) yansıtacak şekilde güncellenecek.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Öğrenilenler \/ Değerlendirme<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 8'in en somut anı, VecNormalize'ı ekledikten sonra eğitimin çökmesiyle geldi. Hata mesajı 'eval env VecNormalize değil' diyordu. Eğitim ortamını normalize edince eval ortamının da aynı şekilde sarmalanması gerektiğini — ama training=False modunda — öğrendim. Normalizasyon istatistiklerinin pkl dosyasına kaydedilip yüklenmesi gerektiğini de bu süreçte kavradım.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          SAC'ın on-policy ve off-policy farkını teoride biliyordum ama replay buffer'ın pratikte ne anlama geldiğini ancak bugün anladım: SAC her güncellemede geçmişe bakıp 'bu deneyimi daha önce yaşamıştım, ne olmuştu?' diye sorabilir. PPO ise her adımda sadece o anki deneyimini kullanır ve atar. Bu yüzden SAC 5 kat daha az adımla aynı performansa ulaşabiliyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PPO ile A2C'nin aynı sonucu vermesi de ilginç bir bulguydu. İki farklı algoritma, aynı basit ortamda aynı stratejiye yakınsadı. Bu, ortamın çok zor olmadığını gösteriyor — ama aynı zamanda 'doğru stratejiyi öğrenmek için büyük farklılıklar gerekmiyor' da diyebiliriz. Daha karmaşık bir ortamda SAC'ın avantajı daha belirgin çıkardı.<\/span><\/p>\n\n--- DAY 9 (2026-07-24) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 9 — Gerçek Dünya Ortamı Yeniden Yazımı ve Curriculum Aşama 2<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 8'in sonunda SAC'ın sample efficiency avantajı net görünmüştü ve Gün 9 için iki hedef belirlenmişti: SAC'ı 500.000 adımla yeniden eğitmek ve Curriculum Aşama 2'yi başlatmak. Ancak Aşama 2'ye geçmeden önce ortamın kendisini köklü biçimde yeniden yazmak gerektiği anlaşıldı. Gün 7–8'de kullanılan SmartHomeEnergyEnv yalnızca pil arbitrajı yapıyordu; sabit verimlilik varsayıyordu, güneş ve talebi gözlemlemiyordu, şebeke kesintilerini modellemiyordu. Gerçek dünya bunu kabul etmez.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Teknik Detaylar<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ortam Yeniden Yazımı (energy_env.py)<\/em><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          SmartHomeEnergyEnv baştan yazıldı. Aşama 1'de gözlem boyutu 56, Aşama 2'de 104. Yapı şu şekilde: obs[0]=SoC, obs[1]=SoH, obs[2:6]=zaman özellikleri (sin\/cos saat ve gün), obs[6]=şebeke durumu, obs[7]=DR sinyali, obs[8:32]=bugünün 24 saatlik fiyatları, obs[32:56]=yarının 24 saatlik fiyat tahmini (±%5 gürültü). Aşama 2'de ek olarak obs[56:80]=güneş profili, obs[80:104]=talep profili.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Eklenen gerçek dünya özellikleri: asimetrik fiyatlandırma (satış = alış × 0,60), SoH bozunumu (her döngü kWh başına 5×10⁻⁶ degradasyon), öz-deşarj (saatte %0,05 kayıp), minimum SoC rezervi (%10 altına inemez), değişken verimlilik (eff = 0,98 − 0,10×|aksiyon|, SoC %85 üstü veya %15 altındaysa ek ceza), şebeke kesintisi (%0,2 olasılık\/saat, ada modu — alım\/satım yapılamaz), talep yanıtı sinyali (%5 olasılık\/saat, net ihracat bonusu), stokastik güneş ve talep profilleri (bölüm başı rassal ölçekleme, güneş std=%10, talep std=%15).<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Phase 2 Eğitim Scriptleri<\/em><\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Dört algoritma için Aşama 2 eğitim scriptleri oluşturuldu. PPO: lr=3,25e-4, n_steps=256, batch_size=128, gamma=0,953, 300k adım, 4 paralel ortam. A2C: lr=7e-4, n_steps=32, ent_coef=0,01, 300k adım, 4 paralel ortam. SAC: lr=3e-4, buffer_size=200k, batch_size=256, gamma=0,95, 300k adım. TD3: NormalActionNoise(sigma=0,1), policy_delay=2, target_policy_noise=0,2, 300k adım. Tüm modeller VecNormalize ile sarmalandı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Veri Hizalama (build_phase2_dataset.py)<\/em><\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          EPIAS PTF fiyatı, PVWatts güneş üretimi ve UK-DALE ev talebi aynı saatlik takvimde birleştirilerek data\/processed\/aligned_dataset.csv oluşturuldu. 8.784 satır, NaN yok.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Politika Karşılaştırması<\/em><\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Aşama 1 (30 gün, yalnızca fiyat arbitrajı): Bekle=0,00 | Rastgele=-26,72 | Eşik=-3,43 | PPO=+7,67 | A2C=+3,19 | SAC=+8,98 TL.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Aşama 2 (50 gün, güneş + talep + pil): Bekle=-2,17 | Rastgele=-25,68 | Eşik=-2,99 | PPO=+7,73 | A2C=+1,29 | SAC=+10,90 | TD3=+10,03 TL.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Bekle politikasının Aşama 2'de negatife düşmesi beklenen ve doğru bir sonuç: güneş+talep ortamında hiçbir şey yapmayanın karşılanmayan talep cezası alması gerekiyor. SAC bu karmaşık ortamda da zirveye oturdu; TD3 yakın takipte. A2C'nin zayıf kalması beklenen bir sonuç — on-policy yapısı ve 300k adım bu ortam için yeterli değildi.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Doğrulama<\/em><\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          eval_policy.py: her iki aşama için 7 politika karşılaştırıldı, sonuçlar tutarlı. docs\/policy_comparison_phase2.png: 7 politika bar chart, hata çubukları dahil. Ortam testleri: Phase1 obs=(56,), Phase2 obs=(104,), min_soc_reserve çalışıyor, sell_ratio=0,60 doğrulandı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Git Workflow<\/em><\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Branch: feature\/curriculum-phase2<\/code><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Commit: b566230 — feat(env+algos): kapsamlı gerçek dünya ortamı yeniden yazıldı, Curriculum Aşama 2 tüm algoritmalar ve karşılaştırma grafikleri eklendi<\/code><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PR #21: feat(env+algos): Curriculum Aşama 2 — Gerçek Dünya Ortamı + 4 Algoritma (PPO\/A2C\/SAC\/TD3)<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Sonraki Adım<\/em><\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 10'da Optuna ile Aşama 2 hiperparametre araması yapılacak (optuna_phase2.py, 30 deneme). En iyi parametrelerle PPO ve SAC yeniden eğitilecek, uzun vadeli karşılaştırma için eval süresi 30'dan 90 güne çıkarılacak.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Öğrenilenler \/ Değerlendirme<\/em><\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 9'un en önemli kararı ortamı baştan yazmaktı. Aşama 2'ye geçmek için yalnızca güneş ve talep eklemek yeterli değildi; bunları doğru modellemek için asimetrik fiyat, SoH, öz-deşarj ve şebeke kesintisini de dahil etmek gerekiyordu. Aksi hâlde model gerçek dünyada işe yaramaz.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          TD3'ün SAC'a bu kadar yakın çıkması beklenmedik ama anlamlı bir bulgu: deterministic policy gradient bazen SAC'ın entropi terimi olmadan da yeterli. Off-policy algoritmaların karmaşık ortamlarda on-policy'ye olan üstünlüğü Aşama 2'de çok daha net görüldü — A2C ile SAC arasındaki fark Aşama 1'de 5,79 TL iken Aşama 2'de 9,61 TL'ye çıktı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>\n\n--- DAY 10 (2026-07-27) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 10 — Pazartesi, 27 Temmuz 2026<\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Öz-Tüketim Bonusu, Hiperparametre Optimizasyonu ve Dört Algoritma Karşılaştırması<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Bugün projenin en kapsamlı günlerinden birini yaşadım. Ödül fonksiyonuna yeni bir bileşen ekledim, dört farklı algoritma için hiperparametre optimizasyonu çalıştırdım ve tüm modelleri 90 günlük değerlendirme testiyle karşılaştırdım.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. Öz-Tüketim Bonusunun Ödül Fonksiyonuna Eklenmesi<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Curriculum Aşama 2'nin temel hedefi, ajanın güneş enerjisini önce ev ihtiyacı için kullanmayı, şebekeye satmadan önce tüketmeyi öğrenmesidir. Bu davranışı ödüllendirmek için energy_env.py<\/code> dosyasına self_consumption_coef<\/code> parametresi ve sc_bonus<\/code> terimi ekledim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          sc_bonus = self.self_consumption_coef * min(solar_kw, demand_kw)<\/div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          reward = revenue - cost - unmet_penalty - cycle_penalty + dr_bonus + sc_bonus<\/div><\/div>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Buradaki mantık şudur: güneş üretimi (solar_kw) ile ev talebi (demand_kw) arasındaki minimum değer, o saatte şebekeden bağımsız olarak karşılanabilecek maksimum enerji miktarını verir. Bu miktarın self_consumption_coef = 0.10 TL\/kWh<\/code> katsayısıyla çarpılması, ajana güneş enerjisini öz-tüketim için<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. Optuna ile Hiperparametre Optimizasyonu<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Dört algoritma için varsayılan parametrelerle eğitim yapmak yerine, Optuna kütüphanesini kullanarak her algoritmanın kendi optimal hiperparametre setini aradım. Optuna, TPE (Tree-structured Parzen Estimator) örnekleyicisiyle 30 deneme yaparak en iyi parametre kombinasyonunu buluyor. Her deneme 15.000 adım çalışıp 10 bölümlük değerlendirme yapıyor.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Neden Optuna kullandım çünkü<\/strong> Hiperparametreler (öğrenme hızı, indirim faktörü, ağ boyutu gibi) algoritmadan algoritmaya büyük fark yaratır. Elle deneme yanılma yerine sistematik arama yapılması zaman kazandırır<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3. Dört Algoritmanın Eğitimi (300.000 Adım)<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Her algoritma 300.000 adım boyunca Phase 2 ortamında eğitildi. PPO ve A2C on-policy algoritmalar olduğundan 4 paralel ortamda çalıştırıldı; SAC ve TD3 off-policy olduğundan tek ortamda replay buffer ile eğitildi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PPO eğitiminde dikkat çekici bir bulgu ortaya çıktı: Optuna'nın 15k adımlık denemelerde önerdiği parametreler (özellikle net_arch=512<\/code> ve yüksek gamma=0.986<\/code>), 300k adımlık tam eğitimde tutarsızlığa yol açtı. clip_fraction=0.628<\/code> gibi çok yüksek bir değer gördüm; bu, politikanın her güncellemede çok büyük adımlar attığı ve dengesizleştiği anlamına gelir. Sonuç olarak PPO için daha önce kalibre edilmiş kararlı parametrelere geri döndüm.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Bu durumdan önemli şey çıkarttım kısa denemeler için optimize edilmiş parametreler, uzun eğitimlerde her zaman aynı başarıyı göstermiyor. Özellikle büyük ağ boyutlarının (512×512) 300k adımda tam oturması zaman alıyor.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4. 90 Günlük Değerlendirme Sonuçları<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Tüm modeller eğitildikten sonra eval_policy.py --days 90<\/code> ile değerlendirme yaptım. 90 farklı gün rastgele seçilip her politikanın o günkü ortalama kazancı ölçüldü.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Curriculum Aşama 2 — 90 Günlük Değerlendirme (Varsayılan Parametreler):<\/strong><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Politika OrtalamaTLStd Min Maks<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Bekle (hold)<\/td>-4.67<\/td>12.27<\/td>-31.28<\/td>+23.34<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Rastgele<\/td>-27.11<\/td>19.91<\/td>-87.19<\/td>+18.69<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Eşik (threshold)<\/td>-3.94<\/td>15.87<\/td>-48.87<\/td>+21.76<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PPO<\/td>+4.84<\/td>13.05<\/td>-25.40<\/td>+30.08<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          A2C<\/td>-1.43<\/td>13.89<\/td>-25.40<\/td>+30.08<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          SAC<\/strong><\/td>+8.43<\/strong><\/td>14.24<\/td>-24.83<\/td>+33.39<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          TD3<\/td>+7.39<\/td>13.54<\/td>-24.87<\/td>+31.31<\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Phase 2'de \"Bekle\" stratejisi -4.67 TL veriyor. Bunun sebebi, güneş enerjisi tüketilmezse karşılanmayan talep cezasının devreye girmesidir. Yani Phase 2, Phase 1'den çok daha zorlu bir ortam — sadece pil arbitrajını öğrenmek yetmiyor, güneş entegrasyonunu da doğru yönetmek gerekiyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          SAC bu ortamda en başarılı algoritma oldu (+8.43 TL). Off-policy yapısı ve entropi maksimizasyonu sayesinde keşif ve sömürü dengesini iyi kurdu. TD3 de +7.39 TL ile güçlü bir ikinci oldu.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          5. Git Workflow<\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Bugün yapılan tüm değişiklikler feature\/curriculum-phase2<\/code> branch'inde commit edildi ve GitHub'a push edildi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Commit'ler:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1c9e0f1 feat: default vs optuna karşılaştırma scriptleri ve güncellenmiş optuna parametreleri<\/div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          90ecdff feat(optuna): SAC ve TD3 için Phase 2 Optuna arama scriptleri eklendi<\/div><\/div>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Değiştirilen\/eklenen dosyalar:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>src\/env\/energy_env.py<\/code> → sc_bonus ödül terimi<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. <\/span>scripts\/train_ppo\/a2c\/sac\/td3_phase2.py<\/code> → Optuna parametreleriyle güncellendi<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3. <\/span>scripts\/train_a2c\/sac\/td3_phase2_default.py<\/code> → varsayılan parametre versiyonları<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4. <\/span>scripts\/optuna_a2c\/sac\/td3_phase2.py<\/code> → hiperparametre arama scriptleri<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          5. <\/span>notebooks\/colab_train_phase2.ipynb<\/code> → Colab eğitim notebook'u<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            6. Yarın için Plan<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Gece boyunca yerel makinede SAC ve TD3 modelleri Optuna ile bulunan hiperparametrelerle yeniden eğitilmeye devam edecek. Yarın sabah eğitimler tamamlandıktan sonra eval_policy.py --days 90<\/code> ile değerlendirme yapılacak ve varsayılan parametrelerle Optuna parametrelerinin 90 günlük karşılaştırma tablosu çıkarılacak. Böylece hiperparametre optimizasyonunun gerçek etkisi sayısal olarak ortaya konmuş olacak. Ardından rule_based.py<\/code> Phase 2 baseline'ı yazılacak ve staj defteri Gün 11 tamamlanacak.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>\n\n--- DAY 11 (2026-07-28) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Gün 11 — Salı, 28 Temmuz 2026<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Phase 1 → Phase 2 Karşılaştırması, Kural Tabanlı Baseline Politikalar ve Optuna HPO<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Bugün iki hedefi aynı anda tamamladım: implementation planının Gün 11 görevini (Phase 1 politikasıyla karşılaştırma) ve Gün 12 görevini (kural tabanlı baseline'ların kodlanması). Paralel yürütmek, hem kontrol noktasını geçmemi hem de yarınki iş yükünü hafifletmemi sağladı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. Phase 1 → Phase 2 Karşılaştırması<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Gün 11'in asıl sorusu şuydu: Curriculum Aşama 2'de eklenen karmaşıklık (güneş + talep + SoH bozunumu + şebeke kesintisi), Aşama 1'de öğrenilen arbitraj davranışını bozdu mu?<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Bunu test etmek için Aşama 1 ve Aşama 2 sonuçlarını aynı tabloda karşılaştırdım:<\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            AlgoritmaAşama 1 (TL)Aşama 2 Default (TL)Aşama 2 + Optuna (TL)Sonuç<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            PPO<\/td>+7.67<\/td>+4.84<\/td>+7.11<\/td>Stabil<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            A2C<\/td>+3.19<\/td>−1.43<\/td>+1.71<\/td>Zorlandı<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            SAC<\/td>+8.98<\/td>+8.43<\/td>+12.92<\/strong><\/td>İyileşti<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            TD3<\/td>+5.04<\/td>+7.39<\/td>+12.46<\/strong><\/td>İyileşti<\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Kontrol geçti. SAC ve TD3, Aşama 2'de Optuna ile Aşama 1 performansını geçti. A2C, on-policy yapısı ve sınırlı adım sayısı nedeniyle yeni değişkenlerle başa çıkmakta zorlandı; bu beklenen bir sonuçtur. En önemli bulgu şu: off-policy algoritmalar (SAC, TD3) daha karmaşık ortamdan beslendi ve iyileşti; ortam bozulmadı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2. Kural Tabanlı Baseline Politikaların Yazılması<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            src\/baselines\/rule_based.py<\/code> dosyasına 6 politika sınıfı eklendi. Hepsi aynı (obs, env) → np.ndarray<\/code> imzasını paylaşır, böylece eval_policy.py<\/code> tek bir döngüde tüm politikaları çalıştırabilir.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>ThresholdPolicy<\/strong> — 24 saatlik fiyat dağılımının alt ve üst persantillerine göre şarj\/deşarj kararı. \"Gece ucuzken şarj et, akşam pahalıyken sat\" sezgisel kuralının sayısal ifadesi.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2. <\/span>SelfConsumptionPolicy<\/strong> — Güneş fazlası varsa önce bataryayı şarj et; akşam fiyat yükselince deşarj et. Aşama 2'nin öz-tüketim hedefini elle kodlanmış kuralla modeller.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3. <\/span>ToUPolicy<\/strong> — TEDAŞ T2 çok zamanlı tarife yapısını modelleyen saat bloku politikası. Fiyata bakmaz; 17:00–22:00 pik saatte deşarj, 23:00–07:00 gece saatinde şarj.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            4. <\/span>ForecastAwarePolicy<\/strong> — Gözlemdeki yarınki fiyat tahminini (obs[32:56]) de değerlendirerek \"yarın pahalıysa bugün agresif şarj et\" kararı verir. Tesla Powerwall tarzı gün öncesi entegrasyonu modellemektedir.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            5. <\/span>PeakShavingPolicy<\/strong> — Net şebeke çekişi (talep − güneş) belirlenen eşiği aştığında bataryadan karşıla. Ticari binalarda talep bedelini düşürmeye yönelik politika.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            6. <\/span>GridAwarePolicy<\/strong> — obs[6]<\/code> şebeke kesintisi ve obs[7]<\/code> talep yanıtı sinyalini izler. Kesintide bataryayı rezerv olarak tutar; DR sinyalinde şebekeden çekmeyi keser.<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              3. Optuna ile Baseline Hiperparametre Optimizasyonu<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              scripts\/hpo\/rule_based_optuna.py<\/code> ile her politika için 50 deneme, 30 günlük değerlendirme yapıldı. Sinir ağı yok — sadece eşik değerleri, persantiller, saat blokları gibi kural parametreleri arandı.<\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              PolitikaVarsayılan (TL)Optuna (TL)İyileşme<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ThresholdPolicy<\/td>−3.94<\/td>+2.53<\/strong><\/td>+6.47<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ForecastAwarePolicy<\/td>−4.91<\/td>+1.80<\/strong><\/td>+6.71<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              GridAwarePolicy<\/td>−2.97<\/td>+1.35<\/strong><\/td>+4.32<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              SelfConsumptionPolicy<\/td>−7.47<\/td>−2.46<\/td>+5.01<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              PeakShavingPolicy<\/td>−9.95<\/td>−4.85<\/td>+5.10<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ToUPolicy<\/td>−15.95<\/td>−15.59<\/td>+0.36<\/td><\/tr><\/tbody><\/table>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              En dikkat çekici bulgu: ThresholdPolicy, Optuna ile −3.94 TL'den +2.53 TL'ye taşındı; yani pozitife geçti. Ancak en iyi baseline bile SAC'ın (+12.92 TL) beşte birine ulaşamadı. ToU politikası ise yapısal olarak optimize edilemeyen bir politika — hangi saat bloğunu seçersen seç sonuç değişmiyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              4. Test Suite<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              tests\/test_rule_based.py<\/code> dosyasına 7 sınıf için 312 satır birim testi yazıldı. DummyEnv<\/code> ve make_obs()<\/code> fabrika fonksiyonları oluşturuldu. Sınır koşulları test edildi: SOC=0 ile kesintide GridAwarePolicy, DR sinyalinde boş batarya, güneş talebi aşan PeakShaving gibi durumlar. Tüm testler PASSED.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              5. Dokümantasyon ve Görseller<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              README tamamen yeniden yazıldı: akış diyagramı, curriculum tablosu, baseline sonuç tablosu eklendi. Dört grafik üretildi:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>policy_comparison_phase1_vs_phase2.png<\/code> — Phase 1 ve Phase 2 yan yana gruplu çubuk grafik<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              2. <\/span>policy_comparison_phase1.png<\/code> — Aşama 1 tek grafik<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              3. <\/span>policy_comparison_phase2.png<\/code> — Aşama 2 default (90 gün)<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              4. <\/span>policy_comparison_baseline_optuna.png<\/code> — Varsayılan vs Optuna baseline karşılaştırması<\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6. Git Workflow<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6. Git Workflow<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Bugünkü değişiklikler feat\/phase2-sc-bonus-optuna<\/code> branch'inde commit edildi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Commit'ler:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                e1a33e3 docs: README tamamen yeniden yazildi — akis diyagrami, curriculum, baseline tablosu<\/div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                5365010 docs: ASCII diyagram Mermaid flowchart ile degistirildi<\/div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                f0c0514 docs: sonuclar tablosu, ortam parametreleri, curriculum tablosu<\/div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                c913ae8 docs: Phase 1\/2 politika karsilastirma grafikleri ve baseline-optuna gorseli eklendi<\/div><\/div>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Değiştirilen \/ eklenen dosyalar:<\/strong> src\/baselines\/rule_based.py<\/code>, src\/baselines\/__init__.py<\/code>, scripts\/hpo\/rule_based_optuna.py<\/code>, tests\/test_rule_based.py<\/code>, scripts\/train\/td3_phase1.py<\/code>, README.md<\/code>, docs\/policy_comparison_phase1_vs_phase2.png<\/code>, docs\/policy_comparison_baseline_optuna.png<\/code><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                7. Yarın için Plan<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Gün 12: src\/forecasting\/price_forecast.py<\/code> modülü yazılacak — XGBoost veya ARIMA ile 24 saatlik fiyat tahmini. Geçmiş EPİAŞ verisiyle eğitilip MAPE (tahmin hatası) raporlanacak. Ardından aynı eğitilmiş RL ajanı oracle \/ tahmin \/ naive fiyat modlarında test edilecek.<\/p>\n\n--- DAY 12 (2026-07-29) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Gün 12 — Aşama 3: Hibrit Aksiyon Uzayı ve Ertelenebilir Yük<\/h1>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. Bugün Ne Yapıldı?<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Uygulama planının 12. günü kapsamında, src\/env\/energy_env.py dosyasına Aşama 3 desteği eklendi. Mevcut tek boyutlu sürekli aksiyon uzayı (Box(shape=(1,))), batarya + ertelenebilir cihaz kontrolünü birlikte barındıran iki boyutlu bir yapıya (Box(shape=(2,))) dönüştürüldü. Ek olarak gerçekçi multi-step cihaz çalışma modeli, günlük aktivasyon sınırı ve tüm kural tabanlı politikaların Aşama 3 uyumluluğu sağlandı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. Hibrit Aksiyon Uzayı Tasarımı<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                action[0] ∈ [-1, 1]  →Batarya kontrolü (sürekli)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                action[1] ∈ [-1, 1]  →Ertelenebilir yük sinyali (ayrıklaştırılır)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                > 0 ve saat penceresi içinde →cihazı çalıştır<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ≤ 0 veya pencere dışında     →çalıştırma<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Gymnasium Tuple veya Dict aksiyon uzayları Stable-Baselines3'ün tüm algoritmalarıyla uyumlu değildir; bu nedenle ayrık sinyali sürekli uzaya gömme (embedding) yöntemi tercih edildi. step() içinde int(action[1] > 0.0 and in_window) ile anlık ayrıklaştırma yapılmaktadır.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. Gözlem Uzayı Güncellemesi<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                enable_deferrable=True olduğunda gözlemin sonuna 2 yeni eleman eklendi:<\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                İndeks<\/strong><\/td>Alan<\/strong><\/td>Açıklama<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                [-2]<\/td>device_used_today<\/td>0=henüz çalıştırılmadı, 1=bugün en az bir kez çalıştı<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                [-1]<\/td>device_steps_remaining_norm<\/td>Kalan çalışma adımı \/ toplam adım [0,1]<\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aşama<\/strong><\/td>Gözlem Boyutu<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aşama 1<\/td>56<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aşama 2<\/td>104<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aşama 3 (Faz 1 üstünde)<\/td>58<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aşama 3 (Faz 2 üstünde)<\/td>106<\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. Multi-Step Cihaz Çalışma Modeli<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Gerçekçi cihaz davranışı: çamaşır makinesi gibi cihazlar başlatılınca deferrable_load_hours saat boyunca durdurulamaz biçimde çalışır.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                # Aktivasyon: sadece cihaz çalışmıyorsa + pencere içi + limit dolmamışsa<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                if action[1] > 0 and in_window and under_limit and not_running:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   device_steps_remaining = round(deferrable_load_hours)<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                # Her adımda: çalışıyorsa yük uygula ve geri say (durdurulamaz)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                if device_steps_remaining > 0:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   device_steps_remaining -= 1<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   demand += deferrable_load_power_kw<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                5. Reward Hacking Cezası ve Aktivasyon Limiti<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Episode sonu cezası:<\/strong> Cihaz gün boyunca hiç çalıştırılmazsa -2.0 TL<\/strong> ceza.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Günlük aktivasyon limiti (<\/strong>max_activations_per_day=2):<\/strong> Ajan aynı cihazı günde 2'den fazla çalıştıramaz. Cihazı sürekli açıp kapatan politikaları engeller.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6. Kural Tabanlı Politikaların Aşama 3 Uyumluluğu<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                src\/baselines\/rule_based.py modülüne _make_action() yardımcı fonksiyonu eklendi. enable_deferrable=True ortamda tüm 7 politika otomatik olarak (2,) aksiyon döndürür.<\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Politika<\/strong><\/td>Deferrable Stratejisi<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                HoldPolicy<\/td>Hiç çalıştırma<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ThresholdPolicy<\/td>Ucuz fiyat diliminde çalıştır<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SelfConsumptionPolicy<\/td>Güneş fazlasında çalıştır<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ToUPolicy<\/td>Gündüz orta dilimde çalıştır (pik\/gece dışında)<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ForecastAwarePolicy<\/td>Günün en ucuz %25'inde çalıştır<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                PeakShavingPolicy<\/td>Net çekiş düşükken çalıştır<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                GridAwarePolicy<\/td>Kesinti\/DR yoksa ve fiyat ucuzsa çalıştır<\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                7. Episode Metrik Takibi<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \"device_activation_count\": int   # gün içi toplam aktivasyon sayısı<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \"device_activation_rate\": float  # aktivasyon_sayısı \/ saat_sayısı<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                8. Geriye Dönük Uyumluluk<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                enable_deferrable=False (varsayılan) ile ortam, Aşama 1 ve Aşama 2 davranışını tam olarak korur.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                9. Testler<\/h2>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Dosya<\/strong><\/td>Yeni Test<\/strong><\/td>Toplam<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                tests\/test_energy_env.py<\/td>+17 (Aşama 3)<\/td>28<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                tests\/test_rule_based.py<\/td>+15 (Faz 3 deferrable)<\/td>54<\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Toplam<\/td>+32<\/td>65\/65 <\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                pytest tests\/test_energy_env.py tests\/test_rule_based.py -v → 65\/65 geçti.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                10. PR Review — Feedback ve Düzeltme<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                PR açıldıktan sonra iki teknik yorum geldi:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aksiyon uzayı tasarımı:<\/strong> spaces.Box ile ayrık sinyal gömmek SB3 uyumluluğu açısından doğru tercih. İleride SB3 MultiInputPolicy desteği olgunlaşırsa gymnasium.spaces.Tuple((Box(-1,1), Discrete(2))) yapısına geçiş değerlendirilebilir — şimdilik aksiyon alınmadı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Reward scaling — deferrable_penalty_coef düzeltmesi:<\/strong> Başlangıçta ceza katsayısı 5.0 TL olarak belirlenmişti. Ancak cihazın çalışma maliyeti hesaplandığında (1.5 kW × 1 h × ort. 2 TL\/kWh ≈ 3 TL) cezanın elektrik maliyetinin üzerinde kaldığı görüldü. Bu durumda ajan fiyat sinyalini görmezden gelip her sabah 06:00'da refleks aktivasyon yapan \"hyper-cautious\" bir politika öğrenebilirdi. Katsayı 5.0 → 2.0 TL'ye düşürüldü; testler güncellenerek 65\/65 geçti.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                11. Git Commits (Gün 12)<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                feat(env): add Phase 3 multi-step deferrable load with run-duration model<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                feat(env): add max_activations_per_day limit to prevent reward hacking<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                feat(baselines): add Phase 3 deferrable support to all rule-based policies<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                test(env): add 17 Phase 3 tests (multi-step, steps_remaining, re-activation guard)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                test(baselines): add 15 Phase 3 deferrable action tests (65\/65 passing)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                fix: reduce deferrable_penalty_coef 5.0->2.0 to prevent hyper-cautious policy<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                12. Teknik Öğrenimler<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Hibrit aksiyon uzayı tasarımı,<\/strong> pekiştirmeli öğrenmede sürekli ve ayrık kararların birleştirilmesinde sık karşılaşılan bir sorundur. Gymnasium Tuple\/Dict uzayları teorik olarak doğru yaklaşım olsa da SB3 uyumluluk kısıtları nedeniyle \"embedding\" yöntemi tercih edildi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Multi-step device execution,<\/strong> tek adım enerji uygulamasından çok daha gerçekçidir. Cihaz başlatılınca deferrable_load_hours kadar adım boyunca çalışır ve ajan bu süreçte müdahale edemez. Bu, zamansal planlama yeteneklerini test eden daha zengin bir karar ortamı oluşturur.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Reward shaping<\/strong> konusunda önemli bir pratik ders: RL ajanları çok boyutlu ödül fonksiyonlarında kısmi hedefleri optimize edip diğerlerini ihmal edebilir. Episode sonu cezası + günlük aktivasyon limiti birlikte \"constraint as penalty\" yaklaşımının katmanlı uygulamasını örneklemektedir. Ceza katsayısının cihaz elektrik maliyetiyle orantılı tutulması, ajanın fiyat-duyarlı davranış sergilemesini sağlar.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Yarın (Gün 13)<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aşama 3 ortamıyla PPO, A2C, SAC ve TD3 algoritmalarının yeniden eğitimi yapılacak. device_activation_rate metriği TensorBoard'da izlenecek. Deferrable ceza katsayısının ajan davranışına etkisi raporlanacak.<\/p>\n\n--- DAY 13 (2026-07-30) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Gün 13 — Aşama 3: Değerlendirme ve Üç Aşama Karşılaştırması<\/span><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. Bugün Ne Yapıldı?<\/span><\/h3>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Faz 3'ün ilk değerlendirme günü. Dün Aşama 3 ortamıyla PPO, A2C, SAC ve TD3 eğitimlerini bitirdiğimiz için bugün <\/span>eval_policy.py<\/span>'ye Aşama 3 desteği ekleyip 90 günlük karşılaştırmalı değerlendirme çalıştırdım. Üç aşamanın (sadece batarya → güneş+talep → ertelenebilir cihaz) sonuçlarını aynı anda görmek ilginçti; karmaşıklık arttıkça hem ödüllerin hem de belirsizliğin nasıl değiştiği netleşti.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. eval_policy.py — Aşama 3 Entegrasyonu<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Yeni bir dosya açmak yerine mevcut <\/span>scripts\/eval\/eval_policy.py<\/span>'ye üç yardımcı fonksiyon eklendi, ardından <\/span>main()<\/span> içine Aşama 3 karşılaştırma bloğu yerleştirildi.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Eklenen fonksiyonlar:<\/strong><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                def make_phase3_env(price, solar, demand):<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    return SmartHomeEnergyEnv(<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        price_data=price, solar_data=solar, demand_data=demand,<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        price_unit=\"tl_per_mwh\",<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        enable_deferrable=True,<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        deferrable_load_power_kw=1.5,<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        deferrable_load_hours=1.0,<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        deferrable_window=(6, 22),<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        deferrable_penalty_coef=2.0,<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        max_activations_per_day=2,<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        random_day=True,<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    )<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                def evaluate_phase3(policy, prices, solar, demand, n_days=90, seed=42):<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    # n_days episode döngüsü → mean\/std\/min\/max döndürür<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                def make_phase3_rl_policy(algo_cls, model_path, stats_path, price, solar, demand):<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    # VecNormalize istatistiklerini yükler, deterministik tahmin yapar<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                make_phase3_rl_policy<\/span> generic tasarlandı: <\/span>PPO<\/span>, <\/span>A2C<\/span>, <\/span>SAC<\/span>, <\/span>TD3<\/span>'ün hepsi aynı fonksiyondan geçiyor, tek fark <\/span>algo_cls<\/span> argümanı. Böylece her algoritma için ayrı yükleyici yazmak gerekmedi.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. Değerlendirme Sonuçları<\/span><\/h3>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                python scripts\/eval\/eval_policy.py --days 90<\/span> komutuyla üç aşama sıralı çalıştırıldı. Giriş verisi: <\/span>data\/aligned_dataset.csv<\/span> (8784 saatlik EPİAŞ 2026 + PVWatts + UK-DALE).<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aşama 1 — Sadece Batarya<\/span><\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Politika<\/strong><\/td>Ort (TL)<\/strong><\/td>Std<\/strong><\/td>Min<\/strong><\/td>Maks<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Bekle (hold)<\/span><\/td>+0.00<\/span><\/td>0.00<\/span><\/td>+0.00<\/span><\/td>+0.00<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Rastgele<\/span><\/td>−25.27<\/span><\/td>16.41<\/span><\/td>−60.78<\/span><\/td>+18.91<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Eşik<\/span><\/td>−1.85<\/span><\/td>10.92<\/span><\/td>−35.34<\/span><\/td>+16.67<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                PPO<\/strong><\/td>+8.02<\/strong><\/td>4.64<\/span><\/td>+1.40<\/span><\/td>+21.58<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A2C<\/span><\/td>+2.21<\/span><\/td>6.25<\/span><\/td>−15.70<\/span><\/td>+7.86<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SAC<\/strong><\/td>+9.63<\/strong><\/td>5.12<\/span><\/td>+2.75<\/span><\/td>+22.54<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                TD3<\/span><\/td>+4.71<\/span><\/td>1.96<\/span><\/td>+0.30<\/span><\/td>+7.86<\/span><\/td><\/tr><\/tbody><\/table>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aşama 2 — Güneş + Talep<\/span><\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Politika<\/strong><\/td>Ort (TL)<\/strong><\/td>Std<\/strong><\/td>Min<\/strong><\/td>Maks<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Bekle (hold)<\/span><\/td>−4.67<\/span><\/td>12.27<\/span><\/td>−31.28<\/span><\/td>+23.34<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Rastgele<\/span><\/td>−25.79<\/span><\/td>18.73<\/span><\/td>−73.41<\/span><\/td>+11.78<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Eşik<\/span><\/td>−3.94<\/span><\/td>15.87<\/span><\/td>−48.87<\/span><\/td>+21.76<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Öz-tüketim<\/span><\/td>−7.50<\/span><\/td>16.93<\/span><\/td>−54.29<\/span><\/td>+19.41<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ToU (saat blok)<\/span><\/td>−18.15<\/span><\/td>11.94<\/span><\/td>−47.00<\/span><\/td>+4.26<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Tahmin kullanır<\/span><\/td>−7.35<\/span><\/td>14.61<\/span><\/td>−45.09<\/span><\/td>+21.76<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Tepe kesme<\/span><\/td>−12.47<\/span><\/td>12.80<\/span><\/td>−44.34<\/span><\/td>+8.95<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Şebeke bilinçli<\/span><\/td>−4.39<\/span><\/td>15.98<\/span><\/td>−49.22<\/span><\/td>+21.76<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                PPO<\/span><\/td>+4.84<\/span><\/td>13.05<\/span><\/td>−25.40<\/span><\/td>+30.08<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A2C<\/span><\/td>−1.43<\/span><\/td>13.89<\/span><\/td>−25.40<\/span><\/td>+30.08<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SAC<\/strong><\/td>+10.09<\/strong><\/td>13.71<\/span><\/td>−19.76<\/span><\/td>+37.25<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                TD3<\/strong><\/td>+9.77<\/strong><\/td>13.90<\/span><\/td>−22.29<\/span><\/td>+36.50<\/span><\/td><\/tr><\/tbody><\/table>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aşama 3 — Batarya + Ertelenebilir Cihaz<\/span><\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Politika<\/strong><\/td>Ort (TL)<\/strong><\/td>Std<\/strong><\/td>Min<\/strong><\/td>Maks<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Bekle (hold)<\/span><\/td>−6.67<\/span><\/td>12.27<\/span><\/td>−33.28<\/span><\/td>+21.34<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Rastgele<\/span><\/td>−29.00<\/span><\/td>20.51<\/span><\/td>−72.85<\/span><\/td>+1.80<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Eşik<\/span><\/td>−8.42<\/span><\/td>17.09<\/span><\/td>−56.30<\/span><\/td>+18.52<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                PPO<\/span><\/td>+3.05<\/span><\/td>13.46<\/span><\/td>−27.40<\/span><\/td>+28.15<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A2C<\/span><\/td>−3.26<\/span><\/td>13.91<\/span><\/td>−28.46<\/span><\/td>+28.08<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SAC<\/strong><\/td>+8.32<\/strong><\/td>14.25<\/span><\/td>−24.24<\/span><\/td>+34.40<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                TD3<\/strong><\/td>+7.80<\/strong><\/td>14.75<\/span><\/td>−25.99<\/span><\/td>+34.12<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. Bulgular ve Yorum<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SAC, üç aşamada da en tutarlı algoritma.<\/strong> Aşama 1'de +9.63, Aşama 2'de +10.09, Aşama 3'te +8.32 TL\/gün ortalama sağladı. Off-policy yapısı ve entropi düzenlemesi, değişken gözlem uzaylarına iyi adapte oluyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aşama 3'te ödüller düştü ama yine de pozitif.<\/strong> SAC −1.77 TL, TD3 ise Aşama 2'ye kıyasla −1.97 TL geriledi. Bu beklenen bir sonuç; ertelenebilir yük yeni bir karar boyutu ekliyor (ne zaman çalıştıracaksın?) ve deferrable_penalty_coef=2.0 TL cezası basit politikalar için kayıp üretiyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Hold politikası Aşama 3'te artık sıfır değil.<\/strong> Aşama 1'de hold = +0.00 (hiç aksiyon yok, kayıp yok), Aşama 3'te hold = −6.67. Fark tamamen <\/span>deferrable_penalty_coef<\/span>: cihaz hiç çalıştırılmadığında episode sonunda 2.0 TL kesildiği için \"hiçbir şey yapma\" stratejisi artık kötü.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Rastgele politika Aşama 3'te çok kötü (−29 TL).<\/strong> Hem batarya hem de ertelenebilir cihaz kararlarını rastgele verince enerji dengesi çok bozuluyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A2C Aşama 3'te negatife döndü.<\/strong> Aşama 2'de −1.43 TL zaten iyi değildi; Aşama 3'te −3.26'ya indi. PPO da +3.05 ile pozitif ama SAC\/TD3'ten belirgin şekilde geride. On-policy algoritmaların bu karmaşıklıkta off-policy'e kıyasla daha zor optimize ettiği görülüyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Std değerleri Aşama 3'te yüksek (~14 TL).<\/strong> Aşama 1'de SAC std=5.12 iken Aşama 3'te 14.25. Bu tutarsızlık ertelenebilir cihazın zaman penceresine (06:00–22:00) ve günlük fiyat volatilitesine bağlı; mevsimsel etkiler de devreye giriyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                5. Üç Aşama Karşılaştırması — RL Algoritmaları<\/span><\/h3>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Algoritma<\/strong><\/td>Aşama 1 (TL)<\/strong><\/td>Aşama 2 (TL)<\/strong><\/td>Aşama 3 (TL)<\/strong><\/td>Genel Sıralama<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SAC<\/span><\/td>+9.63<\/span><\/td>+10.09<\/span><\/td>+8.32<\/span><\/td> 1.<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                TD3<\/span><\/td>+4.71<\/span><\/td>+9.77<\/span><\/td>+7.80<\/span><\/td> 2.<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                PPO<\/span><\/td>+8.02<\/span><\/td>+4.84<\/span><\/td>+3.05<\/span><\/td> 3.<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A2C<\/span><\/td>+2.21<\/span><\/td>−1.43<\/span><\/td>−3.26<\/span><\/td>4.<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SAC ve TD3'ün off-policy avantajı, birden fazla aksiyon boyutunda özellikle belirginleşiyor. PPO Aşama 1'de iyi performans gösterse de gözlem uzayı büyüdükçe (104 → 106 boyut) geride kalıyor. Optuna'nın PPO için bulduğu hiperparametreler eğitim çöküşüne yol açtığından Aşama 2 hiperparametrelerine geri dönüldüğü de bunda etkili olmuş olabilir.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6. Git Commits (Gün 13)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                feat(eval): add Phase 3 evaluation support to eval_policy.py<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                feat(eval): add make_phase3_env, evaluate_phase3, make_phase3_rl_policy helpers<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                feat(eval): add Phase 3 comparison block to main() with PPO\/A2C\/SAC\/TD3<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                7. Teknik Öğrenimler<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Generic policy loader tasarımı<\/strong> kod tekrarını önledi. <\/span>algo_cls<\/span> argümanı sayesinde dört farklı SB3 algoritması tek bir fonksiyonla yüklenebildi. <\/span>VecNormalize.load()<\/span> stats dosyasının varlığını kontrol eden <\/span>Path(stats_path).exists()<\/span> koruması, model dosyaları eksik olduğunda temiz bir uyarı mesajı veriyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Curriculum learning'in ödül üzerindeki etkisi<\/strong> gözlemlendi. Her aşama bir öncekinin üzerine yeni bir karar boyutu ekliyor; bu da hem ortamın güçlük seviyesini artırıyor hem de eğitilmiş modellerin davranışını etkiliyor. Aşama 3'te SAC'ın hâlâ pozitif kalması, off-policy deneyim tamponunun hibrit aksiyon uzayında daha verimli öğrenmeyi desteklediğini gösteriyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Yüksek standart sapma bir sorun mu?<\/strong> Aşama 3'te std≈14 TL yüksek görünse de min değerleri bile (SAC: −24.24) Aşama 1 minimum'larına (SAC: +2.75) kıyasla daha kötü. Bu, ertelenebilir cihaz kararının yanlış zamanlanmasının maliyetini ve fırsatının ödülünü gösteriyor — ortam gerçekten daha zor.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Yarın (Gün 14)<\/span><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aşama 3 eğitim scriptleri (<\/span>scripts\/train\/<\/span>) commit edilecek, ardından Faz 4'e geçişe hazırlık başlayacak. Olası bir sonraki adım: üç aşamanın sonuçlarını karşılaştıran bir görsel rapor hazırlamak.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>\n\n--- DAY 14 (2026-07-31) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Gün 14 — 500k Adım Eğitim Sonuçları, EPİAŞ Veri Genişletme ve Fiyat Tahmin İyileştirmeleri<\/span><\/h2>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. Bugün Ne Yapıldı?<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SAC (Google Colab, GPU) ve TD3 (lokal, GPU) 500k adım eğitimleri tamamlandı. eval_best_vs_final.py ile dört algoritmanın best\/final model karşılaştırması yapıldı; kesin model seçimleri netleştirildi ve 90 günlük tam değerlendirme çalıştırıldı. Paralelde EPİAŞ fiyat verisi 2022–2026 dönemini kapsayacak şekilde genişletildi (8.784 → 40.176 saat) <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. SAC ve TD3 — 500k Adım Eğitim Sonuçları<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SAC (Google Colab, T4 GPU, ~2.5 saat)<\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ep_rew_mean    : 8.1(rollout, normalize edilmiş)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                eval\/mean_reward: 11.7 (EvalCallback)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                actor_loss     : -0.364 → -0.424 (negatifleşiyor — iyi)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                critic_loss    : 0.00356 → 0.00403 (çok düşük, stabil)<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SAC'ın entropi düzenlemesi Phase 3'ün hibrit aksiyon uzayında tutarlı öğrenme sağladı. Critic kaybının düşük kalması Q-fonksiyonunun yakınsadığını gösteriyor.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                TD3 <\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                TD3, 300k → 500k adım artışıyla Phase 3'te en belirgin iyileşmeyi gösterdi (+0.96 TL\/gün). Model başarıyla kaydedildi<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. Best vs Final Model Karşılaştırması<\/h2>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Algoritma<\/strong><\/td>Final (TL\/gün)<\/strong><\/td>Best (TL\/gün)<\/strong><\/td>en iyi<\/strong><\/td><\/tr><\/tbody><\/table>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                PPO<\/span><\/td>+3.75<\/span><\/td>+3.43<\/span><\/td>final<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A2C<\/span><\/td>-3.44<\/span><\/td>-3.16<\/span><\/td>best <\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                TD3<\/span><\/td>+8.76<\/span><\/td>+8.18<\/span><\/td>final<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SAC<\/span><\/td>+8.94<\/span><\/td>+8.30<\/span><\/td>final<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. 90 Günlük Tam Değerlendirme Sonuçları<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aşama 3 — Batarya + Ertelenebilir Cihaz<\/h3>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Politika<\/strong><\/td>Ort (TL\/gün)<\/strong><\/td>Std<\/strong><\/td>Min<\/strong><\/td>Maks<\/strong><\/td><\/tr><\/tbody><\/table>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Bekle (hold)<\/span><\/td>-6.67<\/span><\/td>12.27<\/span><\/td>-33.28<\/span><\/td>+21.34<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Rastgele<\/span><\/td>-31.53<\/span><\/td>19.79<\/span><\/td>-84.35<\/span><\/td>+2.15<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Eşik<\/span><\/td>-8.42<\/span><\/td>17.09<\/span><\/td>-56.30<\/span><\/td>+18.52<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                PPO<\/span><\/td>+3.75<\/span><\/td>13.33<\/span><\/td>-27.40<\/span><\/td>+28.08<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A2C (best)<\/span><\/td>-3.16<\/span><\/td>13.97<\/span><\/td>-28.46<\/span><\/td>+28.08<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SAC<\/span><\/td>+8.94<\/span><\/td>13.55<\/span><\/td>-21.38<\/span><\/td>+35.07<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                TD3<\/span><\/td>+8.76<\/span><\/td>14.05<\/span><\/td>-23.91<\/span><\/td>+34.57<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Phase 3 İyileşmesi:<\/h3>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Algoritma<\/strong><\/td>Gün 13 (TL)<\/strong><\/td>Gün 14 (TL)<\/strong><\/td>Fark<\/strong><\/td><\/tr><\/tbody><\/table>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                PPO<\/span><\/td>+3.05<\/span><\/td>+3.75<\/span><\/td>+0.70<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A2C<\/span><\/td>-3.26<\/span><\/td>-3.16<\/span><\/td>+0.10<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SAC<\/span><\/td>+8.32<\/span><\/td>+8.94<\/span><\/td>+0.62<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                TD3<\/span><\/td>+7.80<\/span><\/td>+8.76<\/span><\/td>+0.96<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                500k adım eğitim dört algoritmada da iyileştirme sağladı. TD3 en büyük kazanımı elde etti (+0.96 TL\/gün).<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                5. EPİAŞ Veri Genişletme<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                epias_2022.csv : 8.760 saat | 0 – 4.800 TL\/MWh<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                epias_2023.csv : 8.760 saat | 0 – 4.200 TL\/MWh<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                epias_2024.csv : 8.784 saat | 0 – 3.000 TL\/MWh<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                epias_2025.csv : 8.760 saat | 0 – 3.400 TL\/MWh<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                epias_2026.csv : 5.112 saat | 0 – 4.500 TL\/MWh<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ─────────────────────────────────────────────────<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Toplam: 40.176 saat | 2022-01-01 → 2026-08-01<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                scripts\/data\/merge_epias.py ile ham dosyalar birleştirildi. 8.784 → 40.176 saat (4.6x artış).<\/strong> Train\/test bölümü: 2022-01-01 – 2025-09-01 (eğitim) \/ 2025-09-01 – 2026-08-01 (test).<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6. Fiyat Tahmin Modülü — 40.176 Saatlik Veriyle Sonuçlar<\/h2>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Model<\/strong><\/td>sMAPE (%)<\/strong><\/td>MAE (TL)<\/strong><\/td>RMSE (TL)<\/strong><\/td><\/tr><\/tbody><\/table>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                LightGBM+Optuna ★<\/span><\/td>29.93<\/span><\/td>265.8<\/span><\/td>398.0<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                LightGBM<\/span><\/td>30.43<\/span><\/td>267.3<\/span><\/td>399.9<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ensemble (top-3)<\/span><\/td>32.10<\/span><\/td>290.8<\/span><\/td>419.1<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                XGBoost<\/span><\/td>32.52<\/span><\/td>293.8<\/span><\/td>425.2<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Random Forest<\/span><\/td>35.63<\/span><\/td>340.9<\/span><\/td>482.0<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                LSTM Bidirectional<\/span><\/td>37.46<\/span><\/td>317.2<\/span><\/td>477.4<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SVR<\/span><\/td>45.66<\/span><\/td>530.6<\/span><\/td>715.0<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Holt-Winters<\/span><\/td>62.28<\/span><\/td>1241.2<\/span><\/td>1674.6<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                SARIMA(1,1,1)(1,0,1,24)<\/span><\/td>71.00<\/span><\/td>1758.5<\/span><\/td>2256.4<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Model<\/strong><\/td>Eski sMAPE<\/strong><\/td>Yeni sMAPE<\/strong><\/td>İyileşme<\/strong><\/td><\/tr><\/tbody><\/table>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                LightGBM+Optuna<\/span><\/td>51.90%<\/span><\/td>29.93%<\/span><\/td>−21.97 puan<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                LSTM Bidirectional<\/span><\/td>55.92%<\/span><\/td>37.46%<\/span><\/td>−18.46 puan<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                XGBoost<\/span><\/td>~52%<\/span><\/td>32.52%<\/span><\/td>~−20 puan<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                LightGBM+Optuna %29.93 sMAPE<\/strong> ile elektrik fiyat tahmini için literatürde kabul gören %30 eşiğinin altına indi.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                7. Git Commits (Gün 14)<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                PR #31: <\/strong>https:\/\/github.com\/isambais\/SmartHome-EnergyRL\/pull\/31<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                8fd9341fix(data): add add_noise\/seed params to align_to_dates<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                c0e3355feat(forecast): add 4.5-year EPİAŞ dataset + merge script<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ebda776fix(eval): add SAC best, DATA_PATH → epias_combined, LSTM batch inference<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3ebc502docs: add Gün 14 staj defteri<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                851acbdchore: stage raw EPİAŞ CSVs, Colab notebook, Gün 13 docs<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                fbf9987docs: update Gün 14 with forecast results (LightGBM+Optuna 29.93%)<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                8. Teknik Öğrenimler<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Off-policy vs on-policy — eğitim adımı etkisi: <\/strong>TD3 ve SAC'ın 500k adımla elde ettiği kazanım (+0.62–+0.96 TL\/gün), PPO ve A2C'ye kıyasla daha yüksek. Deneyim tamponu tekrar örnekleme sayesinde off-policy algoritmalar her adımdan daha fazla öğreniyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Veri miktarının önemi: <\/strong>4.6 kat daha fazla veri, model mimarisinde hiçbir değişiklik yapılmadan ~20 puanlık sMAPE iyileştirmesi sağladı. Bu, hiperparametre aramasından çok daha etkili bir kazanım.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Bellek yönetimi — batchli inference: <\/strong>Büyük test setlerinde GPU belleği aşımını önlemek için inference da batchlenmeli; torch.no_grad() ile gradyan tampon belleği de serbest bırakılmalı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Tekrar üretilebilirlik: <\/strong>Ham veri işleme adımları scripts\/data\/merge_epias.py'ye taşındı. Yeni yıl verisi ekleneceğinde yalnızca CSV indirilip aynı script çalıştırılacak.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Pazartesi (Gün 15)<\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                LightGBM+Optuna tahminini RL ajanına entegre etmek — Oracle \/ Forecast \/ Naive mod karşılaştırması (scripts\/forecast\/compare.py). Hedef: tahmin kullanmanın kural tabanlı politikalara ve tahmin kullanmayan RL'ye kıyasla ne kadar avantaj sağladığını ölçmek.<\/p>\n\n--- DAY 15 (2026-08-03) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Gün 15 — Oracle \/ Forecast \/ Ensemble \/ Naive Fiyat Modu Karşılaştırması<\/span><\/h2>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. Bugün Ne Yapıldı?<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Gün 14'te eğitilen RL ajanlarını (SAC, TD3, PPO, A2C) ve kural tabanlı politikaları dört farklı fiyat bilgisi modunda karşılaştıran <\/span>scripts\/forecast\/compare.py<\/span> scripti yazıldı, hataları düzeltildi ve iki iterasyonla iyileştirildi. Sonuçlar <\/span>logs\/forecast_comparison.csv<\/span> ve <\/span>docs\/forecast_comparison.png<\/span> olarak dışa aktarıldı. Bu karşılaştırma, Implementation Plan'ın Faz 3 kapsamındaki son teknik adımı tamamladı: <\/span>\"ajanın tahmin belirsizliğine dayanıklılığını göstermek.\"<\/em><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. Tasarım — ForecastEnv Subclass Yaklaşımı<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                energy_env.py<\/span>'yi değiştirmeden forecast fiyatlarını ortama enjekte etmek için <\/span>SmartHomeEnergyEnv<\/span>'den türeyen <\/span>ForecastEnv<\/span> alt sınıfı yazıldı. <\/span>reset()<\/span> metodu override edilerek <\/span>_tomorrow_prices_obs<\/span> bloğu ML tahmin dizisiyle değiştiriliyor; ödül hesaplaması (<\/span>step()<\/span>) dokunulmadan kalıyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ForecastEnv(forecast_prices_daily=None) → Oracle modu<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ForecastEnv(forecast_prices_daily=array) → Forecast \/ Ensemble \/ Naive modu<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Bu yaklaşımın avantajı: aynı eğitilmiş model ağırlıkları yeniden eğitim gerektirmeden dört modda da değerlendirilebiliyor. Ortamın geri kalanı (batarya fiziği, ödül, cihaz mantığı) tamamen korunuyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Dört mod:<\/strong><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Mod<\/strong><\/td>Kaynak<\/strong><\/td>forecast_noise_std<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Oracle<\/span><\/td>Gerçek ertesi gün fiyatı<\/span><\/td>0.05 (eğitim dağılımı korunur)<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Forecast<\/span><\/td>LightGBM+Optuna (%29.93 sMAPE)<\/span><\/td>0.00<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ensemble<\/span><\/td>LGB+XGB+RF ağırlıklı ort. (%32.10 sMAPE)<\/span><\/td>0.00<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Naive<\/span><\/td>Bir önceki günün aynı saatleri<\/span><\/td>0.00<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. Düzeltilen Hatalar ve İyileştirmeler<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Hata 1 — <\/strong>load_and_engineer()<\/strong> TypeError:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                İlk yazımda fonksiyon hem <\/span>Path<\/span> hem <\/span>DataFrame<\/span> kabul edecek şekilde karışık yazılmıştı; <\/span>pd.read_csv(DataFrame)<\/span> çağrısı <\/span>TypeError<\/span> verdi. Düzeltme: <\/span>engineer_features(df: DataFrame)<\/span> ve <\/span>load_and_engineer(path: Path)<\/span> olarak iki ayrı fonksiyona bölündü.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Hata 2 — Hardcoded test tarihi:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                TEST_START = pd.Timestamp(\"2025-09-01\")<\/span> sabit tarih kullanılıyordu; <\/span>price_forecast.py<\/span> ile tutarsız. Düzeltme: <\/span>TRAIN_RATIO = 0.80<\/span> ve <\/span>get_test_mask()<\/span> ile oran tabanlı bölme.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Hata 3 — Sadece LightGBM+Optuna:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Karşılaştırmaya yalnızca tek model alınmıştı. Gün 14'te eğitilen XGBoost ve Random Forest modelleri de eklenerek <\/span>build_ensemble_prices()<\/span> ve Ensemble modu tamamlandı.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v2 İyileştirmeleri:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>forecast_noise_std=0.05<\/strong> Oracle için<\/strong> — Ajan <\/span>forecast_noise_std=0.05<\/span> ile eğitilmişti; Oracle modunda <\/span>0.0<\/span> kullanmak ajanı dağılım dışına çıkarıyordu. <\/span>make_env()<\/span> <\/span>noise_std<\/span> parametresi alacak şekilde yeniden düzenlendi.<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. <\/span>Sadece test seti<\/strong> — aligned_dataset'in son %20'si = 74 gün. <\/span>split_test()<\/span> fonksiyonu ile p_test, solar_test, demand_test ve ML tahminleri hepsi bu aralığa kırpıldı.<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. <\/span>device_activation_rate<\/strong> tablosu<\/strong> — Reward hacking kontrolü için <\/span>info[\"episode\"][\"device_activation_rate\"]<\/span> değerleri ayrı pivot tablo olarak yazdırıldı.<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. <\/span>Grafik temizleme<\/strong> — Tüm modlarda Δ=0.00 veren Bekle\/Eşik\/Öz-tük.\/Şb.Bil. grafikten çıkarıldı; yalnızca SAC\/TD3\/PPO\/A2C\/FcAware gösteriliyor. (Bu politikalar <\/span>_tomorrow_prices_obs<\/span> gözlem özelliğini kullanmıyor.)<\/span><\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  4. Karşılaştırma Sonuçları — 74 Gün (Test Seti)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Mod   Oracle Forecast Ensemble Naive Δ Forecast Δ Ensemble Δ Naive<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ─────────────────────────────────────────────────────────────────────────────<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  SAC   +14.38  +14.49  +14.49 +14.18   +0.11   +0.11  -0.20<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  TD3   +14.72  +14.70  +14.64 +14.54   -0.02   -0.08  -0.18<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  PPO   +12.08  +11.98  +11.97 +11.94   -0.10   -0.11  -0.14<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  A2C    -9.01  -9.50  -9.53 -8.79   -0.49   -0.52  +0.22<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  FcAware  -3.34  -2.30  -2.15 +5.73   +1.04   +1.19  +9.07<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  SAC ve TD3 tüm modlarda ±0.2 TL içinde kalıyor. Bu, RL ajanlarının tahmin kalitesine bağımlı olmadığını — yani tahmin belirsizliğine karşı <\/span>robust<\/strong> eğitildiğini — gösteriyor.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  5. Cihaz Çalıştırma Oranı (Reward Hacking Kontrolü)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Mod   Oracle Forecast Ensemble Naive<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ─────────────────────────────────────────<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  SAC    0.053  0.054  0.054 0.049<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  TD3    0.068  0.065  0.066 0.067<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  PPO    0.083  0.083  0.083 0.083<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  A2C    0.069  0.069  0.069 0.068<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  FcAware  0.083  0.083  0.083 0.083<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Maksimum oran: <\/span>max_activations_per_day=2 \/ 24 saat = 0.083<\/span>.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  PPO her modda tam kapasitede çalışıyor (0.083) — cihazın net değerine bakmaksızın her gün 2 kez aktive ediyor. SAC (0.053) ve TD3 (0.068) ise üst sınırın altında kalıyor; fiyata ve güneş durumuna göre <\/span>seçici<\/strong> karar veriyorlar. Bu, SAC\/TD3'ün PPO'ya göre daha nitelikli öğrendiğinin somut kanıtı.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  6. Önemli Bulgu — FcAware Anomalisi<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ForecastAwarePolicy Naive modda +5.73 TL\/gün (en iyi), Oracle\/Forecast\/Ensemble modlarında ise negatif. Bu kural tabanlı politikanın eşik mantığının dünkü fiyat kalıbıyla uyumlu olduğunu, ML tahminlerinin ise farklı bir dağılım sunarak kural mantığını \"şaşırttığını\" gösteriyor. RL ajanları bu davranışı sergilemiyor çünkü gözlemden bağımsız bir strateji öğrenmişler.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  7. Git Commits (Gün 15)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  PR #38: https:\/\/github.com\/isambais\/SmartHome-EnergyRL\/pull\/38<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  cf51f8d feat(forecast): add compare.py — Oracle\/Forecast\/Ensemble\/Naive price mode comparison<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  d32c952 feat(forecast): add comparison outputs — forecast_comparison.png + CSV<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  46dd24c docs: add Gün 15 staj defteri<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  8. Teknik Öğrenimler<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Subclass ile backward-compatible genişletme:<\/strong> <\/span>energy_env.py<\/span>'yi değiştirmek yerine <\/span>ForecastEnv<\/span> subclass yazmak hem mevcut Phase 1\/2 testlerini bozmuyor hem de yeni özelliği temiz bir soyutlama katmanında tutuyor. Bu, open\/closed prensibinin (açık\/kapalı) pratik bir uygulaması.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  forecast_noise_std<\/strong> tutarlılığı:<\/strong> Değerlendirmede eğitim dağılımından sapan bir gürültü seviyesi kullanmak out-of-distribution (OOD) değerlendirmeye yol açar. Oracle modunda <\/span>0.0<\/span> yerine <\/span>0.05<\/span> kullanmak sonuçları daha güvenilir kıldı.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Reward hacking — <\/strong>act_rate<\/strong> metriğinin önemi:<\/strong> Ödül değeri tek başına yeterli değil. PPO, SAC ile benzer ödül aralığında olduğu hâlde cihazı her seferinde maksimum çalıştırıyor. <\/span>device_activation_rate<\/span> olmadan bu fark görünmezdi.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Veri hizalaması:<\/strong> <\/span>p_full<\/span> (40k saat, 2022) + <\/span>solar\/demand<\/span> (aligned_dataset, 2025) karıştırıldığında env <\/span>min(days)<\/span> alıyor ama fiyatlar 2022'den geliyor, solar\/demand 2025'ten — tamamen yanlış hizalama. Doğru yaklaşım: tüm veriyi <\/span>aligned_dataset.csv<\/span>'den almak (Phase 3 <\/span>eval_policy.py<\/span> ile tutarlı).<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Yarın (Gün 16)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Streamlit dashboard başlangıcı (<\/span>dashboard\/app.py<\/span>) — Faz 4. Saatlik karar zaman serisi grafiği, RL ajanı vs baseline maliyet karşılaştırma paneli ve oracle\/forecast\/naive sekmesi.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>\n\n--- DAY 16 (2026-08-04) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Gün 16 — Streamlit BMS Dashboard & Landing Page<\/span><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. Bugün Ne Yapıldı?<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Projenin kullanıcıya yönelik katmanı tamamlandı: Streamlit tabanlı tam bir <\/span>Bina Yönetim Sistemi (BMS) dashboard<\/strong>'u ve projeyi tanıtan bir <\/span>landing page<\/strong> geliştirildi. Gereksiz klasörler (<\/span>frontend\/<\/span>, <\/span>backend\/<\/span>) proje ağacından temizlendi; <\/span>.gitignore<\/span>'a <\/span>node_modules\/<\/span> eklendi.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. Dashboard Mimarisi<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2.1 Klasör Yapısı<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  dashboard\/<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ├── app.py             ← Ana sayfa (4 sayfa bağlantısı)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ├── core\/<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  │ ├── config.py         ← BinaConfig dataclass + tüketim formülleri<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  │ ├── theme.py          ← Dark CSS (#0d1117) + Plotly şablonu<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  │ ├── agent.py          ← SAC yükleme + HeuristicAgent fallback<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  │ ├── simulate.py        ← 24 saatlik fizik simülasyonu<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  │ ├── data.py          ← EPİAŞ API → CSV → sentetik fallback zinciri<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  │ ├── threejs.py         ← Three.js 3D bina HTML (9.6 kB)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  │ └── ui.py           ← Sidebar konfigüratör + gunu_simule_et()<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  └── pages\/<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ├── Bina_Simulasyonu.py  ← 3D + Plotly grafik + metrik kartlar + öneriler<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ├── Canli_EPIAS.py    ← EPİAŞ fiyat çubuğu + kesinti simülasyonu<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ├── Yatirim_ve_Cevre.py  ← Amorti + CO₂ + fiyat duyarlılık analizi<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      └── Uzman_Modu.py     ← Algoritma karşılaştırması + ısı haritası + mevsimsel<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2.2 Veri Akışı<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  EPİAŞ API (TGT auth)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ↓ başarısız<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  arşiv CSV (data\/epias_combined.csv)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ↓ yok<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Sentetik (EPİAŞ deseni, ±gürültü)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ↓<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  gun_fiyati() → saatlik 24 TL\/MWh dizisi<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ↓<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  gunu_simule_et(cfg) → simulate_day(fiyat, güneş, talep, batarya, ajan)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ↓<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  DataFrame (24 satır × 20 sütun) → Plotly + Three.js + metrik kartlar<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  3. BinaConfig Tasarımı<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  config.py<\/span>'deki <\/span>BinaConfig<\/span> dataclass projenin tüm bina parametrelerini tutar:<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Parametre<\/strong><\/td>Açıklama<\/strong><\/td>Varsayılan (Apartman)<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  kat<\/span><\/td>Kat sayısı<\/span><\/td>5<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  daire_per_kat<\/span><\/td>Kat başına daire<\/span><\/td>3<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  aktif_daire<\/span><\/td>Gerçekten oturulan daire<\/span><\/td>12<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  oda<\/span><\/td>Daire başına oda<\/span><\/td>3<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  cati_alani<\/span><\/td>Panel kurulum alanı (m²)<\/span><\/td>140<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  asansor\/hvac\/su_pompasi\/ev_sarj\/...<\/span><\/td>Sistem varlığı<\/span><\/td>tip'e göre<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Türetilmiş değerler<\/strong> (property):<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>gunluk_tuketim_kwh<\/span> = <\/span>aktif_daire × oda × 1.8 + asansör×8 + hvac×kat×3 + ...<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>batarya_kwh<\/span> = <\/span>gunluk_tuketim × 0.4<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  3. <\/span>batarya_guc_kw<\/span> = <\/span>batarya_kwh \/ 2<\/span> (C\/2 şarj hızı)<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  4. <\/span>panel_sayisi<\/span> = <\/span>cati_alani \/ 1.7 m²<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  5. <\/span>panel_kw<\/span> = <\/span>panel_sayisi × 0.45 kW<\/span><\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    4. Simülasyon Fiziği (<\/span>simulate.py<\/span>)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    24 saatlik döngüde her saat için:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>Gözlem vektörü<\/strong> (106 boyut) <\/span>build_obs()<\/span> ile oluşturulur — <\/span>energy_env.py<\/span> ile birebir aynı düzen<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2. <\/span>Ajan kararı<\/strong>: <\/span>act(obs)<\/span> → aksiyon ∈ [-1, 1] (deşarj ↔ şarj)<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    3. <\/span>Batarya fiziği<\/strong>: <\/span>verim=0.95<\/span>, <\/span>satis_orani=0.60<\/span>, <\/span>min_soc=0.10<\/span>, <\/span>oz_desarj=0.0005\/h<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    4. <\/span>Kesinti senaryosu<\/strong>: grid yoksa önce batarya, sonra opsiyonel jeneratör (12 TL\/kWh)<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    5. <\/span>Taban maliyet<\/strong> hesaplanır (şebekeden tam çekseydi ne öderdi?) → tasarruf = taban − net<\/span><\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Ölçekleme<\/strong>: Ajan 10 kWh ev sistemi için eğitilmiş. Bina <\/span>k = bina_batarya \/ 10<\/span> katsayısıyla ajan ölçeğine indirilir, kararlar gerçek ölçeğe çevrilir.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      5. Three.js 3D Görselleştirme (<\/span>threejs.py<\/span>)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      building_html(cfg, saat, soc, gunes_kw, outage)<\/span> fonksiyonu ~9.6 kB tek HTML çıktısı üretir:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>Bina yüksekliği kat sayısına göre dinamik<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. <\/span>Pencereler: aktif daire + gece saati kombinasyonuna göre aydınlık\/karanlık<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3. <\/span>Güneş panelleri: <\/span>gunes_kw<\/span> değerine göre parlama yoğunluğu<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      4. <\/span>Batarya ünitesi: SOC değerine göre yeşil→sarı→kırmızı renk geçişi<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      5. <\/span>Asansör: gündüz saatlerinde animasyonlu hareket<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      6. <\/span>EV aracı + şarj direği<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      7. <\/span>Kesinti modu: kırmızı yanıp sönen alarm<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      8. <\/span>Gün\/gece gökyüzü döngüsü, güneş\/ay pozisyonu<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      9. <\/span>Mouse drag: döndür; scroll: yakınlaştır<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      10. <\/span>HUD overlay: saat, batarya %, güneş kW, aktif daire<\/span><\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. Sayfa İçerikleri<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Sayfa 1 — Bina Simülasyonu:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3D bina animasyonu + 4 metrik kart (tasarruf TL, batarya SOC, güneş kW, toplam tüketim) + dual-axis Plotly grafiği (fiyat + SOC + güneş + şarj\/deşarj kararları) + doğal dil önerileri.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Sayfa 2 — Canlı EPİAŞ:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        EPİAŞ oturum bilgisi girişi + saatlik fiyat çubuğu (şu anki saat sarı, kesinti saatleri kırmızı) + kesinti simülasyonu toggle + saatlik karar tablosu.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Sayfa 3 — Yatırım & Çevre:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Batarya + panel yatırım maliyeti girişi → yıllık tasarruf tahmini (4 mevsim × temsilci gün simülasyonu) → amorti süresi → CO₂ ton tasarrufu (450 gCO₂\/kWh Türkiye faktörü) → ağaç\/araba eşdeğeri. Fiyat duyarlılık analizi grafiği.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Sayfa 4 — Uzman Modu:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Tab 1: <\/span>logs\/forecast_comparison.csv<\/span>'den SAC\/TD3\/PPO\/A2C Oracle performans bar grafiği.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Tab 2: Politika × Fiyat modu ısı haritası (Oracle\/Forecast\/Naive).<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Tab 3: aligned_dataset'ten aylık fiyat profili + Yaz vs Kış saatlik fiyat & güneş karşılaştırması.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. Tasarım Kararları — Kullanıcı Merkezli Yaklaşım<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Algoritma adları gizlendi:<\/strong> SAC\/TD3\/PPO\/A2C isimleri normal kullanıcıya bir şey ifade etmiyor. Dashboard \"Yapay Zekâ Ajanı\" olarak sunar; algoritma detayları yalnızca Uzman Modu'nda görünür.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Fallback zinciri:<\/strong> API → CSV → Sentetik. Kullanıcı hiçbir zaman hata ekranı görmez.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        HeuristicAgent:<\/strong> Model yüklenemezse (SB3 kurulu değilse) eşik tabanlı kural politikası otomatik devreye girer, dashboard çökmez.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. Landing Page (<\/span>landing\/<\/span>)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Proje tanıtım sayfası FintechX template'inden SmartHome-EnergyRL için tamamen yeniden yazıldı:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>Nav<\/strong>: SmartHome Energy RL logo + Türkçe menü + \"Dashboard'u Aç\" CTA<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. <\/span>Hero<\/strong>: Sahtesi olmayan EPİAŞ fiyat grafiği mockup'ı, şarj\/deşarj karar üçgenleri<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. <\/span>Bina tipleri<\/strong>: Müstakil Ev \/ Villa \/ Apartman \/ Ofis Binası kartları<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. <\/span>Önce\/Sonra<\/strong>: FintechX'ten SmartHome RL farkı (toggle animasyonu)<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. <\/span>Özellikler<\/strong>: 3D görselleştirme, SAC\/TD3, EPİAŞ API fallback, batarya fiziği, kesinti koruması<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. <\/span>Nasıl çalışır<\/strong>: 3 adım interactive panel (Bina Tanımla → Simüle Et → Sonuçları İncele)<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. <\/span>İstatistikler<\/strong>: Gerçek proje sonuçları (SAC +14.4 TL\/gün, ±0.2 TL robustluk, %29.93 sMAPE)<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. <\/span>SSS<\/strong>: EPİAŞ bağlantısı, eğitim detayları, batarya boyutu formülü<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        9. <\/span>Footer<\/strong>: GitHub bağlantıları, proje bilgisi<\/span><\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          9. Temizlenen Gereksiz Klasörler<\/span><\/h3>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Klasör<\/strong><\/td>Durum<\/strong><\/td>Neden<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          frontend\/<\/span><\/td>Silindi (kaynak)<\/span><\/td>React dashboard, Streamlit ile değiştirildi<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          backend\/<\/span><\/td>Silindi<\/span><\/td>FastAPI backend, Streamlit ile değiştirildi<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          node_modules\/<\/span><\/td>.gitignore<\/span>'a eklendi<\/span><\/td>npm install<\/span> ile yeniden oluşturulabilir<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          10. Git Commits (Gün 16)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PR #39: feat\/gun16-streamlit-dashboard → feat\/gun15-forecast-comparison<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          [commit hash] feat(dashboard): add Streamlit BMS dashboard — 4 pages + core modules + Three.js<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          [commit hash] feat(landing): rewrite landing page for SmartHome-EnergyRL (FintechX → BMS)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          [commit hash] chore: remove frontend\/ and backend\/ folders, add node_modules to .gitignore<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          [commit hash] docs: add Gün 16 staj defteri<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          11. Teknik Öğrenimler<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          st.cache_resource<\/strong> vs <\/strong>st.cache_data<\/strong>:<\/strong> Model yükleme (<\/span>get_agent()<\/span>) <\/span>@st.cache_resource<\/span> ile — nesne tüm kullanıcı oturumlarında paylaşılır, her request'te yeniden yüklenmez. DataFrame sonuçları <\/span>@st.cache_data<\/span> ile — immutable serileştirilebilir veri.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Streamlit multi-page:<\/strong> <\/span>pages\/<\/span> klasörü Streamlit 1.20+ ile otomatik algılanır. Dosya adı prefix'i sayfa sıralamasını (<\/span>1_<\/span>, <\/span>2_<\/span>, ...) ve sidebar görünümünü belirler. Emoji dosya adında doğrudan çalışır.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Three.js <\/strong>st.components.v1.html()<\/strong>:<\/strong> Three.js render'ı <\/span>components.html()<\/span> içine gömülüyor. iframe sandbox nedeniyle dış CDN yüklenmesi için <\/span>allow-scripts<\/span> gerekli — Streamlit bunu varsayılan olarak açar.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ajan ölçekleme sorunu:<\/strong> SAC 10 kWh ev için eğitildi, bina 40 kWh bataryaya sahip. Çözüm: tüm büyüklükler <\/span>k = bina_kwh \/ 10<\/span> katsayısıyla ajan ölçeğine indirilip kararlar gerçek ölçeğe çevrildi. Bu yaklaşım fizik doğrusallığı varsaydığı için gerçek dünyada ancak yaklaşık doğru; tam doğruluk için binaya özel yeniden eğitim gerekir.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .gitignore<\/strong> ve <\/strong>node_modules<\/strong>:<\/strong> <\/span>node_modules\/<\/span> klasörü binlerce küçük dosya içerdiğinden git repolarına kesinlikle eklenmemeli. <\/span>npm install<\/span> ile saniyeler içinde yeniden oluşturulur.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Yarın (Gün 17)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Landing page deploy (Vercel\/Netlify) ve Streamlit dashboard deploy (Streamlit Cloud). <\/span>requirements.txt<\/span> güncelleme, <\/span>CLAUDE.md<\/span> proje dokümantasyonu.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>\n\n--- DAY 17 (2026-08-05) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 17 — 3D Bina Yenileme & Dashboard UI Redesign<\/span><\/h2>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. Bugün Ne Yapıldı?<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Dün oluşturulan Streamlit dashboard'unun görsel kalitesi ve kullanıcı deneyimi köklü biçimde iyileştirildi. Three.js ile yazılmış 3D bina görselleştirmesi tamamen sıfırdan yeniden yazıldı; gerçekçi mimari detaylar, dinamik gökyüzü sistemi ve tüm bina sistemlerinin 3D yansıması eklendi. Dashboard arayüzü landing page tasarımıyla tutarlı hale getirildi.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. Three.js 3D Bina — Tam Yeniden Yazım<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.1 Temel Sorun<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Önceki Three.js implementasyonunda bina gövdesi <\/span>opacity: 0.5<\/span> şeffaf malzemeyle yazılmıştı. Bu yüzden katlar üst üste pizza kutusu gibi görünüyor, çatı binadan kopuk yüzüyordu. Profesyonel görünüm için tüm geometri ve malzeme sistemi sıfırdan kuruldu.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.2 Yeni Mimari<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Bina geometrisi:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── Temel (koyu beton)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── Her kat için:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ ├── Döşeme levhası (solid, gölge atıyor)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ ├── Kolonlar (pencereler arası dikey duvar)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ ├── Üst kiriş + windowsill<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ ├── Pencere camları (MeshStandardMaterial, gündüz yansıma \/ gece sarı)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ ├── Pencere çerçeveleri (metal profil)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ ├── İç ışık noktaları (gece saatlerinde PointLight)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ └── Balkon + korkuluk (her katta)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── Çatı: parapet duvarı + güneş panelleri (eğimli, ayaklı)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          └── Giriş: kapı çerçevesi + metal kapı + 3 basamak merdiven<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.3 Işıklandırma Sistemi<\/span><\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Işık türü<\/strong><\/td>Renk<\/strong><\/td>Açıklama<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          HemisphereLight<\/span><\/td>gökyüzü→toprak<\/span><\/td>Yumuşak ambient dolgu<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          DirectionalLight<\/span><\/td>güneş rengi<\/span><\/td>Güneş pozisyonuna göre, gölge üretir<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          AmbientLight<\/span><\/td>beyaz<\/span><\/td>Minimum dolgu, gece görünürlüğü<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PointLight<\/span> (pencere)<\/span><\/td>#fcd34d<\/span><\/td>Gece yanar, 5 birim yarıçap<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          DirectionalLight<\/span> (ay)<\/span><\/td>#8899cc<\/span><\/td>Gece modunda aktif<\/span><\/td><\/tr><\/tbody><\/table>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.4 Dinamik Gökyüzü<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Saat değerine göre 8 farklı gökyüzü renk kademesi:<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Saat aralığı<\/strong><\/td>Durum<\/strong><\/td>Arka plan rengi<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          00–05<\/span><\/td>Derin gece<\/span><\/td>#01060f<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          05–06<\/span><\/td>Gece sonu<\/span><\/td>#040d1e<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          06–07<\/span><\/td>Şafak<\/span><\/td>#c45c1e<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          07–08<\/span><\/td>Sabah altını<\/span><\/td>#e8955a<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          08–17<\/span><\/td>Gündüz<\/span><\/td>#4a9fd4<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          17–18<\/span><\/td>Öğleden sonra<\/span><\/td>#6ab0d8<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          18–19<\/span><\/td>Gün batımı<\/span><\/td>#e07030<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          19–21<\/span><\/td>Alaca karanlık<\/span><\/td>#8a2a10<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          21–24<\/span><\/td>Gece<\/span><\/td>#02060e<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Güneş diski saate göre yay çizerek hareket eder; şafak\/gün batımında turuncu hale, öğlende beyaz glow efekti eklendi. Gece <\/span>dayF < 0.3<\/span> olduğunda 800 noktalı yıldız sistemi aktif olur.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3. Bina Sistemlerinin 3D'ye Yansıtılması<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Her sistemin checkbox durumu Three.js'e <\/span>CFG<\/span> objesi üzerinden iletilir ve sahneye karşılık gelen 3D obje eklenir ya da eklenmez:<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Sistem<\/strong><\/td>3D Görsel<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          HVAC<\/strong><\/td>Çatıda klima kasaları + fan çark geometrisi<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Su Pompası<\/strong><\/td>Çatıda silindirik metal tank + boru bağlantısı<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Güneş Isıtıcı<\/strong><\/td>Kolektör plakaları (PV'den daha dik açı, ~0.5 rad) + kırmızı sıcak su borusu<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Jeneratör<\/strong><\/td>Sol yan tarafta metal kasa + egzoz borusu + sarı plaka; kesintide kırmızı LED + duman küre<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Kamera<\/strong><\/td>4 köşede güvenlik kamerası (braket + gövde + lens); gece IR PointLight<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          EV Şarj<\/strong><\/td>Detaylı araç (gövde + kabin + cam + 4 tekerlek + farlar) + şarj direği + yeşil ekran<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Asansör<\/strong><\/td>Şeffaf şaft + sinüs hareketiyle yukarı-aşağı giden kabin<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Teknik not:<\/strong> <\/span>building_html()<\/span> fonksiyonuna <\/span>hvac<\/span>, <\/span>su_pompasi<\/span>, <\/span>kamera<\/span>, <\/span>gunes_isitici<\/span>, <\/span>jenerator<\/span> parametreleri eklendi. JSON serialize edilerek JavaScript <\/span>CFG<\/span> objesine aktarılıyor.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4. Dashboard UI Yenileme<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4.1 Emoji Temizliği<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Streamlit'in varsayılan emoji etiketleri (<\/span>🏗️ Bina Konfigüratörü<\/span>, <\/span>🛗 Asansör<\/span>, <\/span>💰 Bugünkü tasarruf<\/span> vb.) landing page tasarımıyla tutarsız bir görünüm yaratıyordu. Tüm emoji'ler kaldırıldı; yerine temiz metin ve CSS ile stilize edilmiş etiketler kullanıldı.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4.2 Saat Slider'ının Taşınması<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Önceki durum:<\/strong> Saat slider'ı sidebar'ın en altındaydı — scroll yapmadan görünmüyordu. Kullanıcı \"Saat kaydırıcısıyla günü gezin\" yönlendirmesini görüyor fakat slider'ı bulamıyordu.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Yeni durum:<\/strong> Slider, 3D binanın hemen altına \"Simülasyon saati\" etiketi ile taşındı. Saat değişince <\/span>st.rerun()<\/span> ile sayfa anında yenileniyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4.3 Ajan Kararı Badge<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Simülasyonun en kritik çıktısı — ajan şu an ne yapıyor — öne çıkarıldı:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          karar_map = {<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \"şarj\": (\"decision-sarj\", \"Batarya şarj ediliyor\", \"Ucuz saat — enerji depolanıyor\"),<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \"deşarj\": (\"decision-desarj\", \"Batarya deşarj ediliyor\", \"Pahalı saat — depo kullanılıyor\"),<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \"bekle\": (\"decision-bekle\", \"Bekleniyor\",       \"Şarj\/deşarj için uygun fiyat değil\"),<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          }<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Mavi (şarj) \/ Kırmızı (deşarj) \/ Gri (bekle) renk kodlaması; üçgen ok simgesi ve kısa açıklama metni ile.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4.4 Metrik Kartlar<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Native <\/span>st.metric()<\/span> yerine custom HTML kartlar: beyaz arka plan, ince border, <\/span>Inter<\/span> font, landing page renk paleti. Tasarruf yüzdesi hesabı da düzeltildi — önceki <\/span>%175 daha az fatura<\/span> matematiksel olarak yanlıştı, <\/span>tasarruf \/ taban_maliyet * 100<\/span> formülüne çevrildi.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          5. Landing Page Geliştirmeleri<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          5.1 Parallax 3D Hero<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          HeroScene<\/span> komponenti: 7 bağımsız katman, her biri farklı <\/span>translateY<\/span> hızıyla scroll'a tepki verir:<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Katman<\/strong><\/td>Hız katsayısı<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gökyüzü<\/span><\/td>0.18<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Güneş<\/span><\/td>0.22<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Uzak bulutlar<\/span><\/td>0.30<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Yakın bulutlar<\/span><\/td>0.24<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Enerji partikülleri<\/span><\/td>0.35<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Şehir silüeti<\/span><\/td>0.42<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Yeşil zemin<\/span><\/td>0.55<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          useEffect<\/span> içinde <\/span>window.addEventListener('scroll', handler, { passive: true })<\/span> ile performanslı scroll tracking; <\/span>willChange: 'transform'<\/span> ile GPU katmanı zorlanıyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          5.2 Scroll-linked Sticky Showcase<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          StickyShowcase<\/span> komponenti: sol taraf <\/span>position: sticky; top: 14vh<\/span> ile sabit kalıyor, sağ taraftaki özellik kartları <\/span>minHeight: 68vh<\/span> ile scroll edilebilir. <\/span>IntersectionObserver<\/span> (threshold: 0.55) her kartın görünürlüğünü izleyerek <\/span>active<\/span> state'ini güncelliyor; <\/span>BuildingViz<\/span> SVG buna göre 5 durumdan birini gösteriyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          5.3 Bina Tipleri Yenileme<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Emoji ikonlar → Tip başına özel SVG bina çizimleri (MustakilSvg, VillaSvg, ApartmanSvg, OfisSvg). Hover'da bina yeşile dönüyor, güneş panelleri sarıya yanıyor. Sabit değerler (<\/span>1 kat · 4 oda<\/span>) → gerçekçi aralıklar (<\/span>1–2 kat · 3–7 oda · 60–180 m²<\/span>).<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          6. Teknik Öğrenimler<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Three.js MeshStandardMaterial vs MeshPhongMaterial:<\/strong> <\/span>Standard<\/span> PBR tabanlı — gerçek dünya ışık davranışı, <\/span>roughness<\/span> ve <\/span>metalness<\/span> parametreleri. <\/span>Phong<\/span> daha basit, <\/span>shininess<\/span> ile parlama kontrolü. Dashboard'da <\/span>Standard<\/span> tercih edildi çünkü HDR toneMapping (<\/span>ACESFilmicToneMapping<\/span>) ile daha doğal sonuç veriyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Streamlit <\/strong>st.rerun()<\/strong>:<\/strong> Slider değeri değişince sayfa yeniden render edilmesi için. <\/span>st.experimental_rerun()<\/span> eski API'ydi, Streamlit 1.27+ ile <\/span>st.rerun()<\/span> kullanılıyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          CSS <\/strong>position: sticky<\/strong> + IntersectionObserver:<\/strong> Apple ürün sayfalarındaki scroll animasyon tekniği. Sticky element viewport'ta sabit kalırken sibling container scroll edilir; IO her section'ın görünürlüğünü %55 threshold ile izler.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Git force push:<\/strong> Yanlış branch'e giden commit'i ayırmak için <\/span>git reset --hard <hash><\/span> + <\/span>git push --force<\/span>. Takım çalışmasında riskli — kendi feature branch'inde güvenli.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          7. Git Commits (Gün 17)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PR #XX: feat\/gun17-dashboard-redesign → feat\/gun16-streamlit-dashboard<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          18d0466 feat(dashboard): redesign 3D building + UI — realistic Three.js, remove emojis, agent badge, saat slider<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   feat(landing): add parallax 3D hero, sticky showcase, custom SVG building cards<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Yarın (Gün 18)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Diğer Streamlit sayfalarının (Canlı EPİAŞ, Yatırım & Çevre, Uzman Modu) UI'larını da landing page stiliyle uyumlu hale getirme. Deploy hazırlığı: <\/span>requirements.txt<\/span> güncelleme, Streamlit Cloud konfigürasyonu.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>\n\n--- DAY 18 (2026-08-06) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Gün 18 — FastAPI Backend & React Frontend<\/span><\/h1>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. Bugün Ne Yapıldı?<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Projenin ağ katmanı yazıldı. Streamlit prototipinin yerini üretim kalitesinde bir istemci-sunucu mimarisi aldı: FastAPI ile yazılmış bir REST API backend ve React + Vite ile yazılmış 7 sayfalık bir web uygulaması. Backend, daha önceki günlerde geliştirilen simülasyon motorunu (<\/span>dashboard\/core<\/span>) yeniden kullanıyor; bu sayede hiçbir simülasyon mantığı tekrar yazılmadı.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. Backend — FastAPI<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.1 Mimari Genel Bakış<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          backend\/<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── main.py   FastAPI uygulaması — tüm endpoint'ler<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── auth.py   Kimlik doğrulama (PBKDF2 + JWT-style token)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── models.py  SQLAlchemy ORM modelleri<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── db.py    Veritabanı bağlantısı ve başlatma<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── data.py   EPİAŞ veri katmanı (backend'e özgü)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          └── requirements.txt<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          dashboard\/core<\/span> modülleri <\/span>sys.path<\/span> ile içe aktarılıyor; yani <\/span>simulate_day()<\/span>, <\/span>get_agent()<\/span>, <\/span>building_html()<\/span> ve <\/span>BinaConfig<\/span> tek bir yerden geliyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.2 Kimlik Doğrulama<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Harici JWT kütüphanesi (PyJWT, python-jose vb.) kullanılmadı; tüm token mekanizması Python standart kütüphanesiyle yazıldı.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Şifre hash'leme:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          def hash_sifre(sifre: str) -> str:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              salt = os.urandom(16)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              dk = hashlib.pbkdf2_hmac(\"sha256\", sifre.encode(), salt, 200_000)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              return salt.hex() + \"$\" + dk.hex()<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PBKDF2-HMAC-SHA256 ile 200.000 iterasyon — modern brute-force saldırılarına karşı yeterli maliyet. Tuz her kayıt için rastgele üretildiğinden gökkuşağı tablo saldırıları etkisiz.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Token:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          # Header.Payload.İmza — Base64URL kodlu, HMAC-SHA256 imzalı<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          def token_olustur(user_id: int) -> str:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              # 30 günlük geçerlilik, standart JWT yapısı<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Authorization: Bearer <token><\/span> header'ından çözümleniyor; <\/span>current_user<\/span> dependency injection olarak FastAPI endpoint'lerine enjekte ediliyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.3 Veritabanı Modelleri<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          class User(Base):<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              id, ad, email, sifre_hash, created_at<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              bina: JSON   # Kullanıcının kayıtlı bina konfigürasyonu<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              gecmis: [SimKaydi]<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          class SimKaydi(Base):<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              id, user_id (FK), tarih, bina_tipi<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              tasarruf_tl, gunes_kwh, not_<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          User.bina<\/span> sütunu JSON tipinde; kullanıcı bina konfigüratöründe ayar yaptığında <\/span>PUT \/api\/profile\/bina<\/span> ile tek satıra kaydediliyor. Bir sonraki girişte ayarlar hazır geliyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.4 Veritabanı Esnekliği<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          # PostgreSQL (üretim)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          DATABASE_URL=postgresql+psycopg:\/\/postgres:postgres@localhost:5432\/smarthome<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          # SQLite (geliştirme — docker gerektirmez)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          DATABASE_URL=sqlite:\/\/\/.\/smarthome.db<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          db.py<\/span> içindeki <\/span>init_db()<\/span> uygulamayı açılışında tabloları oluşturuyor (migrate adımı yok, basit dev akışı).<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.5 API Endpoint'leri<\/span><\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Metot<\/strong><\/td>Yol<\/strong><\/td>Açıklama<\/strong><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          POST<\/span><\/td>\/api\/register<\/span><\/td>Kayıt — token döner<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          POST<\/span><\/td>\/api\/login<\/span><\/td>Giriş — token döner<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          GET<\/span><\/td>\/api\/profile<\/span><\/td>Kullanıcı + simülasyon geçmişi<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PUT<\/span><\/td>\/api\/profile\/bina<\/span><\/td>Bina konfigürasyonunu kaydet<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          POST<\/span><\/td>\/api\/profile\/gecmis<\/span><\/td>Simülasyon sonucunu geçmişe ekle<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PUT<\/span><\/td>\/api\/profile\/sifre<\/span><\/td>Şifre değiştir<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          POST<\/span><\/td>\/api\/simulate<\/span><\/td>SAC ajanıyla 24 saatlik simülasyon<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          POST<\/span><\/td>\/api\/epias<\/span><\/td>Canlı EPİAŞ verileriyle simülasyon<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          GET<\/span><\/td>\/api\/yatirim<\/span><\/td>Amorti hesabı + aylık tasarruf<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          GET<\/span><\/td>\/api\/uzman<\/span><\/td>Algoritma karşılaştırması + mevsimsel analiz<\/span><\/td><\/tr>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          GET<\/span><\/td>\/api\/3d<\/span><\/td>Three.js bina HTML'i<\/span><\/td><\/tr><\/tbody><\/table>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          CORS middleware ile <\/span>http:\/\/localhost:5173<\/span> (Vite dev server) white-list'te.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3. Frontend — React + Vite<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3.1 Sayfa Yapısı<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          frontend\/src\/<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── App.jsx     React Router — korumalı + genel rotalar<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── state.jsx    Global durum (user, cfg, token) — Context API<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── api.js      Backend'e HTTP istekleri — merkezi istemci<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── i18n.jsx     Çok dil desteği — TR \/ EN \/ AR<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── icons.jsx    SVG ikon bileşenleri<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── pages\/<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ ├── Auth.jsx   Kayıt \/ Giriş formu<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ ├── Landing.jsx Landing sayfası (tam içerik)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ ├── Simulasyon.jsx 24 saat SAC simülasyonu<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ ├── Epias.jsx  Canlı EPİAŞ fiyatları<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ ├── Yatirim.jsx Amorti & çevre etkisi<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ ├── Uzman.jsx  Algoritma karşılaştırması<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │ └── Profil.jsx  Hesap & geçmiş yönetimi<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          └── components\/<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ├── TopNav.jsx  Navigasyon çubuğu<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ├── ConfigPanel.jsx Bina konfigüratörü (sidebar)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ├── Building.jsx Three.js bina (iframe)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              └── ui.jsx    Paylaşılan UI bileşenleri<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3.2 Kimlik Doğrulama Akışı<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Kullanıcı → Auth.jsx (kayıt\/giriş formu)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   → POST \/api\/register veya \/api\/login<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   → token + user → state.jsx (Context)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   → AppLayout (korumalı rota) — token yoksa \/kayit'a yönlendir<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Token <\/span>localStorage<\/span>'da saklanıyor; sayfa yenilenince kullanıcı oturumu kaybolmuyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          AppLayout<\/span> bileşeni: <\/span>const { user } = useApp(); if (!user) return <Navigate to=\"\/kayit\" \/><\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3.3 Bina Konfigürasyon Yönetimi<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          state.jsx<\/span> içindeki <\/span>useApp()<\/span> hook'u global <\/span>cfg<\/span> durumunu tutuyor. <\/span>ConfigPanel<\/span> bu durumu güncelliyor; tüm sayfalar (Simulasyon, Epias, Yatirim) aynı <\/span>cfg<\/span>'yi API isteğine ekliyor. Kullanıcı oturum açıkken her simülasyondan sonra <\/span>PUT \/api\/profile\/bina<\/span> ile bina konfigürasyonu sunucuya kaydediliyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3.4 Canlı EPİAŞ Sayfası<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          useDebounced<\/span> hook'u: Kullanıcı kesinti aralığı slider'ını hareket ettirirken 450 ms debounce — her px harekette API çağrısı yapılmıyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const dReq = useDebounced({ cfg, kesintiSaatleri }, 450);<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          useEffect(() => {<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            api.simulate({ config: dReq.cfg, kesinti_saatleri: dReq.kesintiSaatleri })<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .then(setSim);<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          }, [JSON.stringify(dReq)]);<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3.5 Yatırım & Çevre Sayfası<\/span><\/h4>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>Aylık tasarruf (12 ay × sezonsal güneş verimliliği)<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. <\/span>Amorti süresi hesabı: <\/span>toplam_yatırım \/ yıllık_tasarruf<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3. <\/span>CO₂ tasarrufu → ton\/yıl → eşdeğer ağaç sayısı<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4. <\/span>PDF rapor:<\/strong> Tarayıcının <\/span>window.open()<\/span> + <\/span>document.write()<\/span> API'si kullanılıyor; dış kütüphane gerektirmiyor. Baskı stili CSS ile biçimlendiriliyor.<\/span><\/li><\/ol>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3.6 Uzman Modu Sayfası<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3 sekme:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>Algoritma Karşılaştırması<\/strong> — SAC \/ TD3 \/ PPO \/ A2C günlük tasarruf karşılaştırması (Recharts BarChart + ErrorBar)<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2. <\/span>Fiyat Bilgisi Etkisi<\/strong> — Ajanın önceden kaç saatlik fiyat bilgisiyle çalıştığının etkisi<\/span><\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3. <\/span>Mevsimsel Analiz<\/strong> — 12 ay × algoritma ısı haritası<\/span><\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              4. Çok Dil Desteği (i18n)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              i18n.jsx<\/span> bileşeni: Türkçe, İngilizce ve Arapça destekli minimal i18n sistemi.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const S = {<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \"nav.sim\": { tr: \"Bina Simülasyonu\", en: \"Building Simulation\", ar: \"محاكاة المبنى\" },<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \"auth.register.title\": { tr: \"Hesap oluşturun\", en: \"Create your account\", ar: \"أنشئ حسابك\" },<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \/\/ ...<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              }<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Arapça seçildiğinde <\/span>document.dir = \"rtl\"<\/span> ayarlanıyor; tüm flexbox düzeni otomatik ayna görüntüsüne dönüşüyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              TopNav<\/span> içindeki <\/span>DilSecici<\/span> bileşeni: Bayrak + dil adı gösteren açılır menü, localStorage'da seçim saklanıyor.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              5. Altyapı<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              5.1 Docker Compose<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              services:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                db:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  image: postgres:16<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  environment:<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    POSTGRES_USER: postgres<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    POSTGRES_PASSWORD: postgres<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    POSTGRES_DB: smarthome<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ports: [\"5432:5432\"]<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  volumes: [smarthome_pgdata:\/var\/lib\/postgresql\/data]<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Geliştirme ortamı: <\/span>docker compose up -d<\/span> ile PostgreSQL ayağa kalkıyor. Üretim için <\/span>DATABASE_URL<\/span> ortam değişkeni değiştiriliyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              5.2 .env.example<\/span><\/h4>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Projeye katılacak geliştiricilerin ihtiyaç duyduğu tüm değişkenler belgelenmiş halde <\/span>.env.example<\/span>'a eklendi. Gerçek <\/span>.env<\/span> gitignore'da.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              6. Teknik Öğrenimler<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              FastAPI Dependency Injection:<\/strong> <\/span>Depends(current_user)<\/span> pattern'ı — her endpoint'e <\/span>user: User = Depends(current_user)<\/span> parametresi ekleniyor; FastAPI header'ı çözümleyip kullanıcıyı bulup enjekte ediyor. <\/span>HTTPException(401)<\/span> yetkisiz erişimlerde otomatik fırlatılıyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              SQLAlchemy JSON sütunu:<\/strong> <\/span>mapped_column(JSON, nullable=True)<\/span> — ilişkisel tabloya yapılandırılmamış veri saklamanın en basit yolu. Bina konfigürasyonu için ayrı tablo açmak yerine <\/span>User.bina<\/span> sütunu tercih edildi; config şeması zamanla değişebileceğinden migration maliyeti düşük tutuluyor.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              React Context API vs Zustand:<\/strong> Global durum yönetimi için Zustand\/Redux yerine <\/span>createContext<\/span> + <\/span>useReducer<\/span> tercih edildi. Bağımlılık eklenmedi, bundle boyutu küçük kaldı. Durum: <\/span>{ user, token, cfg }<\/span>.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              RTL (Right-to-Left) desteği:<\/strong> CSS <\/span>direction: rtl<\/span> + flexbox kendi kendine ayna görüntüsüne geçiyor. Dikkat gerektiren noktalar: margin\/padding yönleri, <\/span>text-align: left<\/span> → <\/span>start<\/span>, border-left → <\/span>border-inline-start<\/span>.<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              PBKDF2 vs bcrypt:<\/strong> bcrypt üretim standardı olarak önerilse de Python standart kütüphanesinde <\/span>hashlib.pbkdf2_hmac<\/span> mevcut; <\/span>bcrypt<\/span> veya <\/span>passlib<\/span> gibi ek bağımlılık gerektirmiyor. 200.000 iterasyon ile hesaplama süresi ~200 ms — kullanıcı kayıt\/girişinde kabul edilebilir, brute-force için pahalı.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              7. Git Commits (Gün 18)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              PR #XX: feat\/gun18-react-frontend-fastapi → feat\/gun17-dashboard-redesign<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              95a661b feat(backend+frontend): add FastAPI backend + React frontend<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       - backend\/: FastAPI, PBKDF2 auth, SQLAlchemy (User + SimKaydi), PostgreSQL\/SQLite<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       - frontend\/src\/: 7 sayfa, 4 bileşen, i18n TR\/EN\/AR<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       - docker-compose.yml (postgres:16)<\/span><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       - .env.example<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Yarın (Gün 19)<\/span><\/h3>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Deploy hazırlığı: React uygulamasını <\/span>npm run build<\/span> ile üretim bundle'ına derleme, FastAPI'yi <\/span>uvicorn --workers 4<\/span> ile ayağa kaldırma, Nginx ile statik dosya sunumu ve API proxy konfigürasyonu. Gerekirse Railway veya Render üzerinde demo yayını.<\/span><\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>\n" + }, + "Faruk Tazeoğlu": { + "id": 31, + "email": "faruktazeoglu9@gmail.com", + "repo": "https:\/\/github.com\/Faruk-T\/baret", + "github_username": "Faruk-T", + "total_entries": 17, + "commits_count": 0, + "commits_sample": [], + "full_text": "\n--- DAY 1 (2026-07-10) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Stajımın ilk gününde şirket içi oryantasyon süreçleri tamamlandı ve proje yöneticisiyle genel bir değerlendirme toplantısı yapıldı. Üzerinde çalışacağım 'İnşaat Mühendisleri ve Nalburlar için Çok Satıcılı Pazar Yeri (Multi-vendor Marketplace)' projesinin iş gereksinimleri, hedef kitlesi ve sisteme eklenecek temel özellikler detaylıca analiz edildi. Geliştirme sürecinde kullanılacak teknolojiler (mobil uygulama için React Native, arka uç için Supabase\/Firebase) üzerine literatür araştırması yapıldı. Ayrıca, şirketin versiyon kontrol (Git) ve proje yönetim standartlarına uygun olarak GitHub Flow, Issues ve Kanban panosu süreçleri incelendi. Son olarak, kodlama süreçlerine başlayabilmek için yerel bilgisayarıma gerekli geliştirme ortamı (IDE, Node.js, Git) kurularak altyapı hazırlıkları tamamlandı.<\/em><\/p>\n\n--- DAY 2 (2026-07-13) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Baret projesi için kapsamlı implementation_plan.md hazırladım. 4 fazlı 20 günlük yol haritası, Tech Stack (Expo, TypeScript, Supabase, NativeWind), veritabanı mimarisi, ekran envanteri, kullanıcı akışları, RLS güvenlik planı ve Git\/şirket prosedürleri dokümante edildi. Projenin tek kaynak dokümantasyonu oluşturuldu.<\/p>\n\n--- DAY 3 (2026-07-14) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              14 Temmuz 2026 — Faz 1, Gün 3: Supabase Veritabanı Mimarisi<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Bugün Baret projesinin Supabase\/PostgreSQL veritabanı şemasını tasarladım ve kodladım:<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Kullanıcı rolleri (admin, buyer, seller), sipariş durumu ve teslimat seçeneği için Enum tipleri tanımladım.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              users, stores, products, orders, reviews tablolarını Foreign Key ilişkileriyle birlikte oluşturdum.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Sık filtrelenen alanlar (rol, mağaza sahibi, sipariş durumu, şehir\/ilçe) için performans indeksleri ekledim.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              updated_at otomatik güncelleme ve yeni kullanıcı kaydında otomatik profil oluşturma trigger'larını yazdım.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              is_admin() ve is_store_owner() yardımcı fonksiyonlarını, tüm tablolar için Row Level Security (RLS) politikalarını tanımladım — alıcılar sadece kendi siparişlerini, satıcılar sadece kendi mağazalarını, adminler ise her şeyi yönetebiliyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Çalışmayı day-03-supabase-database-schema branch'inde 3 mantıklı commit'e böldüm (enum\/temizlik → tablolar\/indeksler → trigger\/RLS), GitHub'a push ettim ve Pull Request açtım.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Ayrıca proje reposunu (Expo iskeleti + Faz 1 planı) temiz bir başlangıç commit'i ile main'e kurdum.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>[12:53]<\/strong> (8f386ed<\/em>) chore: initialize Baret Expo project scaffold and Phase 1 plan Co-authored-by: Cursor <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              2. <\/span>[18:39]<\/strong> (0577d1f<\/em>) feat: add cleanup script and enum types for baret schema - Drop existing tables and enum types first so this script can be re-run safely on a fresh Supabase project - Define user_role (admin\/buyer\/seller), order_status and delivery_option enums that the rest of the schema depends on Co-authored-by: Cursor <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              3. <\/span>[18:40]<\/strong> (358a13c<\/em>) feat: add core tables and indexes for baret schema - Create users, stores, products, orders and reviews tables with foreign keys linking buyers, sellers, products and orders together - Add a CHECK constraint on orders so total_amount always matches unit_price * quantity - Add indexes on frequently filtered columns (role, owner_id, store_id, status, city\/district) to keep list and search queries fast Co-authored-by: Cursor <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              4. <\/span>[18:41]<\/strong> (ff9fd0f<\/em>) feat: add triggers, helper functions and RLS policies to baret schema - Add set_updated_at trigger so updated_at is refreshed automatically on every UPDATE - Add handle_new_user trigger to create a public.users row whenever someone signs up through Supabase Auth - Add is_admin and is_store_owner helper functions reused across the RLS policies - Enable Row Level Security on all 5 tables and define per-role policies so buyers only see their own orders, sellers only manage their own store\/products, and admins can manage everything Co-authored-by: Cursor <\/li><\/ol>\n\n--- DAY 4 (2026-07-16) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Baret projesinde alıcı akışının 3 temel ekranı (Ana Sayfa, Ürün Detay, Sepet) için AI mockup'ları tasarladım. Görseller assets\/mockups\/ klasörüne eklendi, plan güncellendi. PR açıldı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Bugün (Gün 5): Mockup'ları README'de sergileyeceğim — projenin GitHub vitrinini güncelleyeceğim. Gün sonu PR ile kapatacağım.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>[11:42]<\/strong> (7814ecb<\/em>) feat: add home screen mockup and update plan for Day 4 Marked Day 3 (database.sql schema) as completed in implementation_plan.md and started Day 4, whose task is producing AI-generated UI mockups for the Home, Product Detail, and Cart screens. Added the first mockup: the Home screen, showing the search bar, hardware category chips, nearby store cards, and a popular products grid. This establishes the visual style (safety-orange branding, rounded cards) that the remaining mockups will follow. Updated the Phase 1 progress bar to 50%% (3\/6 days) and adjusted the overall completion tracker to 15%% (3\/20 days).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. <\/span>[14:07]<\/strong> (0c52067<\/em>) feat: add product detail screen mockup Added the second Day 4 mockup: the Product Detail screen for the Baret marketplace app. The screen shows a large product image gallery, product title and brand tag, star rating, price, a verified store info card with a link to the store page, stock availability, delivery option selection (shipping vs. pickup), a quantity stepper, a short description, and a fixed bottom 'Sepete Ekle' bar with the total price. It reuses the safety-orange branding and rounded-card style established in the home screen mockup for visual consistency.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. <\/span>[17:50]<\/strong> (910ec62<\/em>) feat: add cart screen mockup and complete Day 4 Added the third and final Day 4 mockup: the Cart screen for the Baret marketplace app. The screen includes cart item cards with product image, store name, unit price, quantity stepper, and remove action, a promo code input, an order summary section (subtotal, shipping, total), and a fixed bottom checkout button. It follows the same safety-orange branding and rounded-card style as the home and product detail mockups. Marked Day 4 as completed in implementation_plan.md. All three core buyer-flow mockups (Home, Product Detail, Cart) are now stored under assets\/mockups\/. Updated Phase 1 progress to 67% (4\/6 days) and overall project progress to 20% (4\/20 days).<\/li><\/ol>\n\n--- DAY 5 (2026-07-17) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Baret projesinde alıcı akışı mockup'larını (Ana Sayfa, Ürün Detay, Sepet) README'de sergiledim. README'ye UI Mockups bölümü, tasarım dili tablosu ve 3 ekran görseli eklendi. implementation_plan.md güncellendi, Gün 5 tamamlandı (Faz 1: 5\/6 gün, %83). day-05-readme-mockup-showcase branch'inde 3 commit atıldı, gün sonu PR açıldı. Dünkü Gün 4 PR'ı (#22) gün içinde merge edildi.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>[10:32]<\/strong> (dc6a482<\/em>) docs: add UI mockups section to README and start Day 5 Started Phase 1 Day 5 by updating the project README with a new UI Mockups section for the buyer flow. Added a design language table (safety-orange branding, rounded cards, tab navigation) and showcased the Home screen mockup from assets\/mockups\/. Updated the project status line to reflect Phase 1 Day 5 in progress. Marked Day 5 as in progress in implementation_plan.md and updated the last-updated date to July 16.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>[16:44]<\/strong> (b6861f8<\/em>) docs: showcase product detail and cart mockups in README Extended the UI Mockups section in README with the remaining two buyer-flow screens. Added the Product Detail mockup showing the image gallery, pricing, store info, stock status, delivery options, and add-to-cart bar. Added the Cart mockup showing cart items, quantity controls, promo code input, order summary, and checkout button. All three core buyer screens (Home, Product Detail, Cart) are now visible in the project README for reviewers and visitors.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  3. <\/span>[16:46]<\/strong> (2f9c8c3<\/em>) docs: complete Day 5 README showcase and update plan Finalized Phase 1 Day 5 by marking the README mockup showcase as complete. Updated the README status section to reflect that all three buyer-flow mockups (Home, Product Detail, Cart) are now displayed in the project README. Marked Day 5 as completed in implementation_plan.md and updated Phase 1 progress to 83% (5\/6 days) and overall project progress to 25% (5\/20 days).<\/li><\/ol>\n\n--- DAY 6 (2026-07-20) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    20 Temmuz 2026 — Faz 2 Gün 7: Expo projesinde NativeWind (TailwindCSS) styling altyapısını kurdum. nativewind, tailwindcss, react-native-reanimated ve react-native-safe-area-context paketlerini ekledim. tailwind.config.js, babel.config.js, metro.config.js, global.css ve nativewind-env.d.ts dosyalarını oluşturdum. Brand rengi (#FF6B00) constants'a alındı, App.tsx'te className smoke test yapıldı<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>[10:28]<\/strong> (81d3fd9<\/em>) feat: install NativeWind and add Tailwind base configuration Started Phase 2 Day 7 by setting up the NativeWind styling infrastructure for the Baret Expo project. Installed nativewind, tailwindcss, react-native-reanimated, and react-native-safe-area-context. Added tailwind.config.js with src\/ and App.tsx content paths plus the Baret safety-orange brand color. Added babel.config.js with NativeWind and Reanimated presets, global.css with Tailwind directives, and nativewind-env.d.ts for TypeScript className support. Marked Day 7 as in progress in implementation_plan.md as Phase 2 begins.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2. <\/span>[14:15]<\/strong> (95693df<\/em>) feat: configure Metro bundler for NativeWind pipeline Completed the NativeWind Metro integration for Phase 2 Day 7. Added metro.config.js with withNativeWind to process global.css through the Expo bundler. Set app.json web bundler to metro for cross-platform styling support. Imported global.css in index.ts so Tailwind styles load at app startup. Added src\/constants\/colors.ts with the Baret safety-orange brand palette, confirming the src\/ folder architecture is ready for Phase 2 screen development.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    3. <\/span>[17:21]<\/strong> (bf73683<\/em>) feat: add NativeWind smoke test and complete Day 7 Finalized Phase 2 Day 7 by verifying NativeWind styles work in App.tsx. Replaced StyleSheet with Tailwind className utilities: a brand-orange Baret badge, confirmation text, and a Phase 2 Day 7 status line. This smoke test confirms the NativeWind + Metro + Babel pipeline is working. Marked Day 7 as completed in implementation_plan.md. Updated Phase 2 progress to 20% (1\/5 days) and overall project progress to 35% (7\/20 days). Updated README status for the upcoming Day 8 Supabase integration.<\/li><\/ol>\n\n--- DAY 7 (2026-07-21) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Bugün uygulamayı Supabase backend’e bağlamak için client tarafını kurdum. Önce @supabase\/supabase-js paketini ve React Native ortamında URL desteği için gerekli polyfill’i ekledim. Ardından src\/services\/supabase.ts dosyasında tek bir paylaşılan Supabase client oluşturdum; bu client ortam değişkenlerinden proje URL’sini ve anon key’i okuyor. Gerçek anahtarların repoya girmemesi için .env.example şablonunu hazırladım ve .gitignore içine .env ekledim.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Veritabanı şemasıyla uyumu sağlamak için database.sql dosyasındaki yapıları TypeScript’e taşıdım. user_role, order_status ve delivery_option ENUM’larını tip olarak tanımladım; users, stores, products, orders ve reviews tabloları için interface’ler yazdım. Ayrıca UI’da kullanılmak üzere ENUM değerlerinin Türkçe etiketlerini src\/constants\/enums.ts içine ekledim. Client’ı bu Database tipiyle typed hale getirdim; böylece sonraki sorgular şemayla tip güvenli çalışacak.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Son olarak README’ye Supabase kurulum adımlarını ekledim: .env doldurma, SQL Editor’de database.sql çalıştırma ve uygulama tarafındaki ilgili dosyaların ne işe yaradığı. Bu sayede hem ben hem de inceleyen kişi şemanın nasıl uygulanacağını net takip edebiliyor.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>[10:15]<\/strong> (9dbcac5<\/em>) feat: add Supabase client and environment template Started Phase 2 Day 8 by wiring the Supabase backend client into the Expo app. Installed @supabase\/supabase-js and react-native-url-polyfill. Added src\/services\/supabase.ts as the shared client instance, reading EXPO_PUBLIC_SUPABASE_URL and EXPO_PUBLIC_SUPABASE_ANON_KEY. Added .env.example as a safe template and updated .gitignore so real .env secrets are never committed. Marked Day 8 as in progress in implementation_plan.md.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. <\/span>[14:24]<\/strong> (d1f9e04<\/em>) feat: add TypeScript types and enums matching database schema Mapped the Phase 1 database.sql schema into TypeScript for Day 8. Added UserRole, OrderStatus, and DeliveryOption enums plus User, Store, Product, Order, and Review interfaces in src\/types\/database.ts. Added Turkish UI labels in src\/constants\/enums.ts. Wired the Supabase client with createClient Database so future queries are type-safe against the schema.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3. <\/span>[17:59]<\/strong> (1cd6733<\/em>) docs: add Supabase setup guide and complete Day 8 Finalized Phase 2 Day 8 with setup documentation for reviewers and future work. Added a README Supabase setup section covering .env configuration, applying database.sql in the SQL Editor, and the app-side mapping files (supabase.ts, database types, enum constants). Marked Day 8 as completed in implementation_plan.md. Updated Phase 2 progress to 40% (2\/5 days) and overall progress to 40% (8\/20 days).<\/li><\/ol>\n\n--- DAY 8 (2026-07-22) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Bugün veritabanı güvenlik katmanını ve uygulama navigasyon iskeletini ele aldım.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Önce database.sql içindeki trigger ve yardımcı fonksiyonları inceledim. set_updated_at ile tablolarda otomatik zaman damgası, handle_new_user ile Auth kaydından sonra public.users satırının oluşması, is_admin ve is_store_owner ile RLS kontrollerinin nasıl çalıştığını dokümante ettim. Ardından users, stores, products, orders ve reviews tablolarındaki Row Level Security politikalarını tablo tablo yazdım: kim neyi okuyabilir\/yazabilir, onaysız mağazanın halka kapalı olması, stok kontrolü, yalnızca pending siparişin iptali ve yalnızca delivered siparişe yorum gibi iş kurallarını netleştirdim. Sonuna da SQL Editor’de doğrulama için bir kontrol listesi ekledim.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Aynı gün React Navigation tarafına geçtim. Gerekli paketleri kurdum, Auth \/ Alıcı \/ Satıcı \/ Admin için typed param listeleri ve ortak bir PlaceholderScreen bileşeni hazırladım. Her rol için boş ekran taslakları ve navigator’ları oluşturdum; Auth stack, alıcı\/satıcı bottom tab’leri ve admin stack’i plana uygun şekilde bağlandı. App.tsx’i RootNavigator’a bağladım; uygulama Auth ekranından açılıyor. Oturum ve role göre otomatik yönlendirme bir sonraki işte yapılacak.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>[10:13]<\/strong> (35e6700<\/em>) docs: document database triggers and helper functions Started Day 9 by documenting the security layer defined in database.sql. Added docs\/rls-and-triggers.md covering set_updated_at triggers on all core tables, the handle_new_user Auth bridge (including buyer\/seller-only role rules), and the is_admin \/ is_store_owner helpers used by RLS. Linked the doc from README and marked Day 9 as in progress in implementation_plan.md.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. <\/span>[10:24]<\/strong> (002ae80<\/em>) docs: document RLS policies for users stores and products Extended docs\/rls-and-triggers.md with policy-by-policy tables for users, stores, and products. Documented who can SELECT\/INSERT\/UPDATE\/DELETE on each table, including public visibility rules for approved stores and active products, seller ownership checks via is_store_owner, and the restriction that users cannot change their own role. Orders and reviews policies remain for the next commit.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. <\/span>[10:26]<\/strong> (6a02bf0<\/em>) docs: complete RLS reference for orders and reviews Finished Day 9 by documenting orders and reviews RLS policies in docs\/rls-and-triggers.md. Covered buyer\/seller\/admin access rules, stock checks on insert, pending-only buyer cancellation, and delivered-only review creation. Added a verification checklist for SQL Editor testing. Marked Day 9 as completed and updated Phase 2 progress to 60% (3\/5 packages).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. <\/span>[13:56]<\/strong> (cec2c91<\/em>) feat: install React Navigation and add navigation types Started Day 10 by installing React Navigation packages and shared scaffolding. Installed @react-navigation\/native, native-stack, bottom-tabs, and react-native-screens. Added typed param lists for Auth, Buyer, Seller, Admin, and Root navigators, plus a reusable PlaceholderScreen component.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. <\/span>[15:53]<\/strong> (af8a21e<\/em>) feat: add placeholder screens and role navigators Added empty screen stubs for Auth, Buyer, Seller, and Admin flows, plus their navigators. Auth uses a native stack (Login, Register, RoleSelect). Buyer and Seller use bottom tabs matching the planned IA. Admin uses a native stack for approvals, user management, and stats. Screens are placeholders only; Auth logic comes in Day 11.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. <\/span>[18:37]<\/strong> (207768b<\/em>) feat: wire RootNavigator and complete Day 10 Connected App.tsx to RootNavigator with Auth as the default entry stack. Buyer, Seller, and Admin stacks are registered for Day 11 role-based switching. Marked Day 10 as completed and updated Phase 2 progress to 80% (4\/5 packages).<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>\n\n--- DAY 9 (2026-07-23) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Bugün Baret projesinde 11. kısım kapsamında Supabase Auth altyapısını tamamladım; AuthContext ile oturum yönetimini ve AsyncStorage üzerinden session kalıcılığını kurdum, Giriş \/ Rol Seçimi \/ Kayıt ekranlarını buyer ve seller metadata ile bağladım ve RootNavigator’ı kullanıcı rolüne göre Auth, alıcı, satıcı ve admin akışlarına yönlendirecek şekilde güncelledim. Aynı gün 12. kısımda satıcı tarafında mağaza oluşturma ve güncelleme formunu onay durumu ile birlikte hayata geçirdim, ürün listeleme ile ekleme–düzenleme–silme CRUD ekranlarını ve ilgili servis katmanını bağladım; Expo Go sürüm uyumsuzluğu ve ortam değişkeni sorunlarını gidererek uygulamayı telefonda çalıştırdım, auth akışının cihaz ekran görüntülerini repoya ekledim ve ürün görseli yükleme işini bilerek sonraki kısma bıraktım.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>[11:42]<\/strong> (a9204ca<\/em>) feat: add AuthContext with Supabase session persistence Started Day 11 by wiring the authentication state layer. Installed AsyncStorage and configured the Supabase client to persist and refresh sessions. Added AuthContext with session listening, public.users profile sync, and signIn\/signUp\/signOut helpers (buyer\/seller metadata for signUp). Wrapped the app with AuthProvider and marked Day 11 as in progress.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. <\/span>[13:15]<\/strong> (1979e57<\/em>) feat: build Login Register and role select screens Implemented the Day 11 Auth UI flow on top of AuthContext. LoginScreen signs in with email\/password. RoleSelectScreen lets users choose buyer or seller. RegisterScreen collects name, email, and password, then calls signUp with the selected role metadata for the handle_new_user trigger.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3. <\/span>[14:13]<\/strong> (98f3c23<\/em>) feat: route by auth role and complete Day 11 Finished Phase 2 Day 11 by connecting navigation to AuthContext. RootNavigator now shows a loading state, then Auth when logged out, or Buyer\/Seller\/Admin stacks based on public.users.role. Added sign-out actions on buyer Profile and seller Store Settings. Marked Day 11 and Phase 2 as completed (11\/20 days).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4. <\/span>[15:19]<\/strong> (9ca4c06<\/em>) feat: add seller store profile form and fix babel-preset-expo Started Day 12 with the seller store create\/update flow and fixed local Expo startup. Added stores service helpers and a full StoreSettingsScreen form with approval status. Installed babel-preset-expo so Metro can transform the NativeWind Babel config. Marked Day 12 as in progress.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          5. <\/span>[15:35]<\/strong> (49a722b<\/em>) feat: add seller product list and CRUD forms Completed Day 12 seller product management on top of the store profile. Added products service (list\/create\/update\/delete), a Products stack navigator, ProductListScreen, and ProductFormScreen with price, stock, delivery options, and active toggle. Sellers must create a store before adding products. Marked Day 12 as completed.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          6. <\/span>[16:08]<\/strong> (dac4fbe<\/em>) docs: add device screenshots for auth flow proof<\/li><\/ol>\n\n--- DAY 10 (2026-07-24) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Bugün Baret projesinde 13. kısım kapsamında Supabase Storage entegrasyonunu ve ürün görseli yükleme akışını tamamladım. Sabah product-images bucket kurulum dokümanını ve storage servisini (uploadProductImage, public URL) ekledim; expo-image-picker bağımlılığını kurdum. Öğleden sonra satıcı ürün formuna galeriden görsel seçimi ve önizlemeyi bağladım, kayıttan sonra Storage’a yükleyip products.image_url alanına yazacak şekilde products servisini güncelledim ve ürün listesinde thumbnail gösterimini ekledim. Android’de galeri URI’lerinin fetch ile okunamaması nedeniyle “görsel okunamadı” hatasını tespit ettim; expo-file-system ve base64-arraybuffer ile dosyayı cache üzerinden okuyan düzeltmeyi yaptım. Satıcı hesabıyla giriş yapıp mağaza oluşturma ve ürün listesi akışını telefonda doğruladım, ürün listesi ekran görüntüsünü assets\/screenshots altına ekleyerek README ve storage dokümanını güncelledim. 13. kısım kod ve dokümantasyon olarak kapatıldı; alıcı ana sayfa ürün akışı 14. kısma bırakıldı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>[10:37]<\/strong> (4de3442<\/em>) feat: add product image storage service and bucket setup docs<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2. <\/span>[13:44]<\/strong> (464ae62<\/em>) feat: wire product image picker upload and list thumbnails<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3. <\/span>[13:46]<\/strong> (512421d<\/em>) docs: complete Day 13 storage integration in plan and README<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            4. <\/span>[15:44]<\/strong> (595c43b<\/em>) fix: read product images via FileSystem for Android gallery URIs<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            5. <\/span>[16:54]<\/strong> (94bf10d<\/em>) docs: add seller product list screenshot and storage Android notes<\/li><\/ol>\n\n--- DAY 11 (2026-07-27) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              27 Temmuz 2026 — Faz 3 Gün 13 kapanışı + Gün 14 (Alıcı ana sayfa katalog ve filtreler)<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Bugün Baret’te önce Gün 13 (Supabase Storage \/ ürün görseli) PR’ının main’e merge sürecini takip ettim; ardından Faz 3’ün sıradaki paketi olan Gün 14’e geçtim: alıcı Ana Sayfa’daki placeholder’ı kaldırıp onaylı mağazaların aktif ürünlerini gösteren canlı katalog akışını kodladım.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Gün 14 kapsamında catalog servisini yazdım (yalnızca is_approved = true mağazalar + aktif ürünler). Ana Sayfa’ya arama kutusu, kategori chip’leri, şehir ve teslimat filtreleri ile ürün kartları (görsel, fiyat, mağaza, stok) ekledim. Öğleden sonra filtreleri genişlettim: ilçe, min\/max fiyat, filtreleri temizle, pull-to-refresh, daha anlaşılır boş durum metinleri ve mağaza konumu ile teslimat seçeneklerini gösteren CatalogProductCard bileşeni.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Cihaz testinde ürün kaydı başarılı olsa da görsel yüklemede “Bucket not found” ve ardından Storage RLS (row-level security) hatalarıyla karşılaştım; bu yüzden ürün listede “görsel yok” görünüp kullanıcıya tam kayıt hatası gibi yansıyordu. product-images public bucket’ını oluşturdum, Storage policy’lerini store_id\/% yolu ile düzelttim (geliştirme için geçici authenticated INSERT policy), ProductForm uyarılarını “ürün kaydedildi ama görsel yüklenemedi” diye netleştirdim ve storage-setup dokümanını güncelledim.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>Gün sonunda alıcı filtre\/katalog ekran görüntülerini assets\/screenshots altına ekleyip README ve implementation_plan’da Gün 14’ü tamamlandı işaretledim; Day 14 PR’ı (#32) main’e merge edildi. Sonraki paket Gün 15 (ürün detay + sepet \/ CartContext) olarak planlandı.<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>[10:27]<\/strong> (57d4f97<\/em>) feat: add buyer home catalog with search and filters Started Day 14 by replacing the buyer Home placeholder with a live product catalog. Added catalog service that lists active products from approved stores, with search, city, delivery-option, and category-chip filters. HomeScreen now shows product cards (image, price, store, stock). Marked Day 14 as in progress in implementation_plan.md.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. <\/span>[12:54]<\/strong> (986c192<\/em>) feat: extend buyer catalog filters and product cards Continued Day 14 by polishing the buyer home catalog experience. Added district and min\/max price filters, a clear-filters action, pull-to-refresh, richer empty states, and a reusable CatalogProductCard that shows store location and delivery options. Updated the Day 14 progress note in implementation_plan.md.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. <\/span>[16:43]<\/strong> (f8fe4a2<\/em>) Merge branch 'main' of https:\/\/github.com\/Faruk-T\/baret into day-14-buyer-home-catalog<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. <\/span>[17:56]<\/strong> (93ed966<\/em>) docs: close Day 14 with storage RLS fixes and buyer filter proof Wrapped up Day 14 after fixing product-image upload failures and documenting the buyer catalog filters. During device testing we hit Bucket not found (missing product-images bucket), then new row violates row-level security policy on Storage after the product INSERT already succeeded — so products appeared in the list without images and the alert looked like a full save failure. Fixed by creating the public bucket, replacing foldername policies with LIKE store_id\/% policies (plus a temporary authenticated INSERT policy for dev), clarifying ProductForm alerts to say product saved but image failed, and disabling upload upsert. Also documented buyer Home filters (search, category chips, city\/district, price range, delivery) with screenshots and marked Day 14 complete.<\/li><\/ol>\n\n--- DAY 12 (2026-07-28) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Bugün Baret projesinde Faz 3 kapsamındaki Gün 15 paketini tamamladım. Amaç, alıcı tarafında ürün detay ekranını ve sepet state yönetimini çalışır hale getirmekti; sipariş oluşturma (checkout) bilinçli olarak bir sonraki güne bırakıldı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Önce day-15-product-detail-cart branch’inde CartContext katmanını ekledim. Sepete ürün ekleme\/çıkarma, adet artırma-azaltma, stok üst sınırı kontrolü ve tek mağaza kuralı (sepette bir mağazanın ürünü varken başka mağazadan ekleme uyarısı) burada toplandı. Ardından Ana Sayfa’dan ürün kartına tıklayınca açılan ProductDetailScreen üzerinde fiyat, stok, teslimat seçenekleri, adet seçici, ara toplam ve “Sepete Ekle” butonunu bağladım. Sepet sekmesinde badge (adet) ve toplam tutar canlı güncelleniyor.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  İkinci aşamada sepeti yalnızca bellekten yönetmek yerine AsyncStorage ile cihazda kalıcı hale getirdim; uygulama kapanıp açılınca sepet korunuyor. Detay ekranında stok yenileme, sepetteki mevcut adet önizlemesi ve sepet ekranında satır toplamı, sepeti temizleme onayı ile boş sepetten ana sayfaya dönüş CTA’sı eklendi. Checkout butonu \/ sipariş kaydı yazılmadı; ekranda “Sipariş Gün 16’da” notu bırakıldı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Test sırasında satıcı panelinde ürünler görünürken alıcı Ana Sayfa’da “0 ürün \/ onaylı mağazalarda eşleşen ürün yok” mesajı alıyordum. İncelemede kök nedenin hata değil iş kuralı olduğu anlaşıldı: mağaza durumu “Onay bekliyor” (is_approved = false) olduğu için katalog sorgusu ve RLS yalnızca onaylı mağaza ürünlerini gösteriyor. Admin onay ekranı planda Gün 17’de olduğundan demo için Supabase SQL Editor’da ilgili mağazayı is_approved = true yaptım. Onay sonrası alıcıda 5 ürün listelendi; ürün detayından sepete ekleme diyaloğu, sepet badge’i ve satır\/toplam hesapları doğrulandı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Gün sonunda Ümit Bey’e kanıt olması için Expo Go ekran görüntülerini assets\/screenshots\/ altına ekledim (onaylı katalog, ürün detay, sepete eklendi diyaloğu, sepet, SQL onay). README.md ve implementation_plan.md içinde Gün 15’i tamamlandı olarak işaretledim. Pull request açıldı: başlık\/özet, test planı ve reviewer notları (onaysız mağaza görünmez; checkout bu PR’da yok) yazıldı. Görsel redesign \/ tab ikonları bilinçli ertelendi; asıl polish için daha uygun zaman checkout sonrası veya Gün 18 olarak belirlendi.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>[13:03]<\/strong> (7c1c96f<\/em>) feat: add CartContext and product detail with add-to-cart Started Day 15 by wiring buyer product detail and in-memory cart state. Added CartContext with single-store cart rule and stock checks, ProductDetailScreen with quantity stepper, Home stack navigation into detail, and a live Cart tab with badge\/total. Marked Day 15 as in progress; checkout stays Day 16.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>[16:48]<\/strong> (a842c7a<\/em>) feat: persist cart and polish product detail cart UX Continued Day 15 by hardening buyer cart behavior beyond the first add-to-cart pass. Persisted cart items with AsyncStorage, added CartStoreConflictError with a clear-and-add flow for different stores, refreshed product stock on focus, showed in-cart quantity and line previews on detail, and polished CartScreen with confirm-clear, line totals, and a CTA back to Home.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  3. <\/span>[17:30]<\/strong> (6d50696<\/em>) docs: close Day 15 with detail, cart, and approval proof screenshots Mark Day 15 complete and attach Expo Go evidence for Umit review: approved buyer catalog, product detail, add-to-cart dialog, cart totals, and manual store approve SQL. Checkout remains Day 16. Co-authored-by: Cursor <\/li><\/ol>\n\n--- DAY 13 (2026-07-29) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Bugün Baret projesinde Faz 3 kapsamındaki Gün 15 paketini tamamladım. Amaç, alıcı tarafında ürün detay ekranını ve sepet state yönetimini çalışır hale getirmekti; sipariş oluşturma (checkout) bilinçli olarak bir sonraki güne bırakıldı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Önce day-15-product-detail-cart branch’inde CartContext katmanını ekledim. Sepete ürün ekleme\/çıkarma, adet artırma-azaltma, stok üst sınırı kontrolü ve tek mağaza kuralı (sepette bir mağazanın ürünü varken başka mağazadan ekleme uyarısı) burada toplandı. Ardından Ana Sayfa’dan ürün kartına tıklayınca açılan ProductDetailScreen üzerinde fiyat, stok, teslimat seçenekleri, adet seçici, ara toplam ve “Sepete Ekle” butonunu bağladım. Sepet sekmesinde badge (adet) ve toplam tutar canlı güncelleniyor.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    İkinci aşamada sepeti yalnızca bellekten yönetmek yerine AsyncStorage ile cihazda kalıcı hale getirdim; uygulama kapanıp açılınca sepet korunuyor. Detay ekranında stok yenileme, sepetteki mevcut adet önizlemesi ve sepet ekranında satır toplamı, sepeti temizleme onayı ile boş sepetten ana sayfaya dönüş CTA’sı eklendi. Checkout butonu \/ sipariş kaydı yazılmadı; ekranda “Sipariş Gün 16’da” notu bırakıldı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Test sırasında satıcı panelinde ürünler görünürken alıcı Ana Sayfa’da “0 ürün \/ onaylı mağazalarda eşleşen ürün yok” mesajı alıyordum. İncelemede kök nedenin hata değil iş kuralı olduğu anlaşıldı: mağaza durumu “Onay bekliyor” (is_approved = false) olduğu için katalog sorgusu ve RLS yalnızca onaylı mağaza ürünlerini gösteriyor. Admin onay ekranı planda Gün 17’de olduğundan demo için Supabase SQL Editor’da ilgili mağazayı is_approved = true yaptım. Onay sonrası alıcıda 5 ürün listelendi; ürün detayından sepete ekleme diyaloğu, sepet badge’i ve satır\/toplam hesapları doğrulandı.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Gün sonunda Ümit Bey’e kanıt olması için Expo Go ekran görüntülerini assets\/screenshots\/ altına ekledim (onaylı katalog, ürün detay, sepete eklendi diyaloğu, sepet, SQL onay). README.md ve implementation_plan.md içinde Gün 15’i tamamlandı olarak işaretledim. Pull request açıldı: başlık\/özet, test planı ve reviewer notları (onaysız mağaza görünmez; checkout bu PR’da yok) yazıldı. Görsel redesign \/ tab ikonları bilinçli ertelendi; asıl polish için daha uygun zaman checkout sonrası veya Gün 18 olarak belirlendi.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <\/span>[11:00]<\/strong> (5679bfb<\/em>) feat: add orders service and stock decrement SQL Day 16 foundation: createOrdersFromCart (one orders row per cart line), buyer\/seller list helpers, cancel and status updates. Document SECURITY DEFINER triggers for stock sync.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2. <\/span>[11:36]<\/strong> (1c6f135<\/em>) feat: enrich admin home with logout and store filters<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    3. <\/span>[11:41]<\/strong> (f271a11<\/em>) docs: add admin panel proof screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    4. <\/span>[12:24]<\/strong> (7476cc5<\/em>) feat: add checkout flow from cart Cart stack with CheckoutScreen: delivery chips, address\/phone, place order via orders service, clear cart on success. Siparişe geç CTA on CartScreen.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    5. <\/span>[15:38]<\/strong> (c89de48<\/em>) feat: order lists and admin store approval Buyer Siparişlerim with cancel-pending; seller status advance pending→delivered; admin SellerApprovals approve\/deactivate pending stores.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    6. <\/span>[15:42]<\/strong> (7df66d6<\/em>) feat: add tab bar Ionicons and brand tint<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    7. <\/span>[16:03]<\/strong> (8107966<\/em>) docs: close Day 16 with checkout and order status proof<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    8. <\/span>[19:33]<\/strong> (538b93b<\/em>) feat: add Day 17 reviews with proof screenshots<\/li><\/ol>\n\n--- DAY 14 (2026-07-30) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Bugün Baret pazaryeri uygulamasında hem kritik özellik tamamlamaları hem de yarınki canlı demoya hazırlık yaptım. Gün sonunda day-18-19-polish-docs branch’ini remote’a push edip main üzerine pull request açtım.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. Platform sızıntısını (anti-disintermediation) azaltma<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Alıcıların satıcıyla uygulamayı bypass edip WhatsApp\/telefon üzerinden anlaşmasını zorlaştırmak için iletişim bilgisini kapattım:<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Katalog ve ürün detayda mağaza telefonu, e-posta ve tam adres gösterilmiyor; haritada aç butonu kaldırıldı (mesafe bilgisi kalabilir).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Sipariş satıcı tarafından “Hazırlanıyor” ve sonrasına geçince alıcıya güvenli RPC (get_order_store_contact) ile iletişim açılıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Yorumlarda telefon \/ WhatsApp benzeri ifadeleri süzmek için contactFilter yardımcı fonksiyonu eklendi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Alıcı “Şikayet et” ile platform_reports kaydı oluşturabiliyor; admin tarafında rapor ekranı var.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Platformda kalan satıcıları ödüllendirmek için giriş komisyonu \/ yüksek puan indirimi ayarları (anti-leakage SQL + komisyon ekranı) bağlandı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SQL: docs\/anti-leakage-setup.sql<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. Sepet ekranı hatası<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Sepet kartında ürün görseli görünüyor ama isim, mağaza ve fiyat satırı kayboluyordu (flex layout çökmesi). CartScreen içinde içerik kolonuna flex: 1 ve minWidth: 0 vererek satır detaylarını geri getirdim.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3. Teslim \/ gel-al onay kodu<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Sipariş akışını güçlendirdim:<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      pending → preparing → shipped → delivered<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      shipped olunca alıcıya 6 haneli pickup_code üretiliyor; alıcı “Siparişlerim”de büyük kodu görüyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Satıcı tek tıkla “Teslim Edildi” yapamıyor; alıcının kodunu girip confirm_order_pickup RPC ile doğruluyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Satıcı listesinde kod istemci tarafında gizleniyor (sadece alıcı görür).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Durum etiketi: “Hazır \/ Yolda”<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SQL: docs\/pickup-code-setup.sql (+ database.sql senkronu)<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      4. TypeScript \/ Supabase tip hataları<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Servis katmanında (users, stores, products, orders, reviews, reports, licenses, commission, admin) yaygın never tip hataları vardı. Kök neden: Database tipinde Relationships \/ Views eksikti ve satır modelleri interface olduğu için Supabase’in Record<string, unknown> şartını karşılamıyordu. Satır tiplerini type alias’a çevirdim, şemayı tamamladım; update çağrılarını doğru Update tipiyle hizaladım. Ayrıca *.css side-effect import için tip bildirimi ekledim. tsc temizlendi.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      5. Kanıt ekran görüntüleri ve PR<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Canlı akıştan 10 screenshot aldım ve assets\/screenshots\/ altına anlamlı isimlerle ekledim (mağaza ayarları\/GPS, lisans, alıcı teslim kodu, satıcı kod doğrulama, özet KPI, değerlendirme, profil düzenleme, admin lisans anahtarları, komisyon, sepet).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Branch’i origin\/day-18-19-polish-docs olarak push ettim; GitHub’da PR açtım. Başlık\/özet: Day 18–19 polish, anti-leakage, pickup codes; test planında SQL sırası ve rol bazlı smoke test maddeleri yer alıyor.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <\/span>[10:15]<\/strong> (b08428d<\/em>) fix: soft-delete products and share format helpers<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. <\/span>[11:23]<\/strong> (50625cf<\/em>) feat: add admin stats user list and profile polish<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3. <\/span>[11:23]<\/strong> (2920b5a<\/em>) docs: close Day 18-19 with soft-delete proof screenshots<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      4. <\/span>[12:23]<\/strong> (08d5532<\/em>) feat: add password visibility toggle on auth screens Login and register previously used secureTextEntry with no way to verify typed passwords. Added a reusable PasswordField with an eye icon toggle so buyers and sellers can show or hide the password while signing in or creating an account.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      5. <\/span>[13:46]<\/strong> (faf95d0<\/em>) feat: warn sellers when product stock is low Active products at or below 10 units now surface a dashboard alert with the lowest-stock items and a shortcut to the product list. Product cards also get a low-stock badge and amber highlight so sellers can restock before listings run out.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      6. <\/span>[16:20]<\/strong> (3f4868a<\/em>) feat: let buyers edit name and phone on profile Buyers could view account info but not update it. Added users.updateProfile wiring through AuthContext and an edit mode on ProfileScreen for full name and phone, while keeping email read-only since it is the auth login identity.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      7. <\/span>[17:12]<\/strong> (d93c297<\/em>) feat: show store distance and open directions in Maps Sellers can capture the phone GPS on store settings and persist latitude\/longitude. Buyers on product detail see haversine distance when location permission is granted and can open Apple Maps or Google Maps for turn-by-turn directions to the store.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      8. <\/span>[17:57]<\/strong> (a421e98<\/em>) feat: add seller license keys with admin issuance and redeem Admins can generate one-time duration codes and share them with sellers. Sellers redeem a code on store settings to set or extend license_expires_at. Dashboard shows expiry warnings and new product creation is blocked without a valid license.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      9. <\/span>[18:19]<\/strong> (e0a06fd<\/em>) feat: add platform commission rate and per-order snapshots Admins can set a global commission percentage under platform_settings. New orders create an order_commissions row with rate, platform cut, and seller net; cancellations remove the row. Seller order cards show the breakdown and the admin commission screen summarizes revenue.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      10. <\/span>[18:24]<\/strong> (29b7eb6<\/em>) feat: polish buyer\/seller UI and add pending order tab badge Sellers see a live badge for pending orders on the Orders tab, plus a NEW chip on those cards. Light visual refresh covers catalog cards, home filters, login\/role select branding, and warmer stone\/orange surfaces without a full redesign.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      11. <\/span>[18:35]<\/strong> (c7b1610<\/em>) feat: redesign app UI with brand system and status chips Introduced a shared Baret visual kit (gradient BrandHero, cards, buttons, empty states, menu tiles) and applied it across auth, buyer, seller, and admin flows. Added colored order-status chips and seller dashboard KPI\/quick actions so the marketplace feels more polished ahead of the live demo.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      12. <\/span>[18:52]<\/strong> (503bc6e<\/em>) feat: reduce platform leakage with gated contact and incentives Hide store phone\/address\/maps on the public catalog until the seller accepts an order, then unlock contact via a secure RPC. Sanitize phone\/WhatsApp leaks in reviews, add buyer reports for admins, and reward in-app sellers with intro and high-rating commission discounts.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      13. <\/span>[19:06]<\/strong> (5741ab6<\/em>) fix: restore cart line details next to product thumbnail Cart cards were collapsing the text column so only the image showed. Rebuild the row layout with an explicit flex child so name, store, price, quantity controls, and line total render again without exposing contact info. Co-authored-by: Cursor <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      14. <\/span>[19:08]<\/strong> (7bd3180<\/em>) feat: add pickup confirmation codes for in-store delivery When a seller marks an order ready (shipped), a 6-character code is generated for the buyer. The buyer shows the code at the store; the seller enters it in the app to mark the order delivered. Sellers cannot skip this step with a one-tap status change, and the code is hidden from the seller list so only the buyer screen reveals it. Co-authored-by: Cursor <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      15. <\/span>[19:35]<\/strong> (d5d6984<\/em>) fix: restore Supabase Database typing for service queries Convert row models to type aliases and complete the GenericSchema shape so insert\/update\/RPC stop collapsing to never.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      16. <\/span>[20:22]<\/strong> (0d8cb5e<\/em>) docs: add demo screenshots for seller, buyer, and admin flows Capture live proof of store settings, pickup codes, commission, licenses, profile edit, and cart for the day-20 demo \/ PR.<\/li><\/ol>\n\n--- DAY 15 (2026-07-31) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Bugün Baret projesinin canlı teslim ve kapanış günüydü. Uygulamayı Expo Go QR’sız kullanılabilecek şekilde EAS ile Android APK olarak build aldım (preview profili, com.baret.app). Supabase şema kontrollerini yaptım, test verilerini temizleyip demo hesaplarını yeniden kurdum ve alıcı–satıcı–admin senaryolarını uçtan uca doğruladım (sipariş, teslim kodu, iletişim kilidi, komisyon, lisans).<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Kullanılabilirlik tarafında gerçek kullanıcı testi yaptım: babam checkout’ta klavye yüzünden alt butonu göremediği için formu yeniden düzenledim — adres\/telefon zorunlu kaldı, “Siparişi oluştur” klavyenin üstünde sabit duruyor. Android alt tab’ların sistem navigasyonuna yapışması sorununu safe-area + minimum inset ile giderdim; uygulama ikonunu marka logosuna çektim. Komisyonu tek düz oran yerine sipariş tutarına göre dilimli hale getirdim (küçük\/orta\/büyük + minimum taban) ve admin komisyon ekranını sadeleştirip canlı örnek hesaplayıcı ekledim.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        APK linkini Ümit Bey’e ilettim; demo hesaplarla test etti, olumlu geri bildirim verdi. Play Store’a çıkış için Google Play Console daveti e-posta adresime geldi. Sonraki işler olarak proje blog yazısı ve uygulama landing page planlandı. Gün sonunda branch’teki commit’ler push’landı; proje MVP olarak demo\/APK seviyesinde teslim edildi.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <\/span>[10:24]<\/strong> (a317f62<\/em>) fix: sync database.sql with anti-leakage schema for day-20 go-live Mirror platform_reports, contact RPC, and intro commission incentives so the canonical schema matches production docs.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. <\/span>[11:40]<\/strong> (9392b8e<\/em>) fix: lift tab bar above system nav and set Baret brand app icon Use safe-area insets on buyer\/seller tabs and replace launcher icons with the hard-hat brand mark for the standalone APK.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. <\/span>[12:12]<\/strong> (ae250a6<\/em>) fix: raise Android tab bar clearance and resolve Expo doctor deps Force a minimum bottom inset so buyer\/seller tabs clear the system nav, and align Expo 57 peer\/package versions (font, worklets, screens).<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. <\/span>[13:23]<\/strong> (fc19fb2<\/em>) fix: point tsconfig extends at expo\/tsconfig.base.json Make the IDE\/TS server resolve the Expo base config after the SDK 57 package bump.<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. <\/span>[13:41]<\/strong> (d088afb<\/em>) feat: add order-amount commission tiers and redesign admin commission UI Replace the flat rate with small\/mid\/large amount bands plus a minimum cut, and give admins a clearer screen with live previews. Co-authored-by: Cursor <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. <\/span>[14:06]<\/strong> (18a4605<\/em>) fix: keep checkout address required and sticky submit above keyboard Always collect phone, address, and city so delivery has a destination, while the order button stays visible when the keyboard is open.<\/li><\/ol>\n\n--- DAY 16 (2026-08-03) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          day-21-esn-interest branch’i üzerinden go-live baseline’a ESN interest milestone commit’i atıldı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Mevcut monetizasyon ve operasyon katmanı gözden geçirildi:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Sipariş bazlı flat komisyon modeli<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Admin finans \/ tahsilat \/ mağaza sağlığı ekranları<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Satıcı sipariş, stok, lisans ve bildirim akışları<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Landing sayfası + APK indirme hattı<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Komisyon modelinin ileride operasyonel ve hukuki risk yaratabileceği değerlendirildi; alternatif olarak ürün kapasitesine göre aylık abonelik modeli konuşuldu.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Sonraki gün için yapılacaklar belirlendi:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Komisyon trigger’ının kapatılması<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Plan tablolarının tasarımı<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Admin atama + satıcı görünümü + landing güncellemesi<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Teknik \/ süreç notları<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Milestone commit’lerin branch isimlendirmesiyle (day-21, day-22…) takip edilmesi proje yönetimini kolaylaştırıyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Büyük model değişikliğine gitmeden önce mevcut sistemin “ne işe yarıyor \/ ne riskli” ayrımını yapmak şart.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Karşılaşılan durumlar<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Pazartesi daha çok planlama + durum değerlendirme günü olduğu için kod tarafında büyük feature commit’i yok; asıl uygulama Salı’ya bırakıldı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Sonuç<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ESN milestone kaydı tamamlandı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Salı için abonelik planı pivot’unun kapsamı netleşti.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <\/span>[20:31]<\/strong> (2c03de1<\/em>) chore: mark ESN interest milestone on go-live baseline Branch for today's ESN outreach follow-up from the hardened preview APK state. Co-authored-by: Cursor <\/li><\/ol>\n\n--- DAY 17 (2026-08-04) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Günün amacı<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Sipariş komisyonunu kaldırıp satıcıları Basic \/ Pro \/ Özel abonelik planlarına geçirmek; admin yönetimi, satıcı paneli, veritabanı kuralları ve web sitesini buna göre güncellemek; APK ile test edilebilir hale getirmek.<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1) Veritabanı \/ iş kuralları<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            docs\/seller-plans-setup.sql hazırlandı ve uygulandı:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            create_order_commission no-op yapıldı → yeni siparişlerde komisyon satırı oluşmuyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            seller_plans tablosu: plan kataloğu (basic \/ pro \/ custom).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            store_subscriptions tablosu: mağazanın aktif aboneliği, süre, özel kapasite\/fiyat override.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            RLS politikaları: admin yönetir, satıcı kendi aboneliğini görür.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            enforce_product_plan_limit trigger: aktif plan yoksa veya kapasite dolduysa ürün INSERT engellenir.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Seed fiyatlar önce geçici değerlerle açıldı, sonra iş kararına göre güncellendi:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Basic: 20 ürün · ₺4.000\/ay<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Pro: 100 ürün · ₺7.000\/ay<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Özel: kapasite + fiyat anlaşmalı<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Katalog görünürlüğü lisans\/onay ile kaldı; plan asıl olarak ürün ekleme kapasitesi için bağlandı (mevcut mağazaları aniden düşürmemek için).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2) Backend \/ service katmanı<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            src\/services\/plans.ts eklendi:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Plan listeleme \/ güncelleme<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Mağazaya abonelik atama \/ yenileme<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Aktif plan + ürün kullanımı (remainingSlots)<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Satıcı finans özeti (teslim geliri, açık ciro, plan gideri, tahmini net)<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            createProduct tarafına client kontrolü eklendi (aktif plan + kalan slot).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Database type’lara SellerPlan \/ StoreSubscription eklendi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3) Admin tarafı<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Satıcı planları ekranı: Basic\/Pro\/Özel kapasite ve aylık ücret düzenlenebiliyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Satıcı \/ mağaza detayında:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Plan seçimi (chip)<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Süre (ay)<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Özel plan için max ürün + aylık fiyat<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            “Planı uygula \/ yenile”<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Admin home’da eski komisyon KPI’ları arşiv olarak işaretlendi; yeni menü: Satıcı planları.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Takip bugün için satıcı detayından yapılıyor (hangi satıcı hangi planda).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            4) Satıcı tarafı<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Dashboard yeniden düzenlendi:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Bu ay gelir (teslim)<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Açık sipariş cirosu<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Plan gideri<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Tahmini net<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Plan adı, kullanım (x\/y ürün), kalan slot, bitiş tarihi, doluluk çubuğu<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Sipariş kartlarında “komisyon kesintisi” yerine abonelik modeli mesajı; eski komisyon kayıtları arşiv notuyla kalabilir.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Aktif plan yoksa \/ kapasite dolduysa yeni ürün eklenemiyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            5) Landing (web)<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #planlar bölümü eklendi (Basic \/ Pro \/ Özel kartları, güncel fiyatlar).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Komisyon odaklı metinler abonelik modeline çevrildi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Üstteki 3 hero görsel:<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            İlk hali fazla soluk\/buğulu kalmıştı → overlay ve düşük opacity kaldırıldı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Sırayla odak animasyonu eklendi (büyüme \/ öne gelme).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Vercel production deploy ile canlıya alındı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Yeni EAS preview APK linki landing’e bağlandı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            6) Build \/ test hazırlığı<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            EAS preview Android APK build alındı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Test için docs\/reset-buyers-sellers.sql güncellendi: alıcı\/satıcı silinirken store_subscriptions da temizleniyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            day-22-seller-plans branch’i oluşturuldu, commit’ler atıldı, remote’a push edildi, PR açıldı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Karşılaşılan sorunlar ve çözümler<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Landing’de değişiklik görünmüyordu: Dosya kaydı \/ commit canlı siteyi güncellemiyor; Vercel --prod deploy gerekti.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Hero görseller buğulu ve hareketsizdi: Opacity + güçlü fade overlay yüzünden; net opacity + sıralı focus animasyonu ile düzeltildi.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            git push upstream hatası: Branch ilk kez push edildiği için git push -u origin day-22-seller-plans kullanıldı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Plan fiyatları iş kararına göre değişti: Seed SQL + landing kartları birlikte güncellendi (20\/4000, 100\/7000).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Öğrenilenler<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Monetizasyon modeli değişince sadece UI yetmez; DB trigger, RLS, admin operasyon ve satıcı deneyimi birlikte güncellenmeli.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Kapasite limiti hem client’ta hem DB’de olmalı (güvenlik için DB asıl kapı).<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Marketing site ile app ayrı deploy zincirleri (Vercel \/ EAS); ikisini senkron tutmak şart.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Test reset script’leri yeni tablolar geldikçe güncellenmeli.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Gün sonu durumu<\/p>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Komisyon → abonelik geçişi kod ve SQL tarafında hazır.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Admin plan atayabiliyor, satıcı planını dashboard’da görebiliyor.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Landing ve APK güncel.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Sonraki adım: production SQL doğrulama, satıcılara plan atama, uçtan uca kayıt → ürün ekleme → sipariş testi.<\/p>\n" + }, + "Barış Paşa": { + "id": 32, + "email": "barispasa460@gmail.com", + "repo": "https:\/\/github.com\/baris8138\/UstaFlow_litte", + "github_username": "baris8138", + "total_entries": 8, + "commits_count": 0, + "commits_sample": [], + "full_text": "\n--- DAY 1 (2026-07-23) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Stajın birinci gününde, teknik servis ve saha ekiplerinin iş süreçlerini dijital ortamda yönetmesini sağlayacak UstaFlow Lite<\/strong> adlı web tabanlı projenin başlangıç çalışmaları gerçekleştirildi. Proje için GitHub üzerinde bir repository oluşturuldu ve dört haftalık geliştirme sürecinin takip edilebilmesi amacıyla GitHub Projects üzerinde Kanban panosu hazırlandı. Proje görevleri; Backlog, Ready, In Progress, In Review ve Done aşamalarına ayrıldı. Ayrıca dört haftalık çalışma sürecini temsil eden milestone’lar oluşturuldu.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            İlk geliştirme görevi GitHub Issue olarak tanımlandı ve bu issue’ya bağlı ayrı bir branch açıldı. Projenin başlangıç altyapısı Next.js, TypeScript, App Router ve Tailwind CSS<\/strong> kullanılarak oluşturuldu. Uygulamanın ana sayfası UstaFlow Lite projesini tanıtacak şekilde düzenlendi. Kod kalitesinin doğrulanması amacıyla ESLint ve production build kontrolleri çalıştırıldı ve işlemler başarıyla tamamlandı. Yapılan değişiklikler commit edilerek GitHub’a gönderildi, Pull Request oluşturuldu ve main branch’ine aktarıldı. Böylece issue, branch, commit ve Pull Request tabanlı profesyonel GitHub çalışma süreci uygulamalı olarak öğrenildi.<\/p>\n\n--- DAY 2 (2026-07-24) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Stajın ikinci gününde, UstaFlow Lite projesinin dört haftalık geliştirme sürecini ayrıntılı olarak açıklayan Implementation Plan<\/strong> dokümanı hazırlandı. Dokümanda projenin amacı, problem tanımı, kullanıcı rolleri, MVP kapsamı, kullanılacak teknolojiler ve sistem mimarisi açıklandı. Projenin frontend tarafında Next.js, TypeScript ve Tailwind CSS<\/strong>, sunucu tarafında Next.js Server Actions ve Route Handlers<\/strong>, veritabanı tarafında ise PostgreSQL ve Prisma ORM<\/strong> kullanılmasına karar verildi. Kimlik doğrulama işlemleri için Auth.js planlandı ve sistemin modüler monolit mimarisiyle geliştirilmesi kararlaştırıldı.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Geliştirme süreci; proje kurulumu, kimlik doğrulama, müşteri ve personel yönetimi, servis talebi yönetimi, teknik personel iş akışı, dashboard ve final testleri olmak üzere fazlara ayrıldı. Ayrıca test stratejisi, güvenlik kuralları, GitHub branch ve commit standartları, Definition of Ready, Definition of Done, risk yönetimi ve final teslim kriterleri dokümana eklendi. Hazırlanan IMPLEMENTATION_PLAN.md<\/code> dosyası ayrı bir dokümantasyon branch’i üzerinden repository’ye eklendi. Değişiklikler commit edilerek Pull Request hazırlığı tamamlandı ve öğretim elemanının incelemesine sunulacak şekilde yapılandırıldı.<\/p>\n\n--- DAY 3 (2026-07-27) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <\/span>[11:52]<\/strong> (41b7ea7<\/em>) Merge pull request #5 from baris8138\/chore\/4-configure-postgresql-prisma chore(database): configure PostgreSQL and Prisma<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2. <\/span>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3. <\/span>UstaFlow Lite projesinin PostgreSQL ve Prisma ORM altyapısı hazırlandı. Prisma bağımlılıkları projeye eklendi, PostgreSQL datasource ve schema.prisma<\/code> yapılandırıldı, prisma.config.ts<\/code> ile .env.example<\/code> dosyaları oluşturuldu ve güvenli bir Prisma Client bağlantısı geliştirildi. Prisma doğrulama, client generation, lint ve build kontrolleri başarıyla tamamlandı. Yapılan çalışmalar ayrı commitler hâlinde GitHub’a gönderildi ve Pull Request üzerinden incelemeye sunularak main<\/code> branch’ine aktarıldı.<\/li><\/ol>\n\n--- DAY 4 (2026-07-28) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <\/span>[18:03]<\/strong> (84cc453<\/em>) docs(brand): add UstaFlow Lite logo assets<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              2. <\/span>[18:19]<\/strong> (06dcb83<\/em>) docs(mockup): add login screen design<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              3. <\/span>[18:29]<\/strong> (e0e4c82<\/em>) docs(mockup): add admin dashboard design<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              4. <\/span>[18:37]<\/strong> (9aff6e7<\/em>) docs(mockup): add service request form design<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              5. <\/span>[19:01]<\/strong> (7d53c47<\/em>) feat(docs): add technician task mockup<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              6. <\/span>[19:30]<\/strong> (2df15d8<\/em>) docs(readme): document design assets and mockups<\/li><\/ol>


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                UstaFlow Lite projesinin görsel kimliği ve temel arayüz taslakları hazırlandı. Projeye yatay logo ve ikon dosyaları eklendi. Giriş ekranı, yönetici paneli, servis talebi oluşturma ekranı ve teknik personel görev ekranı için responsive HTML\/CSS mockup’ları geliştirildi. Hazırlanan tasarımlar düzenli klasör yapısına yerleştirildi ve README dosyasına mockup bağlantıları eklenerek dokümantasyon güncellendi. Çalışmalar ayrı commitler hâlinde GitHub’a gönderilerek Pull Request üzerinden incelemeye sunuldu.<\/p>\n\n--- DAY 5 (2026-07-29) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <\/span>[08:44]<\/strong> (66775b7<\/em>) feat(database): add user model and role structure<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. <\/span>[17:41]<\/strong> (bbd5471<\/em>) feat(database): add user model migration<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. <\/span>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. <\/span>Uygulamanın kullanıcı ve rol altyapısı üzerinde çalışıldı. Prisma şemasına User<\/code> modeli eklendi ve ADMIN<\/code> ile TECHNICIAN<\/code> rolleri enum yapısıyla tanımlandı. Kullanıcı adı, soyadı, benzersiz e-posta adresi, parola özeti, aktiflik durumu ve tarih alanları oluşturuldu. Yerel PostgreSQL kurulumu tamamlandı, UstaFlow’a özel veritabanı ve uygulama kullanıcısı hazırlandı. İlk kullanıcı migration’ı oluşturularak veritabanına uygulandı; Prisma Client, migration, lint ve production build kontrolleri başarıyla tamamlandı.<\/li><\/ol>\n\n--- DAY 6 (2026-07-30) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Git Commit Mesajları:<\/strong><\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <\/span>[16:35]<\/strong> (1b468e1<\/em>) chore(auth): install authentication dependencies<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. <\/span>[17:07]<\/strong> (03e51c2<\/em>) feat(auth): add password hashing service<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  3. <\/span>[17:13]<\/strong> (a0c735e<\/em>) feat(auth): add credentials validation schema<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  4. <\/span>[17:19]<\/strong> (f29a04a<\/em>) feat(auth): add user authentication service<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  5. <\/span>[17:29]<\/strong> (bcffb20<\/em>) feat(auth): configure credentials authentication<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  6. <\/span>[17:36]<\/strong> (4301d99<\/em>) docs(auth): document authentication environment variable<\/li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  7. <\/span>UstaFlow Lite projesinin kimlik doğrulama altyapısı geliştirildi. Auth.js, bcryptjs ve Zod bağımlılıkları kurularak parola hashleme\/doğrulama servisi, giriş bilgileri doğrulama şeması ve kullanıcı doğrulama servisi oluşturuldu. E-posta ve parola ile giriş yapısı Auth.js Credentials sağlayıcısına bağlandı; kullanıcı rolünün JWT ve oturum bilgisine aktarılması sağlandı. Gerekli ortam değişkenleri .env.example<\/code> dosyasında dokümante edildi ve TypeScript, lint ile production build kontrolleri başarıyla tamamlandı.<\/li><\/ol>\n\n--- DAY 7 (2026-07-31) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    UstaFlow Lite projesinde kimlik doğrulama altyapısının genel kontrollerini gerçekleştirdim. Açılan Pull Request ve reviewer süreçlerini takip ederek branch yapısını kontrol ettim. Sonraki geliştirme adımı olan gerçek giriş sayfası ve oturum yönlendirme akışı için teknik planlama yaptım.<\/p>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Bunu kutuya yazıp Deftere Kaydet<\/strong> diyebilirsin. Commit olmaması, o gün çalışma yapılmadığı anlamına gelmez.<\/p>\n\n--- DAY 8 (2026-08-03) ---\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    UstaFlow Lite projesinde güvenli çıkış işlemi ile ADMIN<\/code> ve TECHNICIAN<\/code> rollerine göre erişim kontrollerini tamamladım. Yetkisiz erişim, oturum yönlendirmesi ve korumalı sayfa testlerini gerçekleştirdim. Ardından müşteri yönetimi modülüne başlayarak Prisma şemasına Customer<\/code> modeli ve müşteri türlerini ekledim; migration işlemini uygulayıp TypeScript, lint ve production build kontrollerini başarıyla tamamladım.<\/p>\n" + } +} \ No newline at end of file diff --git a/scratch/run_approval.php b/scratch/run_approval.php new file mode 100644 index 0000000..3ca0e42 --- /dev/null +++ b/scratch/run_approval.php @@ -0,0 +1,73 @@ +make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); + +$interns = App\Models\CareerApplication::where(function($q) { + $q->where('type', 'internship')->orWhereHas('journalEntries'); +})->with(['journalEntries' => function($q) { + $q->orderBy('day_number', 'asc'); +}])->get(); + +$approvedCount = 0; +$report = []; + +foreach ($interns as $intern) { + $totalEntries = $intern->journalEntries->count(); + $filledEntries = 0; + $onTimeEntries = []; + $retroactiveEntries = []; + $newlyApproved = 0; + $alreadyApproved = 0; + + foreach ($intern->journalEntries as $entry) { + $hasContent = !empty(trim($entry->content ?? '')); + if ($hasContent) { + $filledEntries++; + if (!$entry->supervisor_approved) { + $entry->supervisor_approved = true; + if (empty($entry->supervisor_name)) { + $entry->supervisor_name = 'Yönetici Onayı'; + } + $entry->save(); + $newlyApproved++; + $approvedCount++; + } else { + $alreadyApproved++; + } + + if ($entry->is_retroactive) { + $retroactiveEntries[] = [ + 'day' => $entry->day_number, + 'date' => $entry->date, + 'content_snippet' => mb_substr(trim(preg_replace('/\s+/', ' ', strip_tags($entry->content))), 0, 60) + ]; + } else { + $onTimeEntries[] = [ + 'day' => $entry->day_number, + 'date' => $entry->date, + ]; + } + } + } + + $report[] = [ + 'id' => $intern->id, + 'name' => $intern->name, + 'email' => $intern->email, + 'github' => $intern->github_repo, + 'total_entries' => $totalEntries, + 'filled_entries' => $filledEntries, + 'already_approved' => $alreadyApproved, + 'newly_approved' => $newlyApproved, + 'on_time_count' => count($onTimeEntries), + 'retroactive_count' => count($retroactiveEntries), + 'on_time_days' => array_column($onTimeEntries, 'day'), + 'retroactive_days' => array_column($retroactiveEntries, 'day'), + 'retroactive_details' => $retroactiveEntries, + ]; +} + +file_put_contents(__DIR__ . '/approval_report.json', json_encode(['approved_total' => $approvedCount, 'interns' => $report], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); +echo "Processed " . count($interns) . " interns. Newly approved entries: " . $approvedCount . "\n"; diff --git a/scratch/view_report.php b/scratch/view_report.php new file mode 100644 index 0000000..51afcdd --- /dev/null +++ b/scratch/view_report.php @@ -0,0 +1,39 @@ +