# BÜTÇEM Aile bütçesi, banka/kart/cari hesapları, birikimler (altın, döviz, ziynet), aylık bütçe, ev stoğu ve akıllı alışveriş listelerini tek yerde yöneten, çok kullanıcılı web uygulaması. - Ürün tanımı, mimari kurallar ve faz planı: [docs/PROMPT.md](docs/PROMPT.md) - Sürüm geçmişi: [CHANGELOG.md](CHANGELOG.md) ## Teknoloji Next.js 16 (App Router, Turbopack, Cache Components) · React 19 · TypeScript (strict) · Tailwind CSS 4 · shadcn/ui (Radix) · Better Auth · MongoDB 9 (native driver + Mongoose) · zod · Vitest ## Gereksinimler - Node.js **26** (Active LTS) — `nvm use` (`.nvmrc`) - Docker + Docker Compose (lokal MongoDB replica set) ## Lokal geliştirme ```bash # 1) Bağımlılıklar npm install # 2) Ortam değişkenleri — BETTER_AUTH_SECRET için: openssl rand -base64 32 cp .env.example .env.local # 3) MongoDB (tek düğümlü replica set rs0, host portu 27019) — sağlıklı olana kadar bekler npm run db:up # 4) Örnek veri: admin + aile kullanıcıları + 2 hane (tekrar çalıştırmak güvenli) npm run seed # 5) Uygulama npm run dev # http://localhost:3000 → /login ``` ### Geliştirme hesapları (`npm run seed`) | Kullanıcı adı | Rol | Hane(ler) | Not | | ------------- | ----- | --------------------------------------- | ------------------------------- | | `admin` | admin | Çakır Ailesi (owner) | şifre `SEED_ADMIN_PASSWORD` | | `ayse` | user | Çakır Ailesi (owner), Annemler (viewer) | | | `emre` | user | Çakır Ailesi (member) | e-postasız | | `zeynep` | user | Çakır Ailesi (viewer) | e-postasız | | `fatma` | user | Annemler (owner) | | | `mehmet` | user | Annemler (member) | | | `burak` | admin | — | hanesi yok → hane verisi görmez | | `ozan` | user | Çakır Ailesi (member) | askıda, giriş yapamaz | Admin dışındaki hesapların şifresi `SEED_USER_PASSWORD` (`.env.local`). Production'da yalnızca admin oluşturulur. Giriş kullanıcı adı **veya** e-posta ile yapılır. Kayıt kapalıdır; kullanıcıları admin `/admin/kullanicilar` sayfasından oluşturur. ## Scriptler | Komut | Açıklama | | ----------------------------- | -------------------------------------------------------------------------------- | | `npm run dev` | Geliştirme sunucusu | | `npm run build` / `start` | Üretim build'i / sunucusu | | `npm run lint` | ESLint | | `npm run typecheck` | `tsc --noEmit` | | `npm run test` | Vitest birim testleri | | `npm run format` | Prettier | | `npm run db:up` / `db:down` | Lokal MongoDB'yi başlat / durdur | | `npm run seed` / `seed:reset` | Örnek veri (Faz 4) | | `npm run test:integration` | Entegrasyon testleri (MongoDB) | | `npm run migrate` | Bekleyen migration'lar | | `npm run bootstrap` | Canlı başlatma adımı (replica set kontrolü + migration; production'da ilk admin) | | `npm run cleanup` | Eski/bağlanmamış ek dosyaları sil | ## Haneler ve yetki - Tüm alan verisi bir **haneye** (`householdId`) aittir; kullanıcı yalnızca üyesi olduğu hanelerin verisini görür. Sistem admini de bu kurala tabidir. - Hane içi roller: **sahip** (ayarlar, üyeler), **üye** (veri girer), **izleyici** (yalnızca görüntüler). - Her sayfa, Server Action ve API, hane yetkisini `src/lib/dal.ts` üzerinden sunucuda doğrular; servisler de üyeliği ayrıca kontrol eder. ## Marka dosyaları `public/brand/`: `logo.svg` (açık tema), `logo-dark.svg` (koyu tema), `icon.svg` (uygulama ikonu), `icon-maskable.svg` (Android/iOS, köşesiz). Yazı Noto Sans Bold (OFL) harf yollarıdır. İkonları değiştirdikten sonra `npm run icons` çalıştırın; favicon ve PWA ikonları bu kaynaklardan üretilir. ## Docker imajı ```bash docker build --build-arg APP_VERSION=$(node -p "require('./package.json').version") \ --build-arg APP_COMMIT=$(git rev-parse --short HEAD) -t butcem . ``` Konteyner başlarken `docker-entrypoint.sh` önce başlatma adımını (`scripts/bootstrap.mjs`: replica set kontrolü, bekleyen migration'lar, `SEED_ADMIN_*` tanımlıysa ilk admin) sonra uygulamayı çalıştırır. ## Canlı ortam - Kurulum, ortam değişkenleri, domain, volume, otomatik deploy, yedekleme ve geri yükleme: [`docs/DEPLOY.md`](docs/DEPLOY.md) - MongoDB replica set ve uygulama kullanıcısı: [`docs/MONGODB-KURULUM.md`](docs/MONGODB-KURULUM.md) - Duman testi: `scripts/smoke-test.sh https://butcem.ta1sph.website` - Yedek / geri yükleme betikleri: `scripts/backup/`