No updates detected yet. GitHub releases will appear here.
Loading the full README. The saved excerpt is shown below.
Çok kiracılı (multi-tenant) SaaS platformu — kadın kuaförleri ve güzellik salonları için abonelik modeliyle satılacak operasyon paneli. Parlak Mediatech bünyesinde geliştiriliyor, salon.parlakmediatech.com.tr altında yayınlanacak. Bu repo diğer Parlak Mediatech projelerinden tamamen bağımsızdır — ayrı Vercel projesi, ayrı Supabase projesi. Durum: Faz 1 tamam — Multi-Tenant + Auth + RLS + RBAC + Super AdminRead the full README ↗
Çok kiracılı (multi-tenant) SaaS platformu — kadın kuaförleri ve güzellik
salonları için abonelik modeliyle satılacak operasyon paneli. Parlak
Mediatech bünyesinde geliştiriliyor, salon.parlakmediatech.com.tr altında
yayınlanacak.
Bu repo diğer Parlak Mediatech projelerinden tamamen bağımsızdır — ayrı Vercel projesi, ayrı Supabase projesi.
Tenant foundation, kimlik doğrulama, temel salon oluşturma akışı, RBAC, RLS, süper admin paneli ve zorunlu cross-tenant izolasyon testleri tamamlandı ve canlı DEV veritabanına karşı doğrulandı. Randevu, müşteri CRM, finans, stok, boya formülleri, pazarlama gibi iş modülleri henüz yok — bunlar Faz 2+'a bırakıldı. Ayrıntılı mimari kararlar için onaylanmış mimari rapora bakın (proje kanalında paylaşıldı).
noUncheckedIndexedAccess vb. sıkılaştırmalar)tailwind.config.ts yok)asChild değil render prop ile kompoze edin)@supabase/ssrNext.js 16 önceki sürümlerden farklı: Middleware artık Proxy (
proxy.ts,middleware.tsdeğil),params/searchParamsher yerde async. Kod yazmadan öncenode_modules/next/dist/docs/içindeki (sürüme özel, bundled) dokümantasyona bakın — bkz.AGENTS.md.
Gereksinimler: Node.js 20.9+ (bu makinede test edildi: Node 22, pnpm 9),
Git. Supabase CLI ve Docker opsiyonel — yoksa npx supabase@latest ...
üzerinden çalışılır, local Supabase stack'i olmadan da geliştirme
sürdürülebilir (bkz. "Supabase" bölümü).
pnpm install
cp .env.example .env.local # değerleri doldurun, bkz. aşağıda
pnpm dev
http://localhost:3000 — oturum açık değilse giriş/kayıt bağlantıları,
açıksa salonlarınız + (platform admin iseniz) süper admin bağlantısı
gösterilir.
pnpm typecheck # tsc --noEmit
pnpm lint # eslint .
pnpm format # prettier --write .
pnpm build # next build
pnpm test # vitest run — cross-tenant izolasyon testleri (canlı DEV DB)
pnpm db:start # local Supabase (Docker gerekir)
pnpm db:login # npx supabase login (bir kere, tarayıcı açar)
pnpm db:link # bu repoyu DEV projesine bağla (DB şifresi ister)
pnpm db:push # migration'ları DEV projesine uygula
pnpm db:reset # local: migration'ları + seed.sql'i yeniden uygula
pnpm db:migration:new <isim>
pnpm db:types # lib/supabase/database.types.ts üret (--linked)
.env.example → .env.local. Ayrıntılı açıklamalar dosyanın içinde;
özetle:
| Değişken | Nereden | Not |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | npx supabase status ya da dashboard → API | Client'a açık, güvenlik RLS'ye dayanır |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | aynı | Client'a açık (Supabase'in yeni sb_publishable_... key formatı) |
SUPABASE_SERVICE_ROLE_KEY | dashboard → API (server ortamı) | Asla commit etmeyin / client'a sızdırmayın — sadece lib/supabase/admin.ts ve test suite fixture kurulumu kullanır |
NEXT_PUBLIC_SITE_URL | — | Local: http://localhost:3000 |
Production secret'ları repository'ye değil, Vercel proje ayarlarına girilir.
Migration tabanlı geliştirme: şema değişiklikleri supabase/migrations/*.sql
içinde, git'te versiyonlanır — dashboard'dan elle şema değişikliği yapılmaz.
20 migration canlı DEV projesinde uygulanmış durumda (tenants, RBAC,
RLS politikaları, yardımcı fonksiyonlar, onboarding — bkz.
supabase/migrations/README.md).
Bu makinede Docker kurulu değil; Supabase CLI npx supabase@latest ile
kullanılıyor (pnpm db:* script'leri buna göre). Docker mevcutsa
pnpm db:start ile tam local stack (Postgres + Auth + Storage + Studio)
ayağa kalkar — zorunlu değil, migration'lar doğrudan DEV projesine
uygulanıyor.
lib/supabase/database.types.ts gerçek şemadan üretildi
(pnpm db:types) — Database generic'i client.ts/server.ts/admin.ts
içinde kullanılıyor.
This is the beginning of the README. Read the rest at the original. Read the full README ↗