Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Restoran yönetim sistemi: sipariş, stok, maliyet ve tedarik.
Translation pending
BusinessTypeScript · PLpgSQLGitHub @ahmetkurtbmOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Çok kiracılı restoran yönetimi: POS, mutfak ekranı, reçeteli stok, RLS ile izolasyon
Translation pending
Loading the full README.
Read the full README ↗Çok kiracılı, rol bazlı bir restoran yönetim sistemi: sipariş alma, mutfak ekranı, kasa, reçeteye dayalı stok düşümü, maliyet kontrolü, satın alma ve denetim kaydı. Erişim kontrolü uygulamada değil, veritabanında (PostgreSQL Row Level Security) zorunlu.
Sorun. Küçük ve orta ölçekli restoranlar sipariş, mutfak, kasa ve stok için ayrı araçlar ya da kâğıt kullanır. Satış stoktan düşmez, reçete maliyeti ve zayiat bilinmez; birden fazla şubede kimin hangi veriyi gördüğü kontrol edilemez.
Çözüm. Tek bir sistemde masadan siparişe, mutfak ekranından kasaya ve gün sonuna kadar akış. Her satış reçeteye göre stoktan düşer, teorik ve fiili tüketim karşılaştırılır. Patron canlı ciroyu ve bekleyen onayları telefondan görür.
Durum. Çekirdek akışlar çalışıyor ve demo olarak yayında. Yazarkasa, e-Arşiv ve paket platformu entegrasyonları adaptör arayüzüyle hazır ama ticari anlaşma gerektirdiği için şimdilik mock (ayrıntı aşağıda).
force row level security; uygulamadaki bir hata başka restoranın verisini açamaz. pgTAP testleriyle doğrulanır.| Garson: salon ve masalar | Mutfak ekranı |
|---|---|
| Patron: raporlar | Patron: telefonda |
|---|---|
| Mod | Ne zaman | Veritabanı |
|---|---|---|
| Demo | DATABASE_URL tanımlı değilken (Vercel) | Sunucu sürecinde çalışan PGlite; her açılışta migration'lar ve demo verisi yüklenir, birkaç saatte bir sıfırlanır |
| Yerel | DATABASE_URL tanımlıyken | Docker'daki PostgreSQL 17; veri kalıcıdır |
İki modda da aynı migration'lar, aynı RLS politikaları ve aynı tetikleyiciler çalışır; dış
bir servise (Supabase vb.) bağlantı yoktur. Demo girişinde her rol için tek tıkla giriş
düğmesi vardır; bütün demo hesaplarının şifresi demo1234.
/m): canlı ciro, bekleyen onaylar, olay akışıAşağıdakiler adaptör arayüzüyle hazır ama mock çalışıyor; gerçek bağlantı ticari anlaşma veya sertifika gerektiriyor:
| Entegrasyon | Durum |
|---|---|
| ÖKC (yeni nesil yazarkasa) fişi | Mock (src/lib/integrations/fiscal-device.ts) |
| e-Arşiv fatura (GİB) | Mock (src/lib/integrations/e-invoice.ts) |
| Yemeksepeti / Getir / Trendyol Go | Mock (src/lib/integrations/delivery-channel.ts) |
| Bildirim e-postaları | Kuyruk ve kurallar gerçek, gönderim mock (src/lib/notifications/process-queue.ts) |
Fiş ve hakediş mutabakatı bu yüzden Excel ile içe aktarılan verilerle yapılır.
Next.js 16 (App Router)
Server Component'ler → sayfa verisini oturumdaki kullanıcının kimliğiyle okur
Server Action'lar → yazma işlemleri; tenant_id her zaman doğrulanmış oturumdan
src/proxy.ts → nonce'lu CSP, oturum tazeleme, rol bazlı yönlendirme
src/lib/db
client.ts → supabase-js istemcileri; istekleri ağa değil süreç içi handler'a gönderir
rest.ts → PostgREST sorgularını (select, iç içe ilişkiler, filtreler, upsert) SQL'e çevirir
auth.ts → şifreyle giriş, token yenileme, personel hesabı; HS256 JWT
storage.ts → menü görselleri storage.objects tablosunda
engine.ts → DATABASE_URL varsa node-postgres, yoksa PGlite
PostgreSQL
RLS → her tabloda enable + force; politikalar JWT claim'lerinden okur
custom_access_token_hook → JWT'ye tenant_id / branch_id / app_role yazar
Trigger'lar → durum geçişleri, append-only denetim kaydı, bildirim üretimi
db/compat.sql → migration'ların beklediği roller ve auth/storage şemaları
Sorgu katmanı olarak supabase-js kullanılıyor, ama arkasında Supabase yok: her istek
transaction içinde anon, authenticated ya da service_role rolüne geçip JWT
claim'lerini request.jwt.claims olarak ayarlar, böylece RLS politikaları Supabase'teki
gibi çalışır.
tenant_id ve force row level security; kiracı kimliği istemciden alınmazsrc/lib/auth/access.ts, src/proxy.ts) kullanıcı deneyimi içindir; veri erişimini RLS belirlerAUTH_SECRET ile imzalanır; arka arkaya 5 hatalı girişte hesap 15 dakika kilitlenirservice_role yalnızca sunucuda ve yalnızca kullanıcı kimliğiyle yapılamayan işlerde kullanılır (QR sipariş, stok düşümü, personel hesabı); modül server-only ile istemciye girmesi engellenirnumeric(14,4); fiyat ve KDV oranı satır anında dondurulurAçık bir sipariş veya sayım ekranındaki mutasyonlar IndexedDB'de kuyruğa alınır ve client_key
idempotency anahtarıyla senkronlanır. Service worker daha önce ziyaret edilmiş sayfaları soğuk
başlangıçta önbellekten açar. Hiç ziyaret edilmemiş bir sayfa ya da yeni masa açmak offline çalışmaz.
Gereken: Node.js 22, Docker.
Tamamı Docker'da:
docker compose up --build # http://localhost:3000
Geliştirme (veritabanı Docker'da, uygulama yerelde):
npm install
cp .env.example .env.local # DATABASE_URL ve AUTH_SECRET
docker compose up -d db
npm run db:setup # migration'lar + demo verisi
npm run dev
npm run db:reset veritabanını silip baştan kurar. DATABASE_URL boş bırakılırsa
npm run dev demo modunda açılır; Docker gerekmez.
npm run dev # geliştirme sunucusu
npm run build # üretim derlemesi
npm run typecheck # tsc --noEmit
npm run lint
npm test # Vitest: para, birim, reçete, fiyat, erişim ve JWT kuralları
npm run test:e2e # Playwright; yerel modda çalışır (DATABASE_URL gerekli)
npm run load-test # yoğun servis yük testi; yerel modda çalışır
npm run db:setup # migration'ları uygular, boşsa demo verisini yükler
Veritabanı güvenlik testleri db/tests/ altında pgTAP ile yazılmıştır
(kiracı izolasyonu, rol yetkileri, stok ve sipariş kuralları); pgTAP kurulu bir
Postgres'te psql -f ile çalıştırılır; CI her push'ta 123 testi de çalıştırır.
Next.js 16 · React 19 · TypeScript · Tailwind CSS v4 · PostgreSQL 17 (RLS, trigger'lar) · PGlite · supabase-js · Zod · ExcelJS · Vitest · Playwright · Docker