26 KiB
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
- Tüm proje veritabanlarına merkezi read-only erişim (raporlama, metrik, debug)
- Her projenin "internal admin API"sine merkezi mutasyonel erişim (kontrollü, audit'li)
- Cross-project event observability (Redis Streams üzerinden)
- Operasyonel komutlar (Coolify restart, migration trigger, backup status) için tek pencere
- Sıkı güvenlik: closed network, MFA mecburi, audit log her aksiyon için
- Solo founder ergonomics: hızlı navigation, klavye-friendly, mobil görüntülenebilir
- 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_readerrolü - Sadece
SELECTyetkisi, 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-sdkpaketi ü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
eventstablosuna 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ınsessions,accounts— Better Auth tablolarıprojects— yönetilen projelerin meta-verisi (connection string referansları, vb.)audit_log— her aksiyon, append-onlyevents— spoke'lardan gelen event'lerin kopyasımodule_registry— Catvicer benzeri config-driven projeler için modül durumusecrets_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.exampleplaceholder'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_logtablosu — 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:
- Port scanner'lar VPS'i bulsa bile panel'e ulaşamaz (port kapalı)
- DNS leak veya subdomain enumeration olsa bile Cloudflare Access olmadan login sayfasına bile ulaşılamaz
- 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_readerrolü, sadeceSELECT - 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_TOKENenv'i ile başlar - Panel bu token'ı
X-Internal-Tokenheader'ı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
- Cloudflare üzerinde
semih.aizone'unaspCNAME kaydı eklenir - Cloudflare Tunnel kurulur (
cloudflared tunnel create super-panel) - Tunnel UUID'si DNS'e CNAME olarak otomatik eklenir (Cloudflare One UI üzerinden)
- Cloudflare Access policy:
- Application:
sp.semih.ai - Policy: Allow if email in
["semih@thinxtra.studio"]AND TOTP verified - Session duration: 24 saat
- Application:
- HSTS açık, secure cookies (Better Auth zaten varsayılan secure cookie ile yapılandırılır)
- Cloudflare proxy açı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 devile 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-cloudflareddışarıyla konuşur, o da sadece Cloudflare edge'iyle panel-webvepanel-worker,panel-postgresile internal hostname üzerinden konuşur (panel-postgres:5432)
Volumes
panel-postgres-data— kalıcı PG verisipanel-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ı:
- Docker image build
- Migration:
prisma migrate deploy(sadece panel DB) - Health check:
/api/health200 dönüyorsa container "live" - 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/sasepaketi (read-only Prisma client)@panel/admin-sdk/sasepaketi (boş skeleton, Sase.tr'ye internal API eklendikçe doldurulacak)- Sase.tr DB'sinde
super_panel_readerrolü - 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
eventstablosu - 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:
- Tailscale tamamen out mı? Cloudflare Tunnel + Access yeterli mi yoksa "belt and suspenders" yaklaşımı için Tailscale fallback şart mı?
- Sentry self-hosted mı kalacak yoksa cloud'a mı geçilecek? Self-hosted Phase 1'de zaten var, panel oraya bağlanacak.
- Infisical Phase 1'de mi gelsin Phase 4'te mi? Phase 1 hızı açısından Coolify env yeterli, ama Infisical de Phase 0'da kurulabilir.
- Stripe webhook central receiver Phase 5'te mi kalmalı? Eğer şu an Stripe entegre edilen proje yoksa beklemek mantıklı.
- 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