chore: proje iskeleti, VS Code yapılandırması ve hafıza dosyaları

- .vscode: eklenti önerileri, ayarlar, görevler, debug yapılandırması
- Monorepo klasör yapısı (backend, frontend, docs, templates, scripts)
- CLAUDE.md, docs/MEMORY.md, docs/PHASES.md
- .gitignore ve .env.example

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-11 22:52:33 +03:00
commit 204c120f4f
20 changed files with 715 additions and 0 deletions
+444
View File
@@ -0,0 +1,444 @@
# 📒 Kakeibo — Kişisel Ev Finans Defteri
## Claude Code Geliştirme Promptu (v2)
> **Rolün:** Kıdemli full-stack geliştirici, UI/UX tasarımcısı ve mentor.
> **Kullanıcı profili:** Daha önce Rust ile uygulama geliştirmedim. VS Code ve Claude Code eklentisi kurulu. Her adımda beni yönlendir; kurulumları ve komutları kısa, pratik şekilde açıkla.
> **Çalışma şekli:** Faz bazlı, adım adım. Bir adım bitmeden ve onayımı almadan diğerine geçme.
---
## 0. ⚙️ Session ve Token Yönetimi (ÖNCELİKLİ)
1. **Tek seferde tek faz, her fazda küçük adımlar.** Her adımın sonunda dur, kısa özet ver, onayımı bekle.
2. **Hafıza dosyaları** (proje kökünde oluştur, sürekli güncel tut):
- `CLAUDE.md` → Proje özeti, teknoloji yığını, klasör yapısı, kodlama kuralları, sık kullanılan komutlar. **Kısa tut (≤150 satır).**
- `docs/MEMORY.md` → Alınan kararlar, tamamlanan adımlar, açık konular, **sıradaki adım**.
- `docs/PHASES.md` → Faz listesi ve durumları (✅ tamam / 🔄 devam / ⏳ bekliyor).
- `docs/DATA_MODEL.md` → Veritabanı şeması.
- `docs/DEPLOY.md` → Canlıya alma adımları ve ortam değişkenleri.
3. **Yeni session'da** önce yalnızca `CLAUDE.md` ve `docs/MEMORY.md` dosyalarını oku. Tüm projeyi tarama.
4. `target/`, `node_modules/`, `dist/`, `*.lock` dosyalarını **asla okuma**.
5. Yalnızca ilgili dosyaları oku; büyük dosyalarda ilgili satır aralığını oku.
6. Değişikliklerde dosyanın tamamını yeniden yazma; yalnızca değişen kısmı düzenle.
7. **Yanıtların kısa olsun:** ne yapıldı → nasıl test edilir → sıradaki adım.
8. Her adım sonunda `docs/MEMORY.md` dosyasına 3–5 satır ilerleme notu ekle ve anlamlı bir **git commit** mesajı öner.
9. Context dolmaya yaklaşınca uyar; `MEMORY.md` güncellendikten sonra `/compact` veya yeni session öner.
10. Bir hatayı 2 denemede çözemezsen dur, durumu özetle ve bana seçenek sun.
---
## 1. 🎯 Proje Tanımı
- **Uygulama adı:** Kakeibo
- **Konu:** Japon Kakeibo yöntemine **tamamen** dayalı, hane bazlı kişisel ev finans defteri (kâğıt defterin dijital hali).
- **Platformlar:**
- **1. öncelik:** Web uygulaması (mobile-first, responsive, **PWA** — telefona "uygulama gibi" kurulabilir).
- **Sonraki aşama:** Windows, Linux ve Android uygulamaları.
- **Veritabanı:** MongoDB
- **Canlı ortam:** Atlas homeserver üzerinde **Dokploy**. Sunucuda MongoDB hâlihazırda kurulu.
- **Tasarım ilkeleri:** Sade, basit, profesyonel, kullanıcı dostu, ferah, modern.
---
## 2. 🧱 Teknoloji Yığını
| Katman | Seçim | Gerekçe |
|---|---|---|
| Backend API | **Rust** + **Axum** + resmi `mongodb` sürücüsü + `tokio` | Hızlı, güvenli; tek API tüm platformlara hizmet eder |
| Doğrulama (backend) | `validator`, `serde` | Girdi kontrolü |
| Kimlik doğrulama | `argon2` (şifre hash) + JWT, **httpOnly cookie** | Güvenli, platformdan bağımsız |
| Frontend | **React + TypeScript + Vite** | Geniş ekosistem, hızlı geliştirme, Tauri ile uyumlu |
| Stil | **TailwindCSS** | Tutarlı tasarım, kolay karanlık tema |
| UI bileşenleri | **shadcn/ui** (Radix tabanlı) | Erişilebilir, modern, özelleştirilebilir |
| İkonlar | **lucide-react** (+ yerinde emoji) | Tutarlı, sade ikon seti |
| Grafikler | **Recharts** | React ile uyumlu çizgi/pasta/çubuk grafikler |
| Sunucu verisi | **TanStack Query** | Önbellek, yükleniyor/hata durumları, otomatik yenileme |
| Formlar | **react-hook-form + zod** | Hızlı, doğrulamalı formlar |
| Markdown | `react-markdown` + `remark-gfm` | Not içerikleri |
| Bildirimler | `sonner` (toast) | İşlem geri bildirimi, "Geri al" |
| Tarih | `date-fns` (tr locale) | Hafta/dönem hesapları |
| PWA | `vite-plugin-pwa` | Telefona kurulum, ikon, splash |
| Masaüstü & Android | **Tauri 2** (Faz 10+) | Aynı React arayüzü ile Windows, Linux, Android |
| Paylaşılan tipler | `ts-rs` (Rust → TypeScript tip üretimi) | Backend ve frontend tipleri hep senkron |
| Dağıtım | **Tek Docker imajı** + Dokploy | Axum, derlenmiş frontend'i de sunar: tek servis, tek domain, CORS yok |
> Rust'a yeni başladığım için: kavramları (ownership, `Result`, `async`) yalnızca ihtiyaç anında, kısa örnekle açıkla. Daha uygun bir alternatif görürsen gerekçesiyle öner, kararı ben veririm.
---
## 3. 📁 Proje Yapısı (Monorepo)
```
kakeibo/
├── CLAUDE.md
├── docs/ # MEMORY, PHASES, DATA_MODEL, DEPLOY
├── backend/ # Rust (Axum) API
│ ├── src/
│ │ ├── main.rs
│ │ ├── config.rs # .env okuma
│ │ ├── db.rs # MongoDB bağlantısı + indeksler
│ │ ├── auth/
│ │ ├── models/
│ │ ├── routes/
│ │ └── services/ # iş mantığı (bütçe, devir, kâr/zarar)
│ └── Cargo.toml
├── frontend/ # React + Vite
│ ├── src/
│ │ ├── components/ui/ # shadcn bileşenleri
│ │ ├── features/ # dashboard, planning, ledger, review, savings, reports
│ │ ├── lib/ # api, format (para/tarih), utils
│ │ └── types/ # ts-rs ile üretilen tipler
│ └── package.json
├── templates/ # monthly_report.md (aylık değerlendirme şablonu)
├── scripts/ # seed, reset, backup
├── .vscode/ # settings, extensions, tasks, launch
├── docker-compose.dev.yml # yerel MongoDB
├── Dockerfile # canlı ortam (çok aşamalı build)
├── .env.example
└── package.json # kök: `npm run dev` ile her şeyi başlatır
```
---
## 4. 💻 Geliştirme Ortamı ve VS Code Yapılandırması
### 4.1 Kurulacaklar (Faz 0'da işletim sistemime göre adım adım yönlendir)
- **Rust:** `rustup` (Windows ise *Visual Studio Build Tools – C++* gereklidir)
- **Node.js LTS** + npm
- **Docker Desktop** (Windows/macOS) veya Docker Engine (Linux)
- **Git** + GitHub hesabı/deposu
- Cargo araçları: `cargo install cargo-watch`
### 4.2 VS Code eklentileri → `.vscode/extensions.json` (önerilen eklentiler)
- `rust-lang.rust-analyzer` — Rust dil desteği
- `tamasfe.even-better-toml` — Cargo.toml
- `vadimcn.vscode-lldb` — Rust debug
- `fill-labs.dependi` — bağımlılık sürümleri
- `usernamehw.errorlens` — hataları satırda göster
- `dbaeumer.vscode-eslint`, `esbenp.prettier-vscode`
- `bradlc.vscode-tailwindcss`
- `mongodb.mongodb-vscode` — veritabanını VS Code içinden görüntüleme
- `ms-azuretools.vscode-docker`
- `humao.rest-client` — API'yi `.http` dosyalarıyla test etme
### 4.3 `.vscode/settings.json`
- Kaydederken otomatik format (Rust: rustfmt, TS: Prettier)
- `rust-analyzer.check.command = clippy`
- `files.exclude` ve `search.exclude` ile `target/`, `node_modules/`, `dist/` gizlensin
### 4.4 `.vscode/tasks.json` ve `launch.json`
- Görevler: **Dev: Tümünü Başlat**, **DB: Başlat/Durdur**, **DB: Seed**, **DB: Sıfırla**, **Test: Tümü**
- Rust backend için debug yapılandırması (breakpoint ile)
### 4.5 Canlı takip (hot reload)
- Kökte tek komut: **`npm run dev`** (`concurrently` ile)
- Frontend: Vite → `http://localhost:5173` (kaydedince anında güncellenir)
- Backend: `cargo watch -x run` → `http://localhost:8080` (kaydedince yeniden derlenir)
- Vite proxy: `/api` istekleri backend'e yönlenir (CORS yok)
- **Telefondan test:** `npm run dev:host` → aynı ağdaki telefondan `http://<bilgisayar-ip>:5173`
- `backend/api.http` dosyasında örnek API istekleri
### 4.6 Yerel MongoDB (sunucuya bağlanmadan geliştirme)
- `docker-compose.dev.yml` ile **MongoDB 7, tek düğümlü replica set** (transaction desteği için zorunlu).
- Veriler Docker volume'unda kalıcı.
- Bağlantı yalnızca `.env` ile yönetilir:
```env
MONGODB_URI=mongodb://localhost:27017/kakeibo_dev?replicaSet=rs0&directConnection=true
```
- `scripts/` altında: **seed** (örnek hane, dönem, kategori, harcama, birikim), **reset** (veritabanını sıfırla).
---
## 5. 🏠 Hane (Household) Yapısı
- Uygulama **hane bazlı** çalışır; her hane yalnızca kendi verisini görür, haneler tamamen bağımsızdır.
- Tüm sorgular backend'de zorunlu olarak `household_id` ile filtrelenir (ortak middleware).
- İlk kayıtta hane oluşturulur; hane sahibi aynı haneye başka üye davet edebilir (davet kodu).
- Roller: `owner`, `member`.
---
## 6. 📅 Dönem (Period) Mantığı
- Dönem **başlangıç ve bitiş tarihiyle** açılır. Örnek: `01.12.2026` – `01.01.2027`.
- Aynı anda yalnızca **bir açık dönem** olur; girişler yalnızca açık döneme yapılır.
- **Haftalar:** Pazartesi başlangıçlı. Dönemin başı/sonundaki kısmi haftalar ayrı hafta sayılır ve bütçeleri gün sayısına göre orantılanır.
- **Dönem kapatma** (sihirbaz adımları):
1. Özet ve planlanan/gerçekleşen karşılaştırması gösterilir.
2. Kalan bakiye ve borç hesaplanır.
3. Onay → dönem salt okunur olur.
4. **Borç** veya **artı bakiye** bir sonraki döneme devredilir; gerçekleşen birikim birikim modülüne eklenir.
5. Yeni dönem önceki dönemin sabit gelir/gider kalemleri ve kategori bütçeleri kopyalanarak açılabilir.
- Devreden borç yeni dönem planında ayrı kalem olarak görünür ve harcanabilir tutardan düşülür; uygulama borcun kapatılması için uyarır/öneride bulunur.
- Kapanış işlemi **MongoDB transaction** ile yapılır (yarım kalırsa hiçbir şey değişmez).
- Hane sahibi kapalı bir dönemi **yeniden açabilir** (düzeltme için; devirler yeniden hesaplanır). Tüm değerler sonradan değiştirilebilir.
---
## 7. 🗂️ Kategoriler ve Ödeme Türleri
**4 sabit ana grup** (değiştirilemez, silinemez; her birinin sabit rengi ve ikonu var):
| Grup | Emoji | Anlamı |
|---|---|---|
| **Zorunlu** | 🏠 | Temel ihtiyaçlar (market, fatura, ulaşım) |
| **İstek** | 🛍️ | Arzular (dışarıda yemek, alışveriş) |
| **Kültürel** | 📚 | Kitap, eğitim, sinema, konser |
| **Beklenmeyen** | ⚡ | Öngörülmeyen giderler (tamir, sağlık, hediye) |
- Her ana grubun altına **alt kategori** eklenebilir, düzenlenebilir, sıralanabilir, pasife alınabilir (geçmiş kayıtlar bozulmasın diye silmek yerine pasife alma).
- İlk kurulumda her grup için örnek alt kategoriler gelsin.
- **Ödeme türleri** tanımlanabilir: 💵 Nakit, 💳 Kredi Kartı, 🏧 Banka Kartı, 🔁 Havale/EFT (eklenebilir/düzenlenebilir).
---
## 8. 📄 Ekranlar ve Özellikler
### 8.1 🔐 Giriş / Kayıt
- Sade giriş ekranı (logo, e-posta, şifre, "Beni hatırla").
- Kayıt → hane oluşturma → **ilk dönemi açma sihirbazı** (onboarding: gelir, sabit giderler, birikim hedefi, bütçe dağıtımı).
- Giriş sonrası **Dashboard**.
### 8.2 📊 Dashboard
Uygulamayı açtığımda tek bakışta: aylık gelirim, planladığım harcama, sabit giderlerim, anlık mali durumum ve toplam birikimim.
**Üst bölüm — özet kartları (sırayla):**
1. 💰 Toplam gelir
2. 📌 Sabit giderler
3. 🐷 Toplam birikim (varlıkların güncel değeriyle)
4. ⚠️ Devreden borç (varsa)
5. 🎯 Grup bazlı planlanan / gerçekleşen (haftalık ve aylık, ilerleme çubuklu)
6. 📍 **Anlık durum:** Kalan harcanabilir tutar (en belirgin kart)
**Grafikler (Günlük / Haftalık / Aylık sekmeli):**
1. **Harcanabilir gelir vs. gerçekleşen harcama** — kümülatif çizgi grafik
2. **4 ana grup + harcanabilir gelir** kırılımlı çizgi grafik
**Hızlı eylem:** "➕ Harcama Ekle" butonu (mobilde sağ altta yüzen buton).
### 8.3 🗓️ Aylık Planlama
- Varsayılan **görüntüleme modu** (salt okunur); "✏️ Düzenle" ile düzenleme moduna geçilir, "Kaydet / Vazgeç".
- **Sabit gelirler:** Birden fazla kalem (ad, tutar, tarih); eklenebilir/kaldırılabilir.
- **Sabit giderler:** Birden fazla kalem; eklenebilir/kaldırılabilir; "Önceki aydan kopyala".
- **Birikim hedefi:** Tutarı ben girerim.
- **Devreden borç:** Önceki dönemden otomatik gelir.
- **Özet satırı** — tek satırda belirgin kutucuklar (mobilde 2×2):
`Gelir` − `Sabit Giderler` − `Birikim` − `Devreden Borç` = **`Harcanabilir Tutar`**
- **Bütçe dağıtımı (4 ana grup, aylık ve haftalık):**
- Uygulama öneri sunar; seçenekler:
- a) Önceki ayın **gerçekleşen** harcamalarına göre
- b) Son 3 ayın ortalamasına göre
- c) Varsayılan yüzde dağılımı (ayarlardan değiştirilebilir)
- Öneri tek tıkla uygulanır; tüm rakamları ben değiştiririm.
- Haftalık bütçe, aylık bütçeden hafta gün sayısına göre otomatik hesaplanır (elle değiştirilebilir).
- Dağıtılan toplam, harcanabilir tutarı aşarsa uyarı.
- **Notlar** (bkz. 8.6)
### 8.4 ✍️ Günlük Defter
- Küçük defter mantığı; üstte **hafta seçici** (◀ önceki hafta | Bu hafta | sonraki hafta ▶).
- **Hızlı giriş formu:** tutar (büyük, sayısal klavye), ana grup (4 büyük renkli buton), alt kategori, ödeme türü, tarih (varsayılan bugün), açıklama.
- Son kullanılan kategori/ödeme türü hatırlanır.
- Formun altında **o haftanın girişleri** gün gün gruplanmış liste halinde.
- Her satırda düzenle / sil; silmede "↩️ Geri al" toast'ı.
- Haftalık özet: grup bazlı bütçe / harcanan / kalan.
### 8.5 📝 Ay Sonu Değerlendirmesi
- **Ayrı sayfa.** Tüm işlemler en baştan otomatik yansır (hesaplamalar sorgu anında yapılır, ayrıca kopya tutulmaz).
- Kakeibo'nun dört sorusu ve cevapları:
1. Ne kadar param vardı?
2. Ne kadar biriktirmek istedim?
3. Ne kadar harcadım?
4. Ne kadar biriktirdim?
- **"Nasıl daha iyi yapabilirim?"** — serbest metin (Markdown).
- Planlanan vs. gerçekleşen (grup ve alt kategori bazlı), en çok harcanan kategoriler, haftalık dağılım.
- **Notlar:** Sayfanın en altında **yalnızca başlık** olarak listelenir; tıklayınca açılır.
- **"🔒 Dönemi Kapat"** butonu → dönem kapatma sihirbazı.
- **Aylık değerlendirme çıktısı:** Formatı ben ayrıca vereceğim. `templates/monthly_report.md` şablonu üzerinden üretilsin; Markdown ve **yazdırılabilir/PDF** çıktı.
### 8.6 🗒️ Notlar (Ortak Yapı)
- Notlar **döneme özeldir**; yalnızca ilgili dönemde görünür.
- Notun bağlı olduğu yer: `planning` veya `review`.
- Yapı: **Başlık + Metin**; metin **Markdown** destekler (Düzenle / Önizle sekmeleri).
### 8.7 🐷 Birikimler / Varlıklar
- **Ayrı modül.** Varlık türleri: 🇹🇷 TL, 🥇 Altın (gram, çeyrek, yarım, tam, ons), 💵 USD, 💶 EUR ve eklenebilir diğer dövizler.
- Her **alım/satım** kaydı: varlık, miktar, birim fiyat/kur, tarih, toplam tutar, not.
- Her varlık için: toplam miktar, **ortalama maliyet**, güncel kur, **güncel değer**, **kâr/zarar** (tutar ve %).
- Portföy özeti: toplam maliyet, toplam güncel değer, toplam kazanç; varlık dağılımı (halka grafik).
- **Kurlar:** Güvenilir ve ücretsiz bir kaynaktan (döviz için TCMB, altın için uygun bir kaynak — öner) periyodik çekilsin ve önbelleğe alınsın; kaynak erişilemezse son kur + "son güncelleme zamanı" gösterilsin. **Manuel kur girişi** her zaman mümkün.
- Dönem kapanışındaki gerçekleşen birikim buraya otomatik eklenebilsin (onaylı).
### 8.8 📈 Raporlama
- Filtreler: dönem, tarih aralığı, ana grup, alt kategori, ödeme türü.
- Raporlar:
- **Gelir–gider karşılaştırması** (aylık ve dönemler arası, çubuk grafik)
- **Kategori kırılımlı** gelir–gider raporu (tablo + grafik)
- Planlanan vs. gerçekleşen **bütçe sapma** raporu
- Ödeme türüne göre harcama dağılımı
- Birikim oranı trendi (gelirin yüzde kaçı birikti)
- Birikim/varlık performansı
- Her rapor CSV olarak dışa aktarılabilir ve yazdırılabilir.
### 8.9 🔄 İçe / Dışa Aktarma
- **JSON:** Tam hane yedeği ve geri yükleme (sürüm bilgisi içersin; içe aktarmadan önce önizleme ve onay).
- **CSV:** Harcama girişleri, plan kalemleri, varlık işlemleri (UTF-8, `;` ayırıcı — Türkçe Excel uyumlu).
- İçe aktarmada hatalı satırlar raporlansın; geçerli satırlar aktarılsın.
### 8.10 ⚙️ Ayarlar
- 🌓 Tema: Aydınlık / Karanlık / Sistem
- Kategori, alt kategori, ödeme türü yönetimi
- Varsayılan bütçe yüzdeleri
- Hane ve üye yönetimi, profil, şifre değiştirme
- Yedekleme (JSON dışa/içe aktarma)
---
## 9. 🎨 UI/UX İlkeleri (Best Practices)
**Genel**
- Mobile-first; tasarımı önce 375 px genişlikte yap, sonra tablet/masaüstüne genişlet.
- **Navigasyon:** Mobilde alt menü (5 öğe: 📊 Panel, ✍️ Defter, 🗓️ Plan, 🐷 Birikim, ☰ Diğer); masaüstünde sol kenar çubuğu.
- Ferah boşluklar, kart tabanlı düzen, yuvarlatılmış köşeler, hafif gölgeler.
- Arayüz dili Türkçe; metinler kısa ve anlaşılır.
**Tipografi ve sayılar**
- Font: **Inter** (veya benzeri okunaklı sans-serif), temel boyut **16 px (≈12 pt)**, başlıklar belirgin hiyerarşide.
- Tutarlarda `tabular-nums` (rakamlar alt alta hizalı).
- **Para formatı:** Para birimi rakamın **sağında**, arada **bir boşluk**; Türkçe sayı formatı:
`1.250,00 ₺` · `300,00 €` · `150,00 $` · `12,50 gr`
- **Tarih:** `GG.AA.YYYY`
- Tüm formatlama tek bir yardımcı modülden (`lib/format.ts`) yapılsın.
**Renk**
- Tasarım token'ları (CSS değişkenleri) ile aydınlık/karanlık tema.
- 4 ana grubun sabit, ayırt edilebilir renkleri (renk körlüğüne uygun; renk yanında ikon/etiket de olsun).
- Gelir/olumlu: yeşil · Gider/aşım: kırmızı · Uyarı: turuncu. Kontrast **WCAG AA**.
**Etkileşim ve geri bildirim**
- Yükleniyor durumlarında **skeleton**; boş durumlarda açıklayıcı mesaj + eylem butonu ("Henüz harcama yok — ilkini ekle ✍️").
- Her işlemde toast bildirimi; silmede **geri al**.
- Kalıcı/riskli işlemlerde (dönem kapatma, içe aktarma, silme) onay diyaloğu.
- Formlarda satır içi doğrulama mesajları; tutar alanında sayısal klavye (`inputMode="decimal"`).
- Dokunma alanları en az 44×44 px; klavye ile tam gezinme; görünür odak halkası.
- Bütçe aşımına yaklaşınca (%80) ve aşınca görsel uyarı.
- Animasyonlar hafif ve kısa; `prefers-reduced-motion` desteklensin.
**Logo ve ikonlar**
- Logo ve uygulama ikonu tasarımı sana ait: sade, defter + yen/para temalı, **SVG**.
- Favicon, PWA ikonları (192/512, maskable), Apple touch icon ve ileride Tauri için ikon setleri üretilsin.
---
## 10. 🗄️ Veritabanı Modeli İlkeleri
İleride Windows, Linux ve Android (çevrimdışı çalışma ve senkronizasyon) desteklenecek; model buna hazır olmalı:
- Tüm kayıtlarda: `_id` (UUID v7), `household_id`, `created_at`, `updated_at`, `deleted_at` (soft delete), `version`.
- **Parasal tutarlar float olarak saklanmaz** → kuruş cinsinden tamsayı (`i64`). Altın miktarı ve kurlar için yeterli ondalık hassasiyet (`Decimal128` veya ölçekli tamsayı).
- Koleksiyonlar (taslak):
`users`, `households`, `periods`, `categories`, `payment_methods`, `plan_items` (sabit gelir/gider), `budgets` (grup × dönem × hafta), `entries` (harcamalar), `notes`, `assets`, `asset_transactions`, `exchange_rates`, `carryovers`, `settings`
- İndeksler: `household_id`, `(household_id, period_id)`, `(household_id, date)`.
- Hesaplanan değerler (gerçekleşen toplamlar, kalan tutar) **saklanmaz**, aggregation ile hesaplanır.
- Şema sürümü (`schema_version`) ve basit migration mekanizması.
- Şemayı `docs/DATA_MODEL.md` dosyasında belgele ve **Faz 0'da onayıma sun**.
---
## 11. 🔐 Güvenlik
- Şifreler `argon2` ile hashlenir; JWT **httpOnly, Secure, SameSite** cookie'de tutulur.
- Giriş denemelerinde rate limit.
- Her istekte hane izolasyonu (başka hanenin verisine erişim imkânsız olmalı — bunun için test yaz).
- Girdi doğrulama hem frontend (zod) hem backend'de.
- Gizli bilgiler (`MONGODB_URI`, `JWT_SECRET`) yalnızca ortam değişkenlerinde; `.env` git'e eklenmez, `.env.example` tutulur.
- Hata mesajları kullanıcıya Türkçe ve sade; teknik detay yalnızca loglarda.
---
## 12. 🚀 Canlıya Alma (Atlas Homeserver + Dokploy)
### 12.1 Yaklaşım
- **Tek Docker imajı**, çok aşamalı `Dockerfile`:
1. Node aşaması → frontend build (`dist/`)
2. Rust aşaması → backend release build
3. Küçük çalışma imajı → Axum hem `/api` uç noktalarını hem de frontend dosyalarını sunar
- `GET /api/health` uç noktası (uygulama + veritabanı durumu) → Dokploy health check.
- Akış: **GitHub'a push → Dokploy otomatik build ve deploy.**
### 12.2 Dokploy adımları (Faz 9'da benimle adım adım yap)
1. Dokploy'da proje oluştur → **Application** ekle → GitHub deposunu bağla, `main` dalı.
2. Build tipi: **Dockerfile**.
3. Ortam değişkenlerini Dokploy arayüzünden gir (`MONGODB_URI`, `JWT_SECRET`, `APP_URL`, `RUST_LOG`).
4. **Domain** ekle; HTTPS (Let's Encrypt) Dokploy/Traefik ile otomatik.
5. Otomatik deploy (webhook) aç; ilk deploy sonrası health check'i doğrula.
6. Geri dönüş (rollback) için önceki deploy'a dönmeyi göster.
### 12.3 Canlı ortamda MongoDB bağlantısı
Sunucudaki mevcut MongoDB'ye bağlanmadan önce **benimle birlikte kontrol et**:
1. MongoDB **Docker konteyneri mi** (Dokploy içinde mi?), yoksa **doğrudan sunucuya mı** kurulu?
- Konteynerse → uygulama aynı Docker ağına bağlanır, host adı olarak konteyner/servis adı kullanılır.
- Sunucuya kuruluysa → `host.docker.internal` (extra_hosts ile) veya Docker köprü IP'si (`172.17.0.1`) kullanılır; MongoDB'nin bu adresi dinlediği (`bindIp`) ayarlanır.
2. **Replica set** etkin mi? Değilse tek düğümlü replica set'e çevirme adımlarını ver (transaction için gerekli).
3. Yalnızca `kakeibo` veritabanında `readWrite` yetkili **ayrı bir kullanıcı** oluştur (admin kullanıcısı kullanılmaz).
4. MongoDB portu (27017) **internete açık olmamalı**; güvenlik duvarını kontrol et.
5. Örnek bağlantı:
```env
MONGODB_URI=mongodb://kakeibo_app:<sifre>@<host>:27017/kakeibo?authSource=kakeibo&replicaSet=rs0
```
6. Uygulama açılışında indeksleri otomatik oluştursun ve bağlantı hatasında anlaşılır log versin.
### 12.4 Yedekleme
- `mongodump` ile günlük otomatik yedek (Dokploy zamanlanmış görev veya cron), son 14 yedeği sakla.
- Geri yükleme (`mongorestore`) adımlarını `docs/DEPLOY.md` dosyasına yaz ve bir kez test et.
---
## 13. 🧪 Test ve Kalite
- Backend: kritik iş mantığı için birim testleri (bütçe önerisi, hafta hesapları, dönem devri, ortalama maliyet ve kâr/zarar, hane izolasyonu).
- Frontend: para/tarih formatlama ve kritik bileşenler için testler (Vitest).
- Her faz sonunda **elle test kontrol listesi** ver (tarayıcıda hangi adımları deneyeceğim).
- Kod kalitesi: `cargo clippy`, `cargo fmt`, ESLint, Prettier.
---
## 14. 🗺️ Fazlar
> Her fazın başında kısa plan, sonunda test adımları ve özet. Onayım olmadan sonraki faza geçme.
> **İlk canlıya alma erken yapılacak** (Faz 3), böylece deploy sorunları en baştan çözülür; sonraki her faz otomatik olarak yayına çıkar.
| Faz | Kapsam | Çıktı |
|---|---|---|
| **Faz 0** | Ortam kurulumu (Rust, Node, Docker, Git), VS Code yapılandırması, monorepo iskeleti, hafıza dosyaları, yerel MongoDB, veri modeli onayı | `npm run dev` ile boş uygulama tarayıcıda açılıyor |
| **Faz 1** | Backend temeli: config, DB bağlantısı, kimlik doğrulama, hane, kategoriler, ödeme türleri, health check | API `.http` dosyasıyla test edilebiliyor |
| **Faz 2** | Frontend temeli: tasarım sistemi (Tailwind + shadcn), tema, logo/ikonlar, layout, navigasyon, giriş/kayıt | Giriş yapılabilen, temalı iskelet uygulama |
| **Faz 3** | 🚀 **İlk canlıya alma:** Dockerfile, Dokploy kurulumu, canlı MongoDB bağlantısı, domain + HTTPS, yedekleme | Giriş ekranı canlıda çalışıyor |
| **Faz 4** | Dönem açma + aylık planlama (sabit gelir/gider, birikim, özet kutucukları, bütçe önerisi) + notlar | Plan ekranı |
| **Faz 5** | Günlük defter (haftalık giriş, liste, düzenle/sil) | Harcama girişi |
| **Faz 6** | Ay sonu değerlendirmesi + dönem kapatma/devir sihirbazı | Tam dönem döngüsü |
| **Faz 7** | Dashboard: özet kartları ve çizgi grafikler | Ana ekran |
| **Faz 8** | Birikimler/varlıklar: altın, döviz, kur entegrasyonu, kâr/zarar | Birikim modülü |
| **Faz 9** | Raporlama + JSON/CSV içe–dışa aktarma + aylık değerlendirme çıktısı | Raporlar |
| **Faz 10** | PWA, performans, erişilebilirlik ve son UI cilası | Telefona kurulabilir web uygulaması |
| **Faz 11+** | Tauri 2 ile Windows, Linux, Android uygulamaları (çevrimdışı mod ve senkronizasyon) | Masaüstü ve mobil uygulamalar |
---
## 15. ✅ Genel Kodlama Kuralları
- Temiz, modüler, okunabilir kod; anlamlı isimlendirme (kod İngilizce, arayüz metinleri Türkçe).
- Arayüz metinleri tek bir dosyada toplansın (ileride çok dil desteği için).
- Tekrar eden mantık backend'de `services/`, frontend'de `lib/` altında.
- Her yeni bağımlılığı eklemeden önce kısaca nedenini söyle.
- Commit mesajları Türkçe ve açıklayıcı (ör. `feat(defter): haftalık giriş listesi eklendi`).
---
## ▶️ Başlangıç
**Faz 0 ile başla:**
1. İşletim sistemimi sor ve kurulumları adım adım listele.
2. `.vscode/` yapılandırmalarını ve monorepo iskeletini oluştur.
3. `CLAUDE.md`, `docs/MEMORY.md`, `docs/PHASES.md` dosyalarını oluştur.
4. Yerel MongoDB'yi (Docker, replica set) kur ve `npm run dev` ile frontend + backend'i birlikte çalıştır.
5. Veri modeli taslağını `docs/DATA_MODEL.md` olarak hazırla ve **onayımı bekle**.