Files
sp/super-panel-prd.md

26 KiB
Raw Blame History

Süper Panel — Mimari & Altyapı PRD

Proje Adı: Süper Panel Domain: sp.semih.ai Sahibi: Thinxtra SaaS Studio (solo founder) Doküman Türü: Mimari & Altyapı PRD (ürün özellikleri kapsam dışıdır) Durum: Draft v1.0


1. Vizyon ve Bağlam

Thinxtra SaaS Studio portföyündeki birden çok bağımsız projeyi (Sase.tr, Catvicer, Kokpit, otoyedekparca.co, Eryaman Evleri TYY, 312 Döner ve gelecekteki projeler) tek bir merkezi yönetim katmanından izleme, yönetme ve otomatize etme yeteneği sağlamak.

Süper Panel bir SaaS değildir. Dış dünyaya kapalı, tek kullanıcılı (founder), salt yönetimsel amaçlı bir internal tool'dur. Bu doküman, panel iskeletini ve altyapısını tanımlar; spesifik proje feature'ları (Sase.tr kullanıcı yönetimi, Catvicer tenant modül aktivasyonu, vb.) ayrı feature PRD'leriyle ele alınacaktır.

Çözülen Temel Problem

Solopreneur olarak birden çok projeyi yönetirken yaşanan friction:

  • Her projenin admin paneline ayrı ayrı login olmak
  • Cross-project metriklerin manuel toplanması (toplam MRR, toplam aktif kullanıcı, vb.)
  • Operasyonel komutların (deploy, migrate, backup kontrolü) farklı yerlerde dağınık olması
  • Audit / trace edilebilirlik eksikliği

Süper Panel'in Konumu

Mevcut araçlarla ilişki:

  • Coolify: Deployment ve container management katmanı; Süper Panel bunu tüketir, yerine geçmez
  • OpenObserve / Uptime Kuma: Observability tooling; Süper Panel bunların API'lerinden veri çeker
  • Sentry: Error monitoring; Süper Panel bağlantı kurar
  • Her projenin kendi admin paneli: Mevcut paneller silinmez; Süper Panel onların üstüne bir meta-katman koyar

2. Hedefler ve Hedef Olmayanlar

