e4c8d971fc
- scripts/backup.sh: mongodump + bütünlük denetimi, son 14 yedek - scripts/restore.sh: ayrı veritabanına geri yükleme ve sayım karşılaştırma - scripts/backup-pull.sh + systemd zamanlayıcıları; kurulum docs/DEPLOY.md §6 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7.1 KiB
7.1 KiB
Kakeibo — Proje Rehberi
Japon Kakeibo yöntemine dayalı, hane bazlı kişisel ev finans defteri.
Tam gereksinimler: KAKEIBO_PROMPT.md (yalnızca ilgili bölümü oku).
Çalışma Kuralları
- Faz bazlı, küçük adımlar. Her adım sonunda dur, kısa özet ver, onay bekle.
- Yeni session'da yalnızca
CLAUDE.md+docs/MEMORY.mdoku; tüm projeyi tarama. target/,node_modules/,dist/,*.lockdosyalarını asla okuma.- Değişikliklerde dosyayı baştan yazma; yalnızca değişen kısmı düzenle.
- Yanıt formatı: ne yapıldı → nasıl test edilir → sıradaki adım.
- Her adım sonunda
docs/MEMORY.md'ye 3–5 satır not ekle. - Her adım sonunda Claude commit atar ve "push zamanı" diye haber verir; push'u kullanıcı kendi uygulamasıyla yapar (Claude
git pushçalıştırmaz). - Bir hata 2 denemede çözülmezse dur, seçenek sun.
- Kullanıcı Rust'a yeni: kavramları ihtiyaç anında, kısa örnekle açıkla.
- Her yeni bağımlılık için kısa gerekçe ver.
Teknoloji Yığını
- Backend: Rust + Axum + tokio + resmi
mongodbsürücüsü,serde,validator - Auth: argon2 + JWT (httpOnly, Secure, SameSite cookie)
- Frontend: React + TypeScript + Vite, TailwindCSS, shadcn/ui, lucide-react
- Veri/Form: TanStack Query, react-hook-form + zod, date-fns (tr)
- Diğer: Recharts, sonner, react-markdown + remark-gfm, vite-plugin-pwa
- Tipler:
ts-rs(Rust →frontend/src/types/) - DB: MongoDB 7, tek düğümlü replica set (transaction için)
- Dağıtım: Tek Docker imajı (Axum frontend'i de sunar) → Dokploy (Atlas homeserver)
- Gelecek: Tauri 2 (Windows, Linux, Android)
Klasör Yapısı
backend/src/ main.rs, config.rs, db.rs, auth/, models/, routes/, services/
frontend/src/ components/ui/, features/, lib/ (api, format), types/
docs/ MEMORY, PHASES, DATA_MODEL, DEPLOY
templates/ monthly_report.md
scripts/ seed, reset, backup
Kodlama Kuralları
- Kod İngilizce; arayüz metinleri Türkçe ve tek dosyada toplanır.
- İş mantığı: backend
services/, frontendlib/. - Para: kuruş cinsinden
i64(asla float). Altın/kur: Decimal128 veya ölçekli tamsayı. - Tüm kayıtlar:
_id(UUID v7),household_id,created_at,updated_at,deleted_at,version. - Her sorgu
household_idile filtrelenir (ortak middleware). - Hesaplanan değerler saklanmaz; aggregation ile hesaplanır.
- Format:
1.250,00 ₺, tarihGG.AA.YYYY; tümülib/format.tsüzerinden. - Haftalar Pazartesi başlar; kısmi haftalar gün sayısına göre orantılanır.
- Hatalar kullanıcıya Türkçe ve sade; teknik detay yalnızca logda.
- Commit mesajları Türkçe:
feat(defter): haftalık giriş listesi eklendi
Sık Kullanılan Komutlar
npm run dev # frontend (5173) + backend (8080) birlikte, hot reload
npm run dev:host # telefondan test için ağa aç
npm run db:up # yerel MongoDB (Docker)
npm run db:down
npm run db:seed
npm run db:reset # kakeibo_dev + artık kakeibo_test_* veritabanlarını siler
npm test # backend (cargo test, MongoDB açık olmalı) + frontend (vitest)
npm run lint # clippy + oxlint
npm run types # Rust DTO → frontend/src/types/*.ts (ts-rs; cargo test de üretir)
npm run icons # frontend/brand/*.svg → favicon, PWA, Apple, Tauri ikonları (rsvg-convert + magick)
npm run db:backup # kakeibo_dev → ./backups (canlı yedek: docs/DEPLOY.md §6)
npm run db:restore -- <dosya|latest> <hedef_db> [--force]
npm run devöncesinde DB otomatik başlar (predev).- Yerel MongoDB host portu 27020 (27017 sistem mongod, 27018/27019 diğer projeler).
- Frontend lint: oxlint (Vite şablonu varsayılanı; ESLint yerine).
components/ui/**shadcn dosyaları. - Frontend: Tailwind v4 (
src/index.csstoken'ları), shadcn/ui (styleradix-nova,cnpaketi),@/→src/. Renkler:bg-needs/text-needs-fg/bg-needs-soft(wants, culture, unexpected aynı),text-income/text-expense/text-warning. Tutarlardamoneysınıfı. Butonlar ≥44 px (shadcn boyutları büyütüldü). - API:
lib/api.ts(api.get/post/..., hata →ApiErrorTürkçemessage),lib/query.ts(QueryClient +queryKeys),lib/auth.ts(useMe→ undefined/null/MeResponse,useLogin/useRegister/useLogout). - Tipler:
frontend/src/types/elle düzenlenmez; backend'de DTO'ya#[derive(TS)] #[ts(export)]ekle →npm run types. İstek yapılarındaoptional_fields. - Sayfalar:
src/router.tsx; adreslercomponents/layout/nav-items.ts(paths); sayfa bileşenlerifeatures/<alan>/page.tsx; iskeletcomponents/layout/app-layout.tsx. Sayfa başlığıPageHeader(sekme başlığını da ayarlar). Metinlerlib/strings.ts(t). - Yönlendirme:
RequireAuth(oturum yok →/giris?donus=),RequireGuest(oturum var →donusya da panel; formlar ayrıca navigate etmez).donusdaimasafeReturnPathile. - Geliştirmede tasarım önizlemesi:
/dev/tasarim. - Formlar: react-hook-form + zod (
mode: 'onTouched'), alanlarcomponents/form-field.tsx(FormField,PasswordInput,FormError); sunucu hatasısetErrorile ilgili alana. Bildirim:toast(sonner,components/toaster.tsx). - Dönem verisi:
lib/periods.ts(Query kancaları), tarihlib/period-dates.ts(arayüz son günü dahil gösterir, backendend_datehariç), tutar alanıMoneyInput+moneyText/toKurus(lib/money-schema.ts). İlk dönem sihirbazı/plan/donem-ac?adim=. Plan düzenleme: taslak →diffPlan→useSavePlan; haftalık önizlemelib/budget-preview.ts(backend hesabıyla aynı tutulmalı). - Defter:
/defter?hafta=N,features/ledger/(hafta seçici, hızlı giriş), saf hesaplarlib/ledger.ts, kancalarlib/entries.ts+lib/catalog.ts. Kayıt değişincequeryKeys.period(id)yenilenir (özet/bütçespentdahil). - Grup tanımları:
lib/groups.ts; tema:lib/theme.tsx(+index.htmliçindeki ilk-boya betiği); biçimlendirme:lib/format.ts. - API örnekleri:
backend/api.http - Canlı:
Dockerfile(tek imaj),docs/DEPLOY.md(ortam değişkenleri, Dokploy, MongoDB, yedek).routes::app()= API +STATIC_DIRvarsa SPA (routes/spa.rs) + sıkıştırma + TraceLayer. Testlerroutes::router()kullanır. - Backend = lib (
src/lib.rs) + bin (src/main.rs). Entegrasyon testleribackend/tests/(her test geçicikakeibo_test_<uuid>DB,tests/commonyardımcıları). - Kayıt politikası:
REGISTRATION=invite_only(varsayılan; ilk hane serbest, sonra yalnızca davet) |open. Backend'de zorunlu (403registration_closed),GET /api/auth/registrationarayüze bildirir. TestlerTestApp::new()= open,with_registration(..). - Biçim: Prettier (
frontend/.prettierrc.json: tek tırnak,;yok, 100 sütun);npm --prefix frontend run format.src/types/vecomponents/ui/hariç. - Hane izolasyonu: hane kimliği yalnızca
AuthUser.household_id'den; sorgularscope(hid)ile başlar; başka hane → 404.
Ortam
- Geliştirme makinesi: CachyOS (Arch), fish kabuğu, VS Code
- Git remote:
https://gitea.ta1sph.info/suphicakir/kakeibo.git(Gitea, dal:main)