========================================
NAME: Emre Satıl
Email: emresatil72@gmail.com
GitHub Repo: https://github.com/Emresatil/Recycle-Rush-VR
Start: 2026-07-01 | End: 2026-08-30
Total Journal Entries: 12
--- Date: 2026-07-01 | Day: 1 | Retroactive: NO | Approved: YES
1. Gün (01.07.2026) Çalışma RaporuBugü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.Repository Kurulumu: GitHub üzerinde projemizin tüm kodlarını barındıracak olan Recycle-Rush-VR deposunu (repository) oluşturdum. Projenin versiyon kontrolünü sağlıklı bir şekilde yönetmek için gerekli ayarları yaptım.Proje Planlaması (GDD ve Roadmap): Projenin anayasası niteliğinde olan implementation_plan.md 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.İş Yönetimi (Kanban): 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.Proje Fikri ve Hedef: 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.Kazanım: 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.
--- Date: 2026-07-02 | Day: 2 | Retroactive: NO | Approved: YES
2. Gün (02.07.2026) Çalışma RaporuBugü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.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.Ayrıca proje dokümantasyonunu düzenledim. docs klasörü içerisindeki implementation plan dosyasını kontrol ettim. docs/assets 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.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.
--- Date: 2026-07-03 | Day: 3 | Retroactive: NO | Approved: YES
3. Gün (03.07.2026) Çalışma RaporuBugü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 dizini altında Environment, Props ve Waste klasörlerini oluşturarak modelleri kullanım alanlarına göre kategorilere ayırdım.Environment klasörüne fabrika ortamında kullanılacak çevre, zemin, platform ve konveyör bant modellerini, Props klasörüne varil, palet, koli ve benzeri yardımcı nesneleri, Waste 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.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.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.Git Commit Mesajları:[02:49] (29347e7) Merge pull request #7 from Emresatil/feature/meta-quest-build-settings Configure Meta Quest Android build settings[10:25] (a9567a7) Merge branch 'main' into feature/unity-setup[10:38] (35dc9db) Merge pull request #6 from Emresatil/feature/unity-setup feat(core): configure XR Interaction Toolkit and OpenXR
--- Date: 2026-07-06 | Day: 4 | Retroactive: NO | Approved: YES
4. Gün (04.07.2026) Çalışma RaporuBugün oyunun ana sahnesi olan MainGame ü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ğı SpawnArea, atıkların oluşacağı WasteSpawner ve geri dönüşüm işleminin gerçekleştirileceği DropZone nesnelerini oluşturarak sahnede uygun konumlara yerleştirdim.Daha sonra VR altyapısını hazırlamak amacıyla XR Interaction Toolkit paketi içerisindeki Starter Assets paketini projeye kurdum. Kurulum tamamlandıktan sonra XR Origin 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.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.Git Commit Mesajları:[12:59] (26cda63) 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
--- Date: 2026-07-07 | Day: 5 | Retroactive: NO | Approved: YES
5. Gün (07.07.2026) Çalışma RaporuBugü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.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.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ı.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.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.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.Git Commit Mesajları:[12:12] (93a797a) 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.
--- Date: 2026-07-08 | Day: 6 | Retroactive: NO | Approved: YES
6. Gün (08.07.2026) Çalışma RaporuBugü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.Ç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.İ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 &gt; 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.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.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.Git Commit Mesajları:[12:05] (3f6a5c3) 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.[12:26] (137c54f) 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.
--- Date: 2026-07-09 | Day: 7 | Retroactive: NO | Approved: YES
7. Gün (09.07.2026) Çalışma RaporuBugü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.İ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.İ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.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.Git Commit Mesajları:[11:02] (c39b363) 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.[15:36] (85fa834) 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.[17:08] (1fc017c) 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.
--- Date: 2026-07-10 | Day: 8 | Retroactive: NO | Approved: YES
8. Gün (10.07.2026) Çalışma RaporuBugü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.&nbsp;İ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.&nbsp;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.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.&nbsp;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.Git Commit Mesajları:[11:03] (9ca67ef) 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.[14:18] (4c15f26) 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.[14:53] (e54341e) 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.[16:50] (c159a09) 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.
--- Date: 2026-07-13 | Day: 9 | Retroactive: NO | Approved: YES
9. Gün (13.07.2026) Çalışma RaporuBugü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&lt;int&gt;` (OnScoreChanged) event'ini yazdım.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.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.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.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.Git Commit Mesajları:[11:33] (6efd77a) 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.[17:43] (7970e85) 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.
--- Date: 2026-07-14 | Day: 10 | Retroactive: NO | Approved: YES
10. Gün (14.07.2026) Çalışma RaporuBugü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.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.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.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ı.Git Commit Mesajları:[11:31] (e04cba5) 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.[15:08] (b147259) 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.[17:38] (051740b) 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.
--- Date: 2026-07-15 | Day: 11 | Retroactive: YES | Approved: NO
11. Gün (16.07.2026) Çalışma RaporuBugü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.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.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.Ö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.Git Commit Mesajları:[16.07.2026 17:13] (3d511eb) refactor(spawner): scale waste spawn intervals based on difficulty level[16.07.2026 17:14] (ee11a5a) refactor(belt): scale conveyor belt speed based on difficulty level[16.07.2026 22:38] (6e67976) 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.[16.07.2026 23:08] (8db3fd3) feat(scene): integrate success and fail particles into MainGame scene[16.07.2026 23:17] (6e85f0f) Revert "feat(scene): integrate success and fail particles into MainGame scene" This reverts commit 8db3fd33a2fcd60659dbf3af2576a1777388e1d3.[16.07.2026 23:32] (a257ecf) fix(scene): resolve conflict by keeping main branch's MainGame.unity
--- Date: 2026-07-16 | Day: 12 | Retroactive: YES | Approved: NO
12. Gün (17.07.2026) Çalışma RaporuBugü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.Ç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.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.


========================================
NAME: Ayşenur Ebrar Gündüz
Email: aysenurebrargunduzz@gmail.com
GitHub Repo: NONE
Start: 2026-07-20 | End: 2026-08-14
Total Journal Entries: 0


========================================
NAME: Hakan Üzer
Email: hakanuzer1@gmail.com
GitHub Repo: https://github.com/Emresatil/Recycle-Rush-VR
Start: 2026-07-01 | End: 2026-08-30
Total Journal Entries: 11
--- Date: 2026-07-01 | Day: 1 | Retroactive: YES | Approved: YES
Konu: Unity VR Proje İskeletinin Oluşturulması ve Versiyon Kontrol (Git) AyarlarıYapılan Çalışmalar: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.Ekip içi versiyon kontrol süreçlerinin (Git &amp; GitHub) sorunsuz ve temiz ilerlemesi amacıyla projeye Unity mimarisine uygun standart .gitignore dosyası eklendi.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.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.Git Commit Mesajları:[19:18] (8ce8e8b) Initial commit[21:15] (b324d33) 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.
--- Date: 2026-07-02 | Day: 2 | Retroactive: YES | Approved: YES
Konu: Unity VR Projenin Sadeleştirlmesi ve XR Altyapısının YapılandırılmasıYapılan Çalışmalar:Proje İskeletinin Temizlenmesi ve Kurulumu: 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.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.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ı.VR Altyapısının (XR) Yapılandırılması: 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ı.Ana Sahne (MainGame) Düzenlemeleri: 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.Git Commit Mesajları:[12:51] (15c5bfb) 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.[15:57] (80816c8) 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.
--- Date: 2026-07-03 | Day: 3 | Retroactive: NO | Approved: YES
Versiyon Kontrol (Git) Çakışmalarının Çözümlenmesi ve 3D Çevre/Obje Tasarımlarının Projeye Entegre EdilmesiGit Çakışmalarının (Merge Conflict) Çözümü: 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).3D Sanat Yönetimi ve Optimizasyon: 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.Sahne Materyallerinin Yüklenmesi:Oyuncunun içinde bulunacağı depo/fabrika (Environment) çevre modelleri projeye eklendi.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.Üretim bandından (Spawner) akacak olan farklı tipteki atıkları temsil etmesi amacıyla cam ve metal atık modelleri eklendi.Klasör Hiyerarşisi: İ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.Git Commit Mesajları:[10:25] (a9567a7) Merge branch 'main' into feature/unity-setup[18:03] (1d62a76) 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.
--- Date: 2026-07-06 | Day: 4 | Retroactive: NO | Approved: YES
VR Sahne Tasarımı (Blockout) ve Editor-İçi Cihaz Simülasyonu (XR Device Simulator) Kurulumu1. Temel Sahne Düzenlemesi (Scene Blockout): 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:Oyuncunun sabit duracağı merkez noktası belirlendi.Atıkların akacağı taşıma bandı (conveyor belt) oyuncunun rahatça erişebileceği (kol mesafesi) bir konuma yerleştirildi.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.2. XR Device Simulator Entegrasyonu: 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:Unity XR Interaction Toolkit paketi içerisinden "XR Device Simulator" modülü projeye entegre edildi ve yapılandırmaları yapıldı.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.3. Doğrulama ve Test İşlemleri: 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ı.Sonuç ve Kazanımlar: 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.Git Commit Mesajları:[13:09] (6ef5039) 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.
--- Date: 2026-07-07 | Day: 5 | Retroactive: NO | Approved: YES
Taşıma Bandı (Conveyor Belt) Fizik Sisteminin İyileştirilmesi ve Hata Ayıklama (Debugging)Yapılan Çalışmalar ve Teknik Detaylar: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.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:1. Çarpışma ve Sekme Kontrolü (Anti-Bounce &amp; Clipping Fix): 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.2. Titreme ve Devrilme (Anti-Jitter) Optimizasyonu: 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ı.3. VR Etkileşim Uyumluluğu: 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ı.Sonuç: 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ı.Git Commit Mesajları:[14:05] (d6171b0) 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 &amp; 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.
--- Date: 2026-07-08 | Day: 6 | Retroactive: NO | Approved: YES
Geri Dönüşüm Atıkları İçin VR Prefab Kurulumu, Fiziksel Etkileşim Ayarları ve Versiyon KontrolüYapılan Çalışmalar ve Teknik Detaylar: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.Çalışmalarım üç ana başlık altında gerçekleştirilmiştir:1. 3D Modellerin Prefab Mimarisinde Yeniden Yapılandırılması: 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ı.2. VR Etkileşimleri ve Fiziksel Çarpışma Kurulumları (Physics Setup): 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ı.Her iki prefab'a da nesnenin uzaysal şekline tam oturan uygun Collider (çarpışma sınırları) bileşenleri eklendi.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.3. Sınıflandırma (Sorting) Sistemi İçin Tag Entegrasyonu: 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ı.4. Versiyon Kontrol (Git) Yönetimi ve Kriz Çözümü: 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ı.Sonuç: 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.Git Commit Mesajları:[12:19] (c47babe) 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.[14:26] (e64bdd1) Merge branch 'main' into feature/glass-metal-prefabs[15:43] (cfb0c2a) 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.
--- Date: 2026-07-09 | Day: 7 | Retroactive: NO | Approved: YES
VR Etkileşim Mekaniklerinin (XR Grab Interactable) Kurulumu ve "Oyun Hissi" (Game Feel) OptimizasyonlarıYapılan Çalışmalar ve Teknik Detaylar:Bugün, Recycle Rush VR projesindeki en temel oyuncu etkileşimi olan "nesne tutma ve fırlatma" (Grab &amp; 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.Çalışmalarım üç ana başlık altında tamamlanmıştır:1. Etkileşim Bileşenlerinin (XR Grab Interactable) Entegrasyonu: 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.2. Ağırlık Simülasyonu ve Fırlatma Fiziği (Physics &amp; Throw Tuning): 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.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.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.3. Doğal Tutuş Noktalarının (Attach Transform) Ayarlanması: 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.Sonuç: 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.Git Commit Mesajları:[11:23] (509763a) 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.[11:57] (273294c) 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.[17:07] (ec02cc3) 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.
--- Date: 2026-07-10 | Day: 8 | Retroactive: NO | Approved: YES
Proje Dizin Optimizasyonu, Prefab Hata Çözümü ve Geri Dönüşüm Kutusu Algılama Mantığının (BinTrigger.cs) GeliştirilmesiYapılan Çalışmalar ve Teknik Detaylar:Bugün, projenin sürdürülebilirliği için önemli olan temiz dosya düzeni (Refactoring &amp; 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:1. Proje Klasör Hiyerarşisi ve Sahne Optimizasyonu (Refactoring):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.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.MainGame ana oyun sahnesindeki kullanılmayan, atıl kalmış ve sahne boyutunu artıran gereksiz GameObject'ler hiyerarşiden silinerek sahne optimize edilmiştir.2. Prefab Çarpışma ve Etiket Algılama Hatasının Çözülmesi (Debugging):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.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.3. Geri Dönüşüm Kutusu Algılama Mantığının (BinTrigger.cs) Yazılması: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.Loose Coupling (Gevşek Bağlılık): 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.Bellek Sızıntısı (Memory Leak) Önlemi: Ç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).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.Sonuç: 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.Git Commit Mesajları:[11:17] (dc62fd7) 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.[11:42] (d919d02) 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.[12:24] (0230021) 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.[16:52] (376ca0b) 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.
--- Date: 2026-07-13 | Day: 9 | Retroactive: NO | Approved: YES
GameManager Sınıfının Geliştirilmesi, Atık Üretici Sistemiyle Entegrasyon, Sahne Düzenlemesi ve Hata Ayıklama (Debugging) ÇalışmalarıYapılan Çalışmalar ve Teknik Detaylar: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:1. Atık Üretici Sisteminin Sahneye Entegrasyonu:-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.-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.2. Kağıt ve Plastik Atık Prefab'larındaki Algılama Hatasının Çözülmesi:-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.-İ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.3. GameManager Mimarisi ve Event Tabanlı Durum Kontrolü:-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.-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.-Oyunun aktif oynanış süresini kontrol etmek için geriye sayan bir zamanlayıcı (Countdown Timer) entegre edilmiştir. Süre bittiğinde (RemainingTime &lt;= 0) oyun durumu otomatik olarak GameOver durumuna geçmektedir.4. GameManager - Spawner Entegrasyonu:-GameManager ile WasteSpawner arasındaki loose-coupling (gevşek bağlılık) bağıını kurmak adına WasteSpawner.cs scripti güncellenmiştir.-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.Sonuç: 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.Git Commit Mesajları:[11:42] (3b842dd) 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.[14:40] (1b489e2) 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.[17:49] (8b55e76) 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.
--- Date: 2026-07-14 | Day: 10 | Retroactive: NO | Approved: YES
Hatalı Atık Modellerinin Yenilenmesi, Taşıma Bandı Sonu İmha Alanının (DestroyZone) Sahne Kurulumu ve Ceza Mekaniğinin KodlanmasıYapılan Çalışmalar ve Teknik Detaylar: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:1. Hatalı Atık Modellerinin Yenilenmesi ve Fizik Ayarları:-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.-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.-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.-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.2. Sahne Üzerinde Atık İmha Alanının (DestroyZone) Yapılandırılması:-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.-Sahneye eklenen bir Cube nesnesinin üzerindeki Mesh Renderer silinerek oyuncu için tamamen görünmez hale getirilmiştir.-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.3. Atık İmha Mantığı ve Ceza Mekanizması Kodlaması (DestroyZone.cs):-İmha alanına çarpan nesneleri algılayıp yönetecek olan DestroyZone.cs sınıfı yazılmıştır.-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.-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.-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).Sonuç: 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.Git Commit Mesajları:[07:41] (2e8add4) 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.[12:45] (ea791f3) 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.[17:31] (28c181b) 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.
--- Date: 2026-07-16 | Day: 12 | Retroactive: NO | Approved: NO
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ülmesiYapılan Çalışmalar ve Teknik Detaylar: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:1. TV Monitörü ve UI Arayüz Entegrasyonu:Oyuncunun skor ve oyun durumu bilgilerini takip edebilmesi için tasarlanan 3D TV monitör modeli oyun alanına konumlandırılmıştır.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.2. Atık Kaçırma Puanlama Hatasının Giderilmesi (Bug Fix):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.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.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.3. Makine Kolu (Lever) VR Etkileşimi ve Animasyon Tasarımı: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.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.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.4. Dinamik Zorluk Algoritmasının Entegre Edilmesi: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.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.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.5. Sahne Modülerleştirme Refaktörü (Okunabilirlik &amp; Git Optimizasyonu):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.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.Sonuç: 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.Git Commit Mesajları:[11:25] (be57a80) 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.[12:50] (3533eac) 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.[15:05] (8619aef) 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.[15:07] (40aed75) 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.[17:08] (489dd62) 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.[17:13] (3d511eb) refactor(spawner): scale waste spawn intervals based on difficulty level[17:14] (ee11a5a) refactor(belt): scale conveyor belt speed based on difficulty level[22:38] (6e67976) 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.


========================================
NAME: Mustafa emre kaplan
Email: mustafaemre027@gmail.com
GitHub Repo: https://github.com/mustafaemre027/securewatch-ai
Start: 2026-07-13 | End: 2026-08-10
Total Journal Entries: 4
--- Date: 2026-07-13 | Day: 1 | Retroactive: YES | Approved: YES
1. Gün – Proje Planlama ve GitHub AltyapısıProje Tanımı ve Planlama: 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ı.GitHub İş Akışı: 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ı.Dokümantasyon Çalışmaları: 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ı.Görsel Varlıklar ve Teslim: 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.Git Commit Mesajları:[01:47] (8e6ce9b) docs(assets): add visual asset directory structure[01:47] (70769f2) docs(plan): document asset and mockup integration[02:02] (fcd557a) docs(assets): fix implementation plan link[02:03] (543f758) docs(plan): fix phase heading structure[02:03] (3a52d84) docs(readme): clarify license status[12:02] (19abdc4) docs(brand): add SecureWatch AI visual identity[12:03] (dbad75f) docs(mockups): add initial SecureWatch AI UI mockups[12:03] (28cc59d) docs(assets): update visual asset index[12:18] (b0e7ed3) docs(screenshots): add day 01 GitHub evidence
--- Date: 2026-07-14 | Day: 2 | Retroactive: YES | Approved: NO
2. Gün – CIC-IDS2017 Veri Seti AnaliziVeri Seti Seçimi ve HazırlıkStajı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ı.Ham veri dosyalarının büyük boyutlu olması nedeniyle CSV ve PCAP dosyalarının GitHub reposuna eklenmesini engelleyen .gitignore kuralları düzenlendi. Ham ve işlenmiş verilerin ayrı tutulması amacıyla data/raw ve data/processed klasörleri oluşturuldu.Veri Analizi Çalışmaları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.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 sütununda eksik değer bulunmadı.Etiketleme ve Dokümantasyonİlk modelleme aşaması için BENIGN kayıtları 0, diğer saldırı türleri ise 1 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ı.Git Commit Mesajları:[18:31] (6955612) chore(data): configure dataset directories[18:32] (9ddf1cc) feat(data): add CIC-IDS2017 analysis script[18:32] (d9e3fd4) docs(data): document CIC-IDS2017 analysis
--- Date: 2026-07-16 | Day: 4 | Retroactive: YES | Approved: NO
3. Gün – Sistem Mimarisi TasarımıFonksiyonel Gereksinimler ve Kullanıcı Senaryoları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.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ı.Veritabanı ve Durum MakineleriPostgreSQL üzerinde kullanılacak users, analysis_jobs, detection_results, incidents, incident_comments ve audit_logs tablolarını içeren ER diyagramı hazırlandı. Tablolar arasındaki yabancı anahtarlar ile CASCADE, RESTRICT ve SET NULL bütünlük kuralları belirlendi.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 korundu.Analiz işlemleri için PENDING, PROCESSING, COMPLETED ve FAILED; güvenlik olayları için OPEN, IN_PROGRESS, RESOLVED ve FALSE_POSITIVE durumları tanımlandı. İzin verilen geçişler Mermaid durum diyagramlarıyla gösterildi.Katmanlı Mimari, API ve Makine Öğrenmesi Akışı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ı.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.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ı.Çalışma tamamen mimari dokümantasyon kapsamında gerçekleştirildi; backend, frontend, veritabanı migration veya model uygulama kodu yazılmadı.Git Commit Mesajları:[15:27] (e197c33) docs(data): remove stale UNSW-NB15 references[15:27] (81a96b3) docs(roadmap): use MachineLearningCSV terminology[15:28] (c4f4f36) docs(workflow): clarify advisor-controlled merge process[15:31] (219aed9) docs(requirements): define functional requirements[15:31] (54c6342) docs(use-cases): document admin and analyst scenarios[15:31] (ebb4397) docs(database): add ER model and data dictionary[15:32] (2aa3572) docs(workflow): define analysis and incident state machines[15:32] (9886831) docs(architecture): document layered system design[15:32] (b7a6158) docs(api): draft core API endpoints[15:33] (2327a50) docs(ml): document training and batch inference flows[15:33] (5f56c84) docs(diary): add missing day 02 internship entry[15:34] (729afbd) docs(diary): add day 03 internship entry[15:59] (905a8a8) docs(requirements): align upload schema and dashboard scope[15:59] (ee44738) docs(database): fix nullable relationships and dataset fields[16:03] (edb6648) docs(workflow): correct MVP state transitions[20:06] (48e2714) docs(architecture): correct layered component dependencies[20:06] (8eef0ae) docs(api): correct endpoint semantics and RBAC coverage[20:08] (6b3ae40) docs(ml): fix training diagram and risk boundaries[20:09] (96af059) docs(data): align preprocessing decisions and roadmap claims[20:09] (96ec6d7) docs(diary): refine day 02 technical statements[20:11] (96ad2e6) docs(diary): update day 03 review record[20:13] (b3b3329) docs(api): fix user created status code
--- Date: 2026-07-17 | Day: 5 | Retroactive: NO | Approved: NO
4. Gün – Backend Temeli ve PostgreSQL EntegrasyonuPostgreSQL Kurulumu ve HazırlıkStajı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 yerel ayarı kullanılarak yeniden oluşturuldu.PostgreSQL servisi başlatıldı ve 5432 portunun çalıştığı doğrulandı. Uygulamanın kullanacağı securewatch_user kullanıcısı ile securewatch_db veritabanı oluşturuldu. Bağlantı bilgileri yerel .env dosyasında saklandı ve bu dosyanın GitHub’a yüklenmesi engellendi.Backend ve Veritabanı Altyapısı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.SQLAlchemy kullanılarak veritabanı bağlantısı, oturum yönetimi ve temel model altyapısı hazırlandı. PostgreSQL bağlantısı SELECT 1 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ı.API ve Test Çalışmaları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 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ı.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.Kullanıcı modeli, JWT kimlik doğrulaması ve rol tabanlı yetkilendirme çalışmaları bir sonraki güne bırakıldı.Git Commit Mesajları:[20:11] (16f285e) chore(backend): scaffold FastAPI application[20:21] (96dddc0) feat(database): configure PostgreSQL connection[20:25] (de51fc1) chore(database): configure Alembic migrations[20:30] (599b9b3) feat(api): add centralized error handling[20:34] (63fcbc1) feat(api): add database health endpoint[20:38] (c648813) test(backend): add startup and health checks[20:47] (83ede03) fix(test): replace deprecated HTTPX dependency[20:50] (049e5b2) docs(backend): document local setup[20:53] (267cdb2) docs(diary): add day 04 internship entry[21:13] (88e739c) Merge pull request #37 from mustafaemre027/feature/15-backend-foundation feat(backend): establish FastAPI backend foundation


========================================
NAME: Doğukan Kalkan
Email: kalkandogukan01@gmail.com
GitHub Repo: https://github.com/Dogukan-klkn/StockRoute
Start: 2026-06-29 | End: 2026-07-24
Total Journal Entries: 13
--- Date: 2026-06-29 | Day: 1 | Retroactive: YES | Approved: YES
Oryantasyon ve Kurulum Süreçleri: 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ı.Süreç İşleyişi: 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ı.Proje Seçimi ve Gereksinim Analizi: 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.Proje Planlaması: 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ı.Git Commit Mesajları:[15:43] (b55dbdf) Initial commit[15:50] (8f18c00) docs: add implementation plan
--- Date: 2026-06-30 | Day: 2 | Retroactive: YES | Approved: YES
Tasarım ve Dokümantasyon Yapısının Kurulumu: 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/ klasör yapısı oluşturuldu.Mockup ve Marka Dosyalarının Eklenmesi: 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.Teknik Notlar ve Kapsam: 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 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ı.Git Commit Mesajları:[10:27] (5459584) 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[10:38] (72c3343) Merge pull request #1 from Dogukan-klkn/feature/implementation-plan docs: add implementation plan[17:16] (9697edc) 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
--- Date: 2026-07-01 | Day: 3 | Retroactive: YES | Approved: YES
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 ve Turborepo teknolojileri kullanılarak projenin ana bileşenleri olan API (apps/api), web yönetim paneli (apps/web) ve mobil uygulamanın (apps/mobile) temel iskeletleri oluşturuldu.Ortak Paketler ve Tasarım Sisteminin Kurgulanması: Monorepo altındaki uygulamalar arası kod standartlarını korumak ve tip güvenliğini (type safety) sağlamak adına packages/config ve packages/shared-types 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 paketi oluşturuldu. Bu kurallar palette.md ve design-system.md 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.Docker Yapılandırması ve API Dokümantasyonu: Projenin veri tabanı altyapısı için PostgreSQL kullanılmak üzere docker-compose.yml 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 uç noktası (endpoint) eklendi ve API dökümantasyonunu interaktif olarak sunabilmek için Scalar entegrasyonu gerçekleştirildi.Git Commit Mesajları:[12:04] (d0f9ee4) 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[15:22] (a989618) 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
--- Date: 2026-07-02 | Day: 4 | Retroactive: NO | Approved: YES
Kod Standartlarının Düzenlenmesi: Monorepo genelinde ortak standartları güvence altına almak için ana dizine prettier.config.js 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ı.Tenant (Kiracı) Bağlam Yönetimi: API isteklerinden tenantId değerini yakalayıp uygulama genelinde güvenle taşımak amacıyla TenantResolverMiddleware ve AsyncLocalStorage tabanlı TenantContextService geliştirildi.Otomatik Veri İzolasyonu (Prisma): 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 ve StockMovementItem modelleri bu global izolasyondan muaf tutuldu.Git Commit Mesajları:[10:53] (ec94615) 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[10:54] (94a38de) 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
--- Date: 2026-07-03 | Day: 5 | Retroactive: YES | Approved: YES
Kimlik Doğrulama ve Güvenlik Altyapısının Kurulması: 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ı.Firma Kayıt ve Kullanıcı Giriş Akışlarının Geliştirilmesi: 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ı.Bağlam Odaklı Token Yapılandırması (Payload Design): 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.Git Commit Mesajları:[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
--- Date: 2026-07-06 | Day: 6 | Retroactive: YES | Approved: YES
Yetki Kontrol Mekanizmasının (Guard) Kurulması: 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 dekoratörü oluşturuldu. NestJS'in Reflector yapısı kullanılarak bu tanımları denetleyen ve yetkisiz erişim denemelerinde standart "403 Forbidden" hatası döndüren RolesGuard mekanizması sisteme entegre edildi.Bağlam (Context) Yakalama Dekoratörleri: İ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 parametre dekoratörü yazıldı.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.Git Commit Mesajları:[09:00] (4e71f91) 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
--- Date: 2026-07-07 | Day: 7 | Retroactive: YES | Approved: YES
Başlangıç Verileri (Seed) ve Onboarding: 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 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ı.Uçtan Uca (E2E) Test Altyapısı: API'nin dış dünyadan gelen isteklere vereceği yanıtları uçtan uca test edebilmek için Jest ve Supertest kütüphaneleri kullanılarak E2E test altyapısı sisteme entegre edildi.Veri İzolasyonunun Test Edilmesi: 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 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ı.Git Commit Mesajları:[11:05] (d8c670d) 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)
--- Date: 2026-07-08 | Day: 8 | Retroactive: YES | Approved: YES
Veri Doğrulama (DTO) ve Dokümantasyon: Ş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.Servis Katmanı ve İş Kuralları: Ş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.Controller ve Yetkilendirme (RBAC): API uç noktaları BranchesController 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 ve BRANCH_MANAGER rollerine açıldı. Son olarak, modül ana projeye entegre edilerek PR (Pull Request) süreci tamamlandı.Git Commit Mesajları:[10:27] (3c2540a) feat(api): add branch validation dtos and openapi properties[10:32] (3bd133c) 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.[10:35] (34c000d) 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. 
--- Date: 2026-07-09 | Day: 9 | Retroactive: YES | Approved: YES
Proje Dokümantasyonu: 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 dosyası güncellenmiştir.Veri Modelleri (DTO) ve Servis Katmanı: Ürün oluşturma istekleri için gerekli doğrulama (validation) kurallarını barındıran CreateProductDto, kısmi ürün güncellemeleri için ise UpdateProductDto 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 katmanı kodlanmıştır.Uç Noktalar ve Barkod Entegrasyonu: API isteklerini karşılayan ProductsController 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) 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.Güvenlik (RBAC) ve API Belgelendirmesi: Oluşturulan tüm rotalar JwtAuthGuard ve RolesGuard 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, BRANCH_MANAGER, WAREHOUSE_STAFF ve FIELD_STAFF 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 ve @ApiResponse dekoratörleri eklenerek API belgelendirmesi tamamlanmıştır.Modül Entegrasyonu: Geliştirilen bağımsız Controller ve Service yapıları temiz mimari prensiplerine uygun olarak ProductsModule çatısı altında toplanmış ve sistemin ana modülüne entegre edilmiştir.Git Commit Mesajları:[11:03] (47b7886) feat(docs): update README with project overview, technology stack, and features[11:25] (06867a1) feat(api): add CreateProductDto for product creation with validation and properties[11:26] (3aad733) feat(api): add UpdateProductDto for partial product updates with validation[13:42] (0857ce8) feat(api): implement ProductsService with CRUD operations and error handling[14:43] (55b4e97) 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.[16:34] (901ecea) feat(api): add ProductsModule with controller and service
--- Date: 2026-07-10 | Day: 10 | Retroactive: NO | Approved: YES
Envanter Listeleme ve Filtreleme: Sistemde yetkili olan rollerin erişebileceği GET /inventory API uç noktası oluşturulmuştur. Bu uç nokta sayesinde, kullanıcıların spesifik olarak şube bazlı (branchId) filtreleme yapabilmesi ve belirlenen düşük stok eşiğinin (minThreshold) altına düşen ürünleri (lowStock) anlık olarak listeleyebilmesi için gerekli veri tabanı sorguları ve altyapı sağlanmıştır. Manuel Stok Düzeltme İşlemleri: 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 kodlanmıştır. Gelen API istekleri sistem tarafından { branchId, productId, quantity, reason } formatında veri transfer nesneleri (DTO) ile karşılanarak doğrulama (validation) işlemlerinden geçirilmiştir. Stok İzlenebilirliği (Audit Trail) ve Loglama: 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 uç noktasına yapılan her istek sonucunda ilgili ürünün Inventory.quantity değeri güncellenirken, aynı işlem bloğu içerisinde eşzamanlı olarak InventoryLog tablosuna da bir kayıt atılması zorunlu kılınmıştır. Kayıt Altına Alınan Veriler: Veritabanına yazılan log kayıtlarında; işlem türü (MANUAL_ADJUSTMENT), işlem öncesi stok miktarı (previousQuantity), yeni stok miktarı (newQuantity), net değişim miktarı (quantityChange), düzeltme nedeni (reason) ve bu işlemi gerçekleştiren kullanıcının benzersiz kimliği (userId) 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. Rol Tabanlı Yetkilendirme (RBAC): Sistemin güvenlik politikaları gereğince, kritik bir işlem olan stok düzeltme (/inventory/adjust) işlemi, proje yetki matrisine birebir uygun olacak şekilde yalnızca BRANCH_MANAGER (Şube Yöneticisi) ve WAREHOUSE_STAFF (Depo Sorumlusu) rollerinin erişimine açılmış, yetkisiz roller için kısıtlanmıştır. Git Commit Mesajları:[09:54] (7f3d72f) feat(api): add AdjustInventoryDto for manual stock adjustment requests[09:54] (513c0ab) feat(api): add GetInventoryFilterDto for inventory listing filters[13:35] (afc9ea6) feat(api): implement InventoryService with findAll and adjustInventory methods[13:41] (7fcb83e) feat(api): add InventoryController with endpoints for listing and adjusting inventory[16:07] (575ebe3) feat(api): import InventoryModule in AppModule[16:07] (09ce9ef) feat(api): create InventoryModule with controller and service
--- Date: 2026-07-13 | Day: 11 | Retroactive: NO | Approved: YES
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:1. Veri Transfer Nesneleri (DTO) ve ValidasyonAPI'ye gelecek olan stok transfer taleplerini karşılamak ve doğrulamak amacıyla CreateMovementDto ve çoklu ürün (header-line) yapısını destekleyen MovementItemDto sınıfları oluşturulmuştur.Transfer geçmişini listelerken durum (status) veya şube bazlı aramalar yapabilmek için filtreleme kurallarını içeren GetMovementsFilterDto sisteme eklenmiştir.2. Servis Katmanı ve Transfer Durum Makinesi (State Machine)Transfer yaşam döngüsünü yönetmek üzere MovementsService 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."İptal" (cancel) işlemi güvenlik gereği yalnızca talebi oluşturan kullanıcıya veya FIRM_ADMIN rolüne kısıtlanmıştır. Aynı şube içerisine transfer yapılması kod seviyesinde engellenmiştir.İşlem Bütünlüğü (Atomicity): ship (sevk) ve receive (teslim) işlemleri sırasında veri tutarsızlığını önlemek için Prisma Transaction 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.İzlenebilirlik (Audit Trail): Sevk ve teslimat anlarında otomatik olarak InventoryLog kayıtlarının (TRANSFER_OUT ve TRANSFER_IN 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.3. Uç Noktalar (Controller) ve Güvenlik (RBAC)Dış dünyaya açılan rotaları barındıran MovementsController kodlanmıştır. Projenin yetki matrisine uygun olarak uç noktalar JwtAuthGuard ve RolesGuard ile korumaya alınmıştır.Örneğin; transfer talep etme ve görüntüleme tüm rollere açıkken, onaylama/reddetme işlemleri sadece FIRM_ADMIN ve BRANCH_MANAGER'a, sevk işlemi ise ek olarak WAREHOUSE_STAFF rolüne yetkilendirilmiştir.Güvenlik zafiyeti yaratmamak adına, işlemi yapan userId ve kullanıcının rolü asla istek gövdesinden (request body) alınmamış, @CurrentUser 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.4. Modül Entegrasyonu ve Kod Kalitesi StandardizasyonuYazılan Controller ve Service sınıfları MovementsModule altında birleştirilmiş ve ana AppModule içerisine dahil edilerek API rotaları aktif hale getirilmiştir.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 dosyası eklenmiş ve tüm metin dosyaları LF formatına zorlanarak ESLint hataları sıfırlanmıştır.Git Commit Mesajları:[09:11] (b3b8ab3) feat(api): add CreateMovementDto and MovementItemDto for stock movement requests[09:11] (9f377df) feat(api): add GetMovementsFilterDto for filtering stock movement requests[11:18] (b3075d0) 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.[13:03] (fc431b4) style(api): format CreateMovementDto with prettier - Collapse unnecessary line break in the destinationBranchId description - No behavior change; output of eslint --fix[13:04] (6b81949) style(api): format GetMovementsFilterDto with prettier - Collapse unnecessary line break in the branchId description - No behavior change; output of eslint --fix[13:21] (87449b4) 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[14:25] (c077307) 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[16:53] (3e51804) 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[16:54] (c7c3d42) feat(api): register MovementsModule in AppModule - Add MovementsModule to the domain modules block of the imports array, enabling the /movements endpoints behind TenantResolverMiddleware[17:06] (0534883) 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
--- Date: 2026-07-14 | Day: 12 | Retroactive: NO | Approved: YES
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:1. Birim Test (Unit Test) Altyapısının KurulmasıAPI katmanında birim testleri koşturabilmek için test ortamı bağımlılıkları yapılandırılmış ve ts-jest kullanılarak Jest konfigürasyonu (Jest config) sisteme dahil edilmiştir.Geliştirme sürecini hızlandırmak ve test kapsamını (coverage) takip edebilmek için package.json dosyasına test, test:watch ve test:cov script'leri eklenmiştir. Test süreçlerinde oluşan "coverage" çıktılarının repoyu kirletmemesi adına .gitignore dosyası güncellenmiştir.2. Servis Katmanı Birim Testleri (Unit Tests)Transfer iş akışının (durum makinesi) çekirdeğini oluşturan MovementsService için detaylı birim testleri yazılmıştır.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.3. Uçtan Uca Testler (E2E) ve Rol Tabanlı Yetkilendirme (RBAC)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.Yetkisi olmayan bir kullanıcının transfer sevk (ship) etmeye çalışması durumunda sistemin doğru bir şekilde 403 Forbidden döndürdüğü doğrulanmıştır.4. Veri İzolasyonu (Tenant Isolation) ve Bug FixYazılan testler sayesinde transfer oluşturma (create) 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) sisteme eklenmiştir.Ç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 E2E testleri ile kanıtlanmıştır.5. Sürekli Entegrasyon (CI) Çıktılarının BelgelenmesiGün sonunda test kapsamı (coverage), build süreçleri ve kod standartları denetleyicisi (lint) çıktıları başarılı bir şekilde alınarak docs/ klasörüne eklenmiş ve modülün prodüksiyona hazır olduğu belgelenmiştir.Git Commit Mesajları:[10:36] (54eff7a) test(api): add Jest config for unit tests with ts-jest[10:36] (5c7d695) test(api): add unit test scripts (test, test:watch, test:cov)[11:04] (6990064) test(api): add MovementsService unit tests with mocked Prisma client[11:05] (22c8f23) chore: ignore jest coverage output[11:19] (d358fa2) test: add unit test output and coverage files[12:17] (39434c2) test(api): add movements e2e covering happy path, RBAC and business rules[12:18] (a8ede20) test(api): add e2e test output for movements[12:37] (0ca591c) fix(api): validate branch and product tenancy on movement create[13:42] (a576e0e) test(api): extend tenant isolation e2e with cross-tenant movements coverage[17:45] (a457792) docs: add day 12 lint output[17:45] (ae380de) docs: add day 12 build output[17:45] (618bbf1) docs: add day 12 full e2e test output
--- Date: 2026-07-15 | Day: 13 | Retroactive: YES | Approved: NO
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:Ortak Tiplerin (Shared Types) ve Altyapının Hazırlanması: 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.​Socket.io Gateway ve Çoklu Kiracı (Tenant) Odalarının Kurulumu: 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.​Transfer İş Akışına (Movements) Anlık Olay Yayınlarının Eklenmesi: 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.​Envanter (Inventory) Modülü Entegrasyonu: 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.​Kapsamlı Test Süreçleri ve Veri İzolasyonunun Doğrulanması: 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.Git Commit Mesajları:[10:31] (009bdb8) fix(shared-types): point package entry to compiled dist output[10:31] (f536548) fix(shared-types): emit CommonJS build to dist[10:31] (c426a01) feat(shared-types): add socket event catalog and payload types[10:32] (0c75354) feat(shared-types): re-export socket events from package index[10:39] (e95e903) feat(api): add socket.io and nestjs websockets dependencies[11:00] (22b36d7) chore: update lockfile for socket.io dependencies[11:12] (f5f3536) feat(api): add inventory gateway with jwt auth and tenant rooms[11:14] (058aa81) feat(api): add realtime module providing inventory gateway[11:17] (c28d546) feat(api): register realtime module in app module[11:35] (3c4612e) feat(config): add optimizeDeps configuration for shared-types[11:39] (c8dfc4d) chore(shared-types): fix lint script and add eslint config[12:02] (9a08bb1) feat(api): wire RealtimeModule into movements module Imported RealtimeModule so MovementsService can inject InventoryGateway for event broadcasting.[12:26] (f9e8607) 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.[12:53] (490e909) 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.[12:53] (c0c8ef5) docs: add day 13 stage 1 and 2 test output logs Unit and e2e run outputs after wiring movement event emissions.[15:08] (d384ef7) chore(api): add socket.io-client as dev dependency for realtime e2e[15:09] (9fd2046) feat(api): wire RealtimeModule into inventory module[15:11] (a7b79a7) feat(api): emit inventory:updated on stock adjust[15:11] (7c8a37b) test(api): cover inventory adjust event emission[15:40] (7e8a3c9) test(api): add unit tests for InventoryGateway connection handling and event emissions[15:51] (03c7c06) test(api): add realtime cross-tenant isolation e2e[16:00] (19e54f3) docs: update day 13 unit test output[16:00] (7c7263c) docs: update day 13 e2e test output[16:27] (29ca57e) docs: add day 13 coverage report[16:28] (4f89eeb) docs: add day 13 build output[16:28] (135a99c) docs: add day 13 lint output


========================================
NAME: Eren Kara
Email: erenkara1549@gmail.com
GitHub Repo: https://github.com/erenkara0/Smart-E-Commerce-Assistant
Start: 2026-07-06 | End: 2026-08-15
Total Journal Entries: 8
--- Date: 2026-07-06 | Day: 1 | Retroactive: YES | Approved: YES
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 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.Git Commit Mesajları:[18:05] (7c5751d) Initial commit[21:48] (ab95971) docs: add implementation_plan.md[21:58] (c241da9) docs: add implementation_plan.md[22:20] (f694aba) Merge branch 'main' of https://github.com/erenkara0/Smart-E-Commerce-Assistant
--- Date: 2026-07-07 | Day: 2 | Retroactive: YES | Approved: YES
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.Git Commit Mesajları:[14:50] (9d816f6) docs: plan revize edildi[15:24] (9bdf9d4) docs: implementation plan güncellendi[21:00] (8640ca4) docs: add initial project plan, design system and mockups
--- Date: 2026-07-08 | Day: 3 | Retroactive: YES | Approved: YES
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.To ensure project security, a unified .gitignore file was created in the root directory, preventing .env files, virtual environments, node_modules, .next folders, and local databases from being tracked by Git. Furthermore, an .env.example file was added to serve as a template for the required environment variables. Finally, the root README.md file was updated to thoroughly document the project's objectives, technology stack, directory structure, security guidelines, and development phases.Git Commit Mesajları:[14:07] (ee31efb) chore: initialize project setup and environment configuration
--- Date: 2026-07-09 | Day: 4 | Retroactive: YES | Approved: YES
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 endpoint, Scalar API documentation was integrated via the /scalar route, and API error responses were standardized. Following comprehensive testing—which included validations for empty messages, valid inputs, non-existent endpoints, and the /docs and /scalar routes—all changes were appended to the existing M2 API vertical slice PR, and the PR description was updated accordingly.Git Commit Mesajları:[11:04] (382f73f) chore: setup api foundation[16:05] (945888c) feat: add health check endpoint[19:37] (68a22bf) feat: add chat request and response schemas[19:58] (dbf92e1) feat: add basic chat endpoint[20:56] (2cdc360) docs: add Scalar API documentation[22:14] (87ae891) feat: standardize API error responses
--- Date: 2026-07-10 | Day: 5 | Retroactive: YES | Approved: YES
Today, I focused on the product data structure for the project. I created the product_loader.py script to parse sample product data from the products.json file, ensuring that the data is correctly validated against the Product model. Following this, I developed the GET /products 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.Git Commit Mesajları:[15:52] (eba3588) feat: add product schema and sample data[17:28] (676fc01) feat: add product data loader[18:03] (db4a276) feat: add products listing endpoint
--- Date: 2026-07-13 | Day: 6 | Retroactive: NO | Approved: YES
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.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.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.I also added a basic product search mechanism and exposed it through the GET /products/search endpoint. The endpoint was tested with the query laptop, and it successfully returned matching product documents with score values.Finally, I updated the README.md and implementation_plan.md 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.Git Commit Mesajları:[14:03] (e7f842a) feat: add product document builder[15:32] (058d717) feat: add vector store service[15:41] (53b3c3e) feat: add product search endpoint[20:01] (3261a25) docs: update M3 documentation[21:58] (71b4c96) Merge pull request #40 from erenkara0/m3-product-document-builder M3: Add product document search foundation
--- Date: 2026-07-14 | Day: 7 | Retroactive: YES | Approved: YES
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.Additionally, the OpenAI client service was established, and the POST /chat 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.Git Commit Mesajları:[14:39] (9ee23d2) feat: add RAG configuration settings[15:37] (83c38d2) feat: add retrieval context builder[15:43] (80cfcb6) feat: integrate chat endpoint with retrieval context[15:51] (0bd8c4e) feat: add OpenAI client service[16:00] (d473b44) feat: add RAG prompt builder[16:27] (b16aea0) feat: integrate RAG response generation in chat[16:44] (cc474eb) feat: standardize RAG fallback responses[16:46] (530ad3d) chore: update retrieval result limit[16:48] (3b7b106) chore: update default retrieval limit
--- Date: 2026-07-15 | Day: 8 | Retroactive: YES | Approved: NO
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 file. I also strengthened the openai_client.py service by handling different API error scenarios, including authentication failures, rate limits, request timeouts, connection problems, invalid requests, and server-side errors.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.Git Commit Mesajları:[00:38] (6258b60) Merge pull request #54 from erenkara0/m4-rag-context-foundation M4: Add RAG context and answer generation foundation


========================================
NAME: ismet can sezgin
Email: ismet.can.sezgin96@erzurum.edu.tr
GitHub Repo: https://github.com/ismetcansezgin/EEG-Flow
Start: 2026-07-13 | End: 2026-08-07
Total Journal Entries: 3
--- Date: 2026-07-13 | Day: 1 | Retroactive: YES | Approved: YES
Subject of Work:&nbsp;Project Scope Definition, Roadmap Design, and Git Repository SetupDetailed Description:&nbsp;On the first day of the internship, the scope, technical requirements, and system architecture of the&nbsp;EEGFlow&nbsp;(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&nbsp;"Group K-Fold"&nbsp;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&nbsp;implementation_plan.md&nbsp;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.Associated Git Commits:	[13.07.2026 15:15] (dda6b06) feat: initial commit with implementation_plan.md
--- Date: 2026-07-14 | Day: 2 | Retroactive: YES | Approved: YES
Subject of Work:&nbsp;Directory Structure Setup, Environment Dependencies Definition, and Git Workflow Initialization (Branch/PR)Detailed Description:&nbsp;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&nbsp;feature/day2-setup&nbsp;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&nbsp;.gitkeep&nbsp;placeholder files placed inside them. Furthermore, the&nbsp;backend/requirements.txt&nbsp;file was created, listing all backend dependencies (FastAPI, Uvicorn, NumPy, SciPy, Pandas, Scikit-Learn, XGBoost, PyTest). A comprehensive&nbsp;.gitignore&nbsp;file was implemented to prevent tracking local virtual environments (.venv), IDE settings (.vscode,&nbsp;.idea), OS cache files, and bulky data files. Finally, a basic&nbsp;README.md&nbsp;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&nbsp;master&nbsp;branch.Associated Git Commits:[14.07.2026 16:13] (220d3ed) 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.[14.07.2026 16:13] (af13b8b) chore: add environment requirements and gitignore - Added backend/requirements.txt file specifying the core Python libraries: * fastapi &amp; uvicorn: For hosting the REST API server. * numpy, scipy, &amp; pandas: For high-performance matrix calculations and digital signal filtering. * scikit-learn &amp; 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.[14.07.2026 16:13] (9b37dee) 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.[14.07.2026 17:07] (98cf906) 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.
--- Date: 2026-07-15 | Day: 3 | Retroactive: YES | Approved: NO
Subject of Work:&nbsp;EEG CSV Data Loading, Multi-Channel Validation, and Robust Group-Wise InterpolationDetailed Description:&nbsp;Developed the core&nbsp;data_loader.py&nbsp;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&nbsp;tests/test_data_loader.py&nbsp;suite to run unit tests verifying the correctness of the validation rules. The tests successfully passed. All changes were committed to&nbsp;feature/day3-data-loader&nbsp;branch and merged into&nbsp;master&nbsp;via a Pull Request.Git Commit Mesajları:[16.07.2026 10:24] (36a5927) feat: implement csv data loader and validation utility Created backend/utils/data_loader.py to load, validate, and clean EEG data in CSV format. Implemented automatic column classification to identify Time, Subject, Event/Label, and numeric EEG channels.Added missing value (NaN) cleaning using linear interpolation to preserve continuous signal integrity. Added automatic sampling frequency (fs) estimation based on timestamp difference calculation. Designed metadata output dictionary containing channel names, sample counts, and trial states.[16.07.2026 14:31] (51b0549) feat(loader): enhance validation with subject-grouped cleaning and robust sampling rate estimation Added a numeric metadata exclusion list (e.g., age, session, trial) to prevent non-electrode numeric columns from being classified as EEG channels. Implemented subject-grouped linear interpolation and forward/backward filling to prevent data contamination across different subjects. Set a threshold limit of 5 samples for linear interpolation to avoid generating artificial data over extended signal gaps. Upgraded sampling frequency (fs) estimation to use median-based calculations, filtering out non-finite or invalid time differences. Refined total duration calculation in metadata output to be mathematically exact.[16.07.2026 14:45] (bfd5a95) test: add unit tests for data loader verification - Created tests/test_data_loader.py to verify data loading, validation, and cleaning. Implemented unit tests for detecting EEG channel columns and excluding metadata. Verified subject-grouped linear interpolation for NaN values on a mock EEG dataset. Verified sampling frequency (fs) auto-estimation using temporal differences. Executed tests using 'python -m pytest tests/test_data_loader.py': Status: SUCCESS (1 passed in 0.55s) Scenario 1: Channels Fp1 and F3 correctly detected. * Scenario 2: Metadata (time_ms, subject_id, trial_id, label) successfully excluded from channels. Scenario 3: Sampling rate auto-calculated exactly to 250.0 Hz from 4ms time intervals. Scenario 4: Subject-grouped interpolation verified (Subject 1 Fp1 filled with 2.0, Subject 2 Fp1 filled with 12.0).[16.07.2026 18:35] (c081e83) Merge pull request #3 from feature/day3-data-loader Integrate Day 3 EEG CSV data loader and validation pipeline: Implement EEGDataLoader class for robust loading and multi-channel validation. Implement subject-grouped linear interpolation and ffill/bfill to prevent cross-subject data leakage. Implement median-based calculations for jitter-resistant sampling frequency estimation. Integrate PyTest unit tests (test_data_loader.py) verifying columns classification and interpolation.


========================================
NAME: Alesam Baath
Email: isambais15@gmail.com
GitHub Repo: https://github.com/isambais/SmartHome-EnergyRL
Start: 2026-07-13 | End: 2026-08-07
Total Journal Entries: 4
--- Date: 2026-07-13 | Day: 1 | Retroactive: YES | Approved: YES
Bugün Ne Yapıldı?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.Hazırlanan Belgelerimplementation_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.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ı.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)..gitignore — Sanal ortam, önbellek ve ham/gizli veri dosyalarının (ör. data/raw/*) repoya girmemesi için yapılandırıldı.Kararlaştırılan Mimari Yaklaşım — Curriculum LearningMentor 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ı: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.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.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.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ı).Proje Dizin Yapısı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.Öğrenilenler / DeğerlendirmeBir 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.
--- Date: 2026-07-14 | Day: 2 | Retroactive: NO | Approved: YES
Bugün Ne Yapıldı?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.Karşılaşılan Teknik Zorluk: Türkçe Sayı Formatı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.Yazılan Kod — EpiasLoader Sınıfı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.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.Test Stratejisi ve DoğrulamaGerç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ı.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ı.Git WorkflowDeğ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.Sonraki Adım (Gün 3)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.Öğrenilenler / DeğerlendirmeGerç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.
--- Date: 2026-07-15 | Day: 3 | Retroactive: YES | Approved: NO
Bugün Ne Yapıldı?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ı.Güneş Üretimi — NREL/NLR PVWatts APIPVWatts 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ı.Ev Talebi — UK-DALE Gerçek VeriUK-DALE veri seti (Jack Kelly &amp; 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.Karşılaşılan Teknik Detay: Gürültü/Varyans Eksikliğiİ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.DokümantasyonGü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.DoğrulamaSolarProfileGenerator: 4 birim test (mock) + gerçek PVWatts API çağrısıyla doğrulamaDemandProfileGenerator: 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)Git Workflowfeature/solar-profile ve feature/demand-profile branch'leri açıldı, açıklamaları yazıldı.Commit mesajları:feat(data): PVWatts API ile SolarProfileGenerator eklendifeat(data): UK-DALE gercek veriyle DemandProfileGenerator eklendi, docs/data-sources.md guncellendiSonraki Adım (Gün 4)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ı.Öğrenilenler / DeğerlendirmeGerç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.
--- Date: 2026-07-16 | Day: 4 | Retroactive: YES | Approved: NO
Bugün Ne Yapıldı?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.Yazılan Kod — build_aligned_dataset() ve save_processed_dataset()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.Karşılaşılan Teknik Karar: Erken Hata Fırlatma (Fail-Fast)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.Doğrulamatests/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.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.Not: Sandbox Kısıtlaması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.Dokümantasyon Güncellemesidocs/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.Git Workflowfeature/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.Commit mesajı (proje standardına uygun, feat(kategori): açıklama formatında):feat(data): uc veri kaynagini hizalayan build_dataset.py eklendigit 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ş.Sonraki Adım (Gün 5)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.Öğrenilenler / DeğerlendirmeBu 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.


========================================
NAME: Melike Bayer
Email: melikebayer09@gmail.com
GitHub Repo: NONE
Start: 2026-08-14 | End: 2026-09-10
Total Journal Entries: 0


========================================
NAME: Faruk Tazeoğlu
Email: faruktazeoglu9@gmail.com
GitHub Repo: https://github.com/Faruk-T/baret
Start: 2026-07-10 | End: 2026-08-10
Total Journal Entries: 5
--- Date: 2026-07-10 | Day: 1 | Retroactive: YES | Approved: YES
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ı.
--- Date: 2026-07-13 | Day: 2 | Retroactive: YES | Approved: NO
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.
--- Date: 2026-07-14 | Day: 3 | Retroactive: NO | Approved: YES
14 Temmuz 2026 — Faz 1, Gün 3: Supabase Veritabanı MimarisiBugün Baret projesinin Supabase/PostgreSQL veritabanı şemasını tasarladım ve kodladım:Kullanıcı rolleri (admin, buyer, seller), sipariş durumu ve teslimat seçeneği için Enum tipleri tanımladım.users, stores, products, orders, reviews tablolarını Foreign Key ilişkileriyle birlikte oluşturdum.Sık filtrelenen alanlar (rol, mağaza sahibi, sipariş durumu, şehir/ilçe) için performans indeksleri ekledim.updated_at otomatik güncelleme ve yeni kullanıcı kaydında otomatik profil oluşturma trigger'larını yazdım.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.Ç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.Ayrıca proje reposunu (Expo iskeleti + Faz 1 planı) temiz bir başlangıç commit'i ile main'e kurdum.Git Commit Mesajları:[12:53] (8f386ed) chore: initialize Baret Expo project scaffold and Phase 1 plan Co-authored-by: Cursor [18:39] (0577d1f) 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 [18:40] (358a13c) 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 [18:41] (ff9fd0f) 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 
--- Date: 2026-07-15 | Day: 4 | Retroactive: YES | Approved: NO
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ı.Bugün (Gün 5): Mockup'ları README'de sergileyeceğim — projenin GitHub vitrinini güncelleyeceğim. Gün sonu PR ile kapatacağım.Git Commit Mesajları:[11:42] (7814ecb) 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).[14:07] (0c52067) 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.[17:50] (910ec62) 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).
--- Date: 2026-07-16 | Day: 5 | Retroactive: NO | Approved: NO
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.Git Commit Mesajları:[10:32] (dc6a482) 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.[16:44] (b6861f8) 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.[16:46] (2f9c8c3) 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).