Hedefler

  1. Tüm proje veritabanlarına merkezi read-only erişim (raporlama, metrik, debug)
  2. Her projenin "internal admin API"sine merkezi mutasyonel erişim (kontrollü, audit'li)
  3. Cross-project event observability (Redis Streams üzerinden)
  4. Operasyonel komutlar (Coolify restart, migration trigger, backup status) için tek pencere
  5. Sıkı güvenlik: closed network, MFA mecburi, audit log her aksiyon için
  6. Solo founder ergonomics: hızlı navigation, klavye-friendly, mobil görüntülenebilir
  7. Production'a 4-6 hafta içinde Phase 1 ile çıkmak

Hedef Olmayanlar

  • Public bir SaaS ürünü olmak (asla satışa çıkmayacak)
  • Multi-user / ekip kullanımı (RBAC karmaşıklığı yok, tek kullanıcı: founder)
  • Müşteri-facing herhangi bir UI
  • Direkt müşteri verilerinin Süper Panel'de aggregate edilmesi (hassas veriler kaynak projede kalmalı)
  • Projelere ait business logic'in panel tarafına taşınması (panel sadece consume eder, business logic kaynak projede kalır)
  • Ödeme akışlarının kullanıcı tarafından gerçekleştirilmesi (sadece görüntüleme/refund tetikleme; ödeme alma kaynak projede)

3. Mimari: Hub & Spoke

                    ┌──────────────────────────────┐
                    │     Süper Panel (Hub)        │
                    │       sp.semih.ai            │
                    │                              │
                    │  Next.js Web  +  Worker      │
                    │  Panel PG     +  Panel Redis │
                    └──────┬───────────┬───────────┘
                           │           │
        ┌──────────────────┼───────────┼──────────────────┐
        │                  │           │                  │
        ▼                  ▼           ▼                  ▼
┌──────────────┐  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐
│   Sase.tr    │  │  Catvicer    │  │   Kokpit     │  │  …diğerleri  │
│  (Spoke)     │  │  (Spoke)     │  │  (Spoke)     │  │              │
│              │  │              │  │              │  │              │
│ DB (RO user) │  │ DB (RO user) │  │ DB (RO user) │  │ DB (RO user) │
│ /internal    │  │ /internal    │  │ /internal    │  │ /internal    │
│ Redis Stream │  │ Redis Stream │  │ Redis Stream │  │ Redis Stream │
└──────────────┘  └──────────────┘  └──────────────┘  └──────────────┘

Üç Erişim Katmanı

Her spoke projeyle üç farklı yolla iletişim kurulur; her birinin amacı ve güvenlik profili farklıdır.

Katman 1: Read-Only Database Connection

  • Her projenin PostgreSQL veritabanında super_panel_reader rolü
  • Sadece SELECT yetkisi, schema migration yetkisi yok
  • Her proje için ayrı Prisma client (@panel/db-sase, @panel/db-catvicer, vb.)
  • Kullanım: metrik dashboard'ları, raporlama, debug query'leri, listeleme
  • Asla yazma için kullanılmaz

Katman 2: Internal Admin API (mutasyonel)

  • Her proje kendi tarafında /internal/admin/* endpoint'leri expose eder
  • Bu endpoint'ler sadece Süper Panel'den çağrılabilir (network-level whitelist + token auth)
  • Public internet'ten erişilemez
  • Süper Panel ortak bir @panel/admin-sdk paketi üzerinden type-safe çağrı yapar
  • Tüm çağrılar Süper Panel tarafında audit log'a yazılır (kim, ne zaman, hangi endpoint, hangi payload, response status)
  • Business logic kaynak projede kalır; panel sadece tetikler

Katman 3: Event Bus (asenkron observability)

  • Redis Streams üzerinden event publish/subscribe
  • Her proje önemli olayları kendi stream'ine yazar (örn. sase:events, catvicer:events)
  • Panel worker'ı bu stream'leri tüketir, panel'in kendi events tablosuna persist eder ve real-time UI'a (SSE veya WebSocket ile) push eder
  • Event şeması versiyonlu (event_type, version, source, payload, occurred_at)
  • Worker yeniden başlasa bile consumer group offset'i sayesinde event kaybı olmaz

4. Tech Stack

Frontend (apps/web)

Katman Seçim Gerekçe
Framework Next.js 16 (App Router) Fullstack tek deploy, Server Components ile DB direkt erişim
UI Library shadcn/ui (blocks-first) Copy-paste, owned code, customization serbestliği
Styling Tailwind CSS v4 shadcn ile native uyum
Data Fetching TanStack Query Cache, optimistic update, mutation lifecycle
Tables TanStack Table Büyük veri grid'leri için olmazsa olmaz
URL State nuqs Filtre/pagination URL persistence
Charts Tremor + Recharts Dashboard görselleri
Form React Hook Form + Zod Type-safe validation
Real-time Server-Sent Events Bidirectional gerek yok, SSE yeterli
Icons Lucide React shadcn default

Backend (apps/web içinde)

Ayrı bir backend süreci yok. Next.js'in kendisi backend:

  • Server Components: read-only DB query'leri direkt server'da
  • Server Actions: mutasyonel işlemler (admin API çağrıları, audit log yazımı)
  • Route Handlers: webhook receiver'ları (Stripe central webhook gibi), cron trigger endpoint'leri
  • Middleware: auth gate, request logging, rate limit

Worker (apps/worker)

Ayrı bir Node.js process'i, ayrı container:

  • Plain Node + tsx (TypeScript runtime)
  • BullMQ (job queue, scheduled jobs)
  • node-cron (basit zamanlı tetikler)
  • Aynı Prisma client'ları, aynı admin SDK, kod paylaşımı paketler üzerinden

NestJS gibi framework yok — solopreneur için gereksiz boilerplate. Worker tek dosyalık index.ts'ten başlayıp organic büyür.

Panel'in Kendi Veritabanı (PostgreSQL)

Hetzner VPS'te ayrı bir PostgreSQL instance veya mevcut PostgreSQL üzerinde ayrı bir DB. İçerik:

  • users — sadece kendi hesabın
  • sessions, accounts — Better Auth tabloları
  • projects — yönetilen projelerin meta-verisi (connection string referansları, vb.)
  • audit_log — her aksiyon, append-only
  • events — spoke'lardan gelen event'lerin kopyası
  • module_registry — Catvicer benzeri config-driven projeler için modül durumu
  • secrets_metadata — secret'ların kendisini değil, hangi secret nerede var bilgisini tutar
  • Materialized view'lar — cross-project aggregate metrikler (nightly refresh)

Cache & Queue

  • Redis (panel'in kendi instance'ı): BullMQ queue, session cache, Redis Streams consumer state

Object Storage

  • MinIO (mevcut Maestro instance'ı): audit log artifact'leri (büyük JSON payload'lar, screenshot'lar)

Auth

  • Better Auth (mevcut Eryaman/Catvicer'la tutarlı)
  • TOTP zorunlu, Passkey opsiyonel ama önerilir
  • Tek kullanıcı: founder; account creation kapalı
  • Session 8 saat, rolling refresh
  • IP audit (her login'in IP'si loglanır)

Secret Management

  • Phase 1-3: Coolify environment variables (encrypted at rest)
  • Phase 4+: Infisical self-hosted (zaten Phase 4 roadmap'inde)
  • Hiçbir secret git'e commit edilmez; .env.example placeholder'larla repo'da

Observability

  • Sentry self-hosted (mevcut) — frontend ve backend error tracking
  • OpenObserve (mevcut) — application log'ları
  • Uptime Kuma — panel'in kendisi için uptime
  • Panel'in kendi audit_log tablosu — business action trail

5. Güvenlik Modeli

Network Topolojisi

[Tarayıcı] → [Cloudflare] → [Cloudflare Tunnel] → [Coolify Container]
                ↓
        [Cloudflare Access]
        Email allowlist + TOTP
  • Origin sunucuda public port açık değil. Hetzner VPS firewall'unda sadece SSH + Tailscale; HTTP/HTTPS port'ları kapalı
  • Cloudflare Tunnel (cloudflared) bir sidecar container olarak çalışır, Coolify container'ına internal network üzerinden bağlanır
  • Public DNS: sp.semih.ai → Cloudflare → Tunnel → Container
  • Cloudflare Access katmanı: email allowlist (sadece founder email'i) + TOTP zorunlu

Bu yapı şu güvenceleri sağlar:

  1. Port scanner'lar VPS'i bulsa bile panel'e ulaşamaz (port kapalı)
  2. DNS leak veya subdomain enumeration olsa bile Cloudflare Access olmadan login sayfasına bile ulaşılamaz
  3. Cloudflare Access bypass edilse bile Better Auth + TOTP devrede

İki-Faktörlü Auth Katmanı

Katman Mekanizma Bypass edilirse
1 Cloudflare Access (email + TOTP) Login sayfası görünür ama Better Auth durur
2 Better Auth (password + TOTP) Erişim engellenir

Spoke Projelere Erişim Güvenliği

Read-only DB connection

  • Her spoke PostgreSQL'inde super_panel_reader rolü, sadece SELECT
  • Connection string Coolify env'de, sadece panel container'ından erişilebilir
  • Spoke PostgreSQL'lerinin public erişimi zaten kapalı (Coolify internal network)

Internal Admin API

İki opsiyon, Phase'lere göre seçilebilir:

Opsiyon A (Phase 1-2): Shared Secret Token

  • Her proje INTERNAL_API_TOKEN env'i ile başlar
  • Panel bu token'ı X-Internal-Token header'ında gönderir
  • Spoke tarafında middleware token doğrular + Coolify internal network IP kontrolü
  • Basit, hızlı kurulur

Opsiyon B (Phase 4+): mTLS

  • Self-signed CA, panel ve her spoke için client cert
  • Daha güçlü ama operational complexity artıyor
  • Phase 4'te degerlendirilir

Audit

Her admin API çağrısı panel tarafında persist edilir:

audit_log (
  id, actor_user_id, project_key, endpoint, method,
  request_payload_hash, response_status, duration_ms,
  source_ip, user_agent, created_at
)

Payload'ın kendisi MinIO'ya yazılır (büyük olabilir); tabloda sadece hash + MinIO key.

Veri Sınıflandırması

  • Hassas veriler asla panel DB'sine kopyalanmaz (KVKK + minimize prensibi)
  • Panel sadece "pointer" tutar: hangi spoke'ta hangi user_id var
  • Listeleme yapılırken spoke'a query gider, sonuç render edilir, panel DB'sinde saklanmaz
  • Aggregate metrikler (toplam kullanıcı sayısı, MRR, vb.) materialized view'larda nightly hesaplanır — bunlar PII değil

6. Monorepo Yapısı

super-panel/
├── apps/
│   ├── web/                          # Next.js 16 - admin UI + API
│   │   ├── app/
│   │   │   ├── (auth)/               # Login, 2FA setup
│   │   │   ├── (dashboard)/          # Auth-gated rotalar
│   │   │   │   ├── page.tsx          # Overview dashboard
│   │   │   │   ├── projects/         # Proje detay sayfaları
│   │   │   │   ├── operations/       # Coolify, backup, deploy
│   │   │   │   ├── events/           # Cross-project event log
│   │   │   │   ├── audit/            # Audit log viewer
│   │   │   │   └── settings/         # Self-config
│   │   │   └── api/
│   │   │       ├── webhooks/         # Stripe central, vb.
│   │   │       └── trigger/          # Cron trigger endpoint'leri
│   │   ├── components/               # App-specific components
│   │   ├── lib/                      # Auth, db connections, utils
│   │   └── next.config.ts
│   └── worker/                       # Node + BullMQ + cron
│       ├── src/
│       │   ├── jobs/                 # Job tanımları
│       │   ├── schedulers/           # node-cron schedule'ları
│       │   ├── consumers/            # Redis Streams consumer'ları
│       │   └── index.ts
│       └── tsconfig.json
├── packages/
│   ├── db-clients/                   # Her spoke için Prisma client
│   │   ├── sase/
│   │   ├── catvicer/
│   │   ├── kokpit/
│   │   └── panel/                    # Panel'in kendi DB'si
│   ├── admin-sdk/                    # Spoke admin API client'ları
│   │   ├── sase/
│   │   ├── catvicer/
│   │   └── ...
│   ├── event-bus/                    # Redis Streams wrapper
│   ├── ui/                           # Shared shadcn components
│   ├── audit/                        # Audit log helper
│   └── config/                       # ESLint, TS, Tailwind shared config
├── .github/workflows/
│   ├── ci.yml                        # lint + typecheck + test
│   └── deploy.yml                    # Coolify webhook trigger
├── docker/
│   ├── web.Dockerfile
│   ├── worker.Dockerfile
│   └── cloudflared.Dockerfile
├── docker-compose.yml                # Lokal dev için
├── turbo.json
├── pnpm-workspace.yaml
└── package.json

Paket Yönetimi

  • pnpm + workspaces
  • Turborepo — paralel build, cache
  • TypeScript strict mode, project references

Tooling

Amaç Araç
Lint ESLint (Antfu config)
Format Prettier
Git hooks Lefthook
Commit message Commitlint (Conventional Commits)
Unused detection Knip
Env validation T3 Env
Unit test Vitest
E2E test Playwright
Type check tsc --noEmit

7. UI Bilgi Mimarisi

Spesifik feature'lar değil, sayfa hiyerarşisi ve shadcn block mapping'i.

Sayfa Hiyerarşisi

/                           — Dashboard (cross-project overview)
/projects                   — Proje listesi
/projects/[key]             — Tek proje detay (her proje için kendi feature PRD'sinde tanımlanacak)
/operations                 — Coolify deploy, backup status, migration runner
/events                     — Cross-project event timeline (Redis Streams'ten gelen)
/audit                      — Audit log viewer
/settings                   — Panel ayarları, secret management, profile
/login                      — Better Auth entry
/setup-2fa                  — İlk login'de TOTP setup

shadcn Block Mapping

Sayfa Önerilen Block Notlar
Tüm auth-gated sayfalar sidebar-07 veya sidebar-13 Collapsible, proje listesi sidebar'da grupların
Dashboard dashboard-01 Chart + KPI cards
Liste sayfaları (audit, events) data-table examples TanStack Table ile entegre
Settings settings-04 Sekmeli yapı
Login login-04 Better Auth ile bağlanır
Empty state'ler shadcn Empty component Yeni proje eklenmediğinde
Command palette (global search) command component (Cmd+K) Hızlı navigation, proje arama

Tasarım Prensipleri

  • Density-first: Solo admin tool, dense layout, max info per screen
  • Klavye navigation: Tüm primary action'lar shortcut'lı (Cmd+K, j/k navigation, Enter to confirm)
  • Dark mode default: Eye strain için
  • Mobile-respectful: Tam responsive değil ama panik durumda mobilden bakılabilir olmalı (deploy status, alarm görme)
  • No marketing pages: Hero section, feature highlight, vb. yok

8. Domain ve DNS Yapılandırması

sp.semih.ai

  1. Cloudflare üzerinde semih.ai zone'una sp CNAME kaydı eklenir
  2. Cloudflare Tunnel kurulur (cloudflared tunnel create super-panel)
  3. Tunnel UUID'si DNS'e CNAME olarak otomatik eklenir (Cloudflare One UI üzerinden)
  4. Cloudflare Access policy:
    • Application: sp.semih.ai
    • Policy: Allow if email in ["semih@thinxtra.studio"] AND TOTP verified
    • Session duration: 24 saat
  5. HSTS açık, secure cookies (Better Auth zaten varsayılan secure cookie ile yapılandırılır)
  6. Cloudflare proxy ık (orange cloud) — DDoS + WAF + bot protection ücretsiz alınır

Lokal Development

  • localhost:3000 (web), localhost:3001 (worker health)
  • Better Auth local'da TOTP zorunluluğunu opsiyonel yapabilir (env flag)
  • pnpm dev ile her ikisi paralel çalışır (Turborepo)

9. Coolify Deployment Planı

Container'lar

Container Build Source Purpose Resource (başlangıç)
panel-web docker/web.Dockerfile Next.js production 1 vCPU / 1 GB
panel-worker docker/worker.Dockerfile Node + BullMQ 0.5 vCPU / 512 MB
panel-postgres Coolify Database Panel'in kendi DB'si 1 vCPU / 1 GB + Volume
panel-redis Coolify Database Queue + cache + streams 0.5 vCPU / 512 MB
panel-cloudflared docker/cloudflared.Dockerfile Tunnel 0.25 vCPU / 256 MB

Networking

  • Tüm container'lar aynı Coolify internal network'te
  • Sadece panel-cloudflared dışarıyla konuşur, o da sadece Cloudflare edge'iyle
  • panel-web ve panel-worker, panel-postgres ile internal hostname üzerinden konuşur (panel-postgres:5432)

Volumes

  • panel-postgres-data — kalıcı PG verisi
  • panel-redis-data — RDB snapshot
  • MinIO için ayrı bir volume gerekmez (mevcut Maestro MinIO kullanılır)

Environment Variables (Coolify UI'da)

Phase 1'de en kritik olanlar (T3 Env ile validate edilecek):

DATABASE_URL_PANEL=...
DATABASE_URL_SASE_RO=...
DATABASE_URL_CATVICER_RO=...
DATABASE_URL_KOKPIT_RO=...
REDIS_URL=...
BETTER_AUTH_SECRET=...
BETTER_AUTH_URL=https://sp.semih.ai
INTERNAL_API_TOKEN_SASE=...
INTERNAL_API_TOKEN_CATVICER=...
SASE_ADMIN_API_BASE=https://internal.sase.tr
CATVICER_ADMIN_API_BASE=https://internal.catvicer.com
MINIO_ENDPOINT=...
MINIO_ACCESS_KEY=...
MINIO_SECRET_KEY=...
SENTRY_DSN=...
NODE_ENV=production

CI/CD

  • GitHub Actions: PR'da lint + typecheck + test
  • main'e merge → Coolify deploy webhook → otomatik deploy
  • Deploy adımları:
    1. Docker image build
    2. Migration: prisma migrate deploy (sadece panel DB)
    3. Health check: /api/health 200 dönüyorsa container "live"
    4. Eski container 30 saniye grace period sonrası kapatılır

Backup

  • panel-postgres: Coolify scheduled backup, daily, S3-compatible storage'a (MinIO)
  • 30 gün retention
  • Aylık restore test (manuel)

10. Phased Roadmap

Phase 0 — Foundation (1 hafta)

  • Monorepo iskeleti (pnpm + Turborepo)
  • Next.js + Tailwind v4 + shadcn init
  • Better Auth setup, TOTP enrollment flow
  • Panel PostgreSQL şeması v1 (users, sessions, audit_log, projects)
  • Coolify üzerinde dev environment
  • Cloudflare Tunnel + Access yapılandırması
  • sp.semih.ai çalışır, login yapılabilir, dashboard boş ama render olur

Çıktı: Login olabildiğin boş bir panel.

Phase 1 — İlk Spoke Bağlantısı (1-2 hafta)

  • @panel/db-clients/sase paketi (read-only Prisma client)
  • @panel/admin-sdk/sase paketi (boş skeleton, Sase.tr'ye internal API eklendikçe doldurulacak)
  • Sase.tr DB'sinde super_panel_reader rolü
  • Projects sayfası: Sase.tr için generic "data ulaşılabilir mi" health check
  • Audit log yazımı tam çalışır

Çıktı: Bir spoke'a uçtan uca read-only bağlantı.

Phase 2 — Multi-Spoke Pattern (2-3 hafta)

  • Catvicer, Kokpit, otoyedekparca, Eryaman için aynı pattern (db-clients + admin-sdk skeleton)
  • Project switcher (Cmd+K palette)
  • Common operations: connection health, basic metrics widget
  • Generic dashboard'da her proje için "card" görünümü

Çıktı: Tüm projelere read-only uçtan uca erişim.

Phase 3 — Worker & Event Bus (1-2 hafta)

  • Worker container deploy
  • BullMQ queue ve dashboard
  • Redis Streams consumer pattern (packages/event-bus)
  • Bir spoke'ta (örn. Sase.tr) test publisher; panel'de consumer ve events tablosu
  • SSE endpoint ile UI'a real-time event push
  • Scheduled jobs: nightly materialized view refresh

Çıktı: Asenkron event flow + scheduled job altyapısı.

Phase 4 — Security & Operations Hardening (1-2 hafta)

  • Infisical self-hosted entegrasyonu (env'ler buradan çekilir)
  • mTLS opsiyonel olarak admin API'lere
  • Audit log archive: 90 gün sonrası MinIO'ya taşınır
  • Rate limit middleware
  • Disaster recovery dokümantasyonu + dry-run test
  • Backup restore drill

Çıktı: Production-grade security posture.

Phase 5 — Operational Tooling (2-3 hafta)

  • Coolify API entegrasyonu: deploy trigger, restart, env update UI
  • Migration runner (her proje için "Migrate Now" butonu, log stream)
  • Backup status dashboard (her projenin son backup'ı, boyut, başarı)
  • Stripe central webhook receiver
  • Spesifik proje feature'ları ayrı PRD'lerde — bu phase sonrası başlar

Çıktı: "Tek tıkla operasyon" katmanı.


11. Riskler ve Azaltma Stratejileri

Risk Olasılık Etki Azaltma
PG connection pool patlaması (N proje × pool size) Yüksek Yüksek PgBouncer veya per-client küçük pool (5 max); spoke'lara fiziksel ayrı PG instance
Cloudflare Tunnel down Düşük Yüksek Acil durum için Tailscale ikinci yol; founder bu emergency access'i ayarlar
Panel'in kendi DB'si data loss Düşük Orta Daily backup + monthly restore drill; spoke verileri panel'de yok zaten
Spoke admin API'leri panel'e güvenir, panel compromise olursa Düşük Yüksek Audit log + TOTP + Cloudflare Access üç katmanlı koruma; mTLS Phase 4'te
Schema drift (spoke DB schema değişir, panel client güncellenmez) Yüksek Orta CI'da spoke'ların Prisma schema'larına diff check; semver gibi versiyonla
Single point of failure (panel down olunca alarm gelmez) Orta Orta Uptime Kuma'yı panel-dışı bir VPS'te tut; SMS/Telegram alert
Founder TOTP cihazını kaybeder Düşük Kritik Recovery code'lar Bitwarden'da; Cloudflare Access fallback ile re-enroll
Worker silently fail (job stuck) Orta Orta BullMQ failed job alert → Telegram; daily summary email

12. Başarı Kriterleri

Phase 1 tamamlandığında:

  • sp.semih.ai üzerinden login + TOTP + dashboard render
  • En az 1 spoke'tan canlı veri okunabiliyor
  • Her aksiyon audit_log'a yazılıyor
  • Cloudflare Access + Better Auth iki katmanı çalışıyor
  • Coolify üzerinde deploy + auto-migration çalışıyor
  • Mobil tarayıcıdan login olunabiliyor

Phase 5 tamamlandığında:

  • 5+ proje aynı pattern ile bağlanmış
  • Real-time event stream çalışıyor
  • Bir Coolify deploy panel'den tetiklenebiliyor
  • Daily backup restore drill başarılı
  • Pazartesi sabahı 30 saniyede tüm projelerin durumunu görebiliyorum

13. Açık Sorular

Sonraki iterasyonda netleştirilecek:

  1. Tailscale tamamen out mı? Cloudflare Tunnel + Access yeterli mi yoksa "belt and suspenders" yaklaşımı için Tailscale fallback şart mı?
  2. Sentry self-hosted mı kalacak yoksa cloud'a mı geçilecek? Self-hosted Phase 1'de zaten var, panel oraya bağlanacak.
  3. Infisical Phase 1'de mi gelsin Phase 4'te mi? Phase 1 hızıısından Coolify env yeterli, ama Infisical de Phase 0'da kurulabilir.
  4. Stripe webhook central receiver Phase 5'te mi kalmalı? Eğer şu an Stripe entegre edilen proje yoksa beklemek mantıklı.
  5. Mobile-first deneyim ne kadar önemli? "Acil durumda mobil'den bakma" senaryosu için ne kadar yatırım yapılacak?

14. Karar Logu

Tarih Karar Gerekçe
2026-05-13 Next.js fullstack, NestJS yok Solopreneur için tek deploy, daha az boilerplate
2026-05-13 shadcn blocks tabanlı UI, ixartz boilerplate reddedildi Stack uyumsuzluğu (Clerk, Drizzle), gereksiz dependency yükü
2026-05-13 Cloudflare Tunnel + Access ana erişim yolu Public DNS koruması, port kapatma, ücretsiz
2026-05-13 Better Auth (Clerk yerine) Diğer projelerle tutarlılık, self-hosted, paid service yok
2026-05-13 Prisma multi-client (Drizzle yerine) Mevcut spoke'larda Prisma var, ORM birleşmesi
2026-05-13 Plain Node worker (NestJS worker yerine) Solopreneur, framework overhead gereksiz

Doküman Sonu