Skip to Content
DocsAdmin PanelArchitectureYönetim Paneli — Genel Bakış

Yönetim Paneli — Genel Bakış

smart-menu-adisyon-admin-panel, Adisyon POS sisteminin web tabanlı yönetim panelidir. Restoran yöneticisi menüyü, stoku, cihazları, personeli, restoran ayarlarını, senkronizasyonu, hata ve denetim kayıtlarını, e-belgeleri ve aboneliği buradan yönetir.

Sistemdeki yeri

Adisyon dört repodan oluşur. Hepsi aynı Jira projesini (SCRUM) ve aynı issue-key sırasını paylaşır:

RepoRolü
smart_menu_adisyon_uiFlutter istemcisi — POS, Garson, KDS ve Yazıcı uygulama rolleri
smart-menu-adisyon-backend-devGo backend — sipariş, ödeme, mutfak, yazdırma, error_logs
smart-menu-adisyon-localdb-devRestorandaki yerel Postgres şeması, migration’lar ve seed’ler
smart-menu-adisyon-admin-panelBu repo — Next.js yönetim paneli

Panel henüz kendi iş mantığını taşımıyor. Diğer repoların yaptığı işin web yüzeyi olarak tasarlandı; ekranlar şu anda sabit örnek veriyle (fixture) çalışıyor ve hiçbir backend’e bağlı değil.

Mevcut durum

  • 12 yönetim ekranının tamamı arayüz olarak hazır. Ekranlar Claude Design’da hazırlanan tasarım paketinden (admin-panel-dashboard-design/) birebir aktarıldı. Bunlara sonradan, tasarım paketinde bulunmayan Lisans ekranı eklendi.
  • Veriler gerçek değil. Tüm rakamlar app/_data/panel.ts içindeki fixture’lardan geliyor. Ekranlarda yapılan düzenlemeler sayfa yenilenince kaybolur. Ayrıntılar: Veri ve entegrasyon.
  • Kimlik doğrulama Supabase Auth ile. / dışındaki panel rotaları oturum ister (e-posta + şifre veya sihirli bağlantı). Rol ve şube henüz oturumdan gelmiyor. Ayrıntılar: Rotalar ve kabuk.
  • Kalıcılık yok. Supabase istemcisi yalnızca oturum için kullanılıyor; ekran verisi okuyan/yazan server action veya veritabanı çağrısı bulunmuyor. Lisans ekranı doğruladığı lisansların listesini tarayıcıda (localStorage) tutar; panelin veritabanı gelene kadar kalıcı kayıt yok.
  • Testler saf mantıkla sınırlı. Vitest (SCRUM-233) lib/license/* ve _lib/device-summary.ts modüllerini kapsar; ekranlar için bileşen ya da uçtan uca testi yok, doğrulama lint, typecheck ve build ile yapılıyor.

Kapsam dışı (şimdilik)

  • Mobil yerleşim. Bu, masaüstü öncelikli bir yönetim paneli. Kabuk sabit 248px kenar çubuğu ve viewport yüksekliğine kilitli bir ızgaradan oluşur. Tasarımda iki sütunlu olan ekranlar md/lg kırılımında tek sütuna düşer, ancak telefon için bir kırılım tasarlanmadı. İstisna: / tanıtım sayfası telefon genişliğinde de düzgün görünür.
  • Karanlık tema. Modernist tasarım sistemi tek bir açık zemin tanımlıyor.
  • Toast ve onay diyaloğu altyapısı. Prototipte global toast ve onay diyaloğu var; buradaki ekranlar işlemi doğrudan uygular. Gerçekten başarısız olabilen yıkıcı işlemler geldiğinde eklenmeli.

Teknoloji yığını

ÇatıNext.js 16.3.4, yalnızca App Router (pages/ dizini yok)
UIReact 19.2.8
DilTypeScript 5, strict: true, @/* yolu repo köküne eşlenir
StilTailwind CSS 4 (@tailwindcss/postcss, CSS öncelikli @theme; tailwind.config.js yok)
FontArchivo, next/font/google ile (Türkçe karakterler için latin-ext)
LintESLint 9 flat config — eslint-config-next core-web-vitals + typescript

Next.js 16, eğitim verilerindeki ve eski blog yazılarındaki sürümden farklı API’lere sahip. Kod yazmadan önce kurulu paketin kendi rehberini okuyun: node_modules/next/dist/docs/.

Dizin yapısı

app/ layout.tsx Kök layout — Archivo, lang="tr" globals.css Tailwind v4 @theme + Modernist bileşen katmanı (marketing)/ `/` — herkese açık tanıtım sayfası (Server) login/ Bölünmüş giriş ekranı (Server sayfa + Client form) auth/ actions.ts (login, signOut) + confirm/route.ts (sihirli bağlantı) _data/panel.ts Tüm fixture verisi + türetilmiş sayaçlar _data/site.ts Marka ve alan adı sabitleri (Respos, respos.com.tr) api/license/verify/ Lisans doğrulama route handler'ı (panelin tek API ucu) (panel)/ Rota grubu: yönetim kabuğunun arkasındaki her şey layout.tsx Kabuk — kenar çubuğu + başlık + kayan içerik (Server) _screens.ts Navigasyon/başlık kaydı: href, label, title, kicker, badge _components/ sidebar, header, tenant-context, primitives _lib/device-summary.ts Uygulama rolüne göre cihaz yapılandırma özeti panel/ menu/ stock/ devices/ apps/ settings/ staff/ sync/ errors/ audit/ fiscal/ billing/ license/ proxy.ts Next.js proxy — oturum yenileme + route koruması lib/ supabase/ client, server, proxy (oturum yenileme), dal (verifySession), paths license/ İmza doğrulama, anahtar, tarih aritmetiği (sunucu tarafı) migration/ Supabase bulut şeması (DDL; hiçbir projeye uygulanmadı) admin-panel-dashboard-design/ Claude Design tasarım paketi (görsel spesifikasyon) supabase-table-relations-for-adisyon-admin/ Şema diyagramı tasarım paketi docs/ Ekip dokümantasyonu (bu klasör) docs/claude/ Claude Code'un çalışma dokümanları

Çalıştırma ve doğrulama

npm install cp .env.example .env # Supabase URL ve publishable key'i doldurun # ADISYON_LICENSE_PUBLIC_KEY boş kalabilir: geliştirme anahtarı kullanılır npm run dev # http://localhost:3000 (tanıtım sayfası), panel: /panel (oturum ister)

Her değişiklik şu dört kontrolden temiz geçmeli:

npm run lint # yeni bir uyarı da regresyon sayılır npx tsc --noEmit # typecheck npm test # vitest run npm run build # next build — App Router hatalarını yakalayan tek kontrol

Test koşucusu SCRUM-233 ile geldi: Vitest, Node ortamında, *.test.ts dosyaları kaynağın yanında durur. Kapsam şu an saf mantıkla sınırlı (lib/license/*, _lib/device-summary.ts); bileşen ya da uçtan uca testi yok, Playwright kurulu değil.

npx tsc --noEmit, branch değiştirdikten sonra eski bir .next/ üzerinde hata verebilir. Önce npm run build çalıştırın.

İş akışı

  • Her iş bir Jira issue’suna bağlıdır ve SCRUM-<n> branch’inde yapılır. Üst seviye issue’lar dev’den, subtask’lar ebeveyn issue’nun branch’inden açılır. main hiçbir zaman branch noktası değildir.
  • Branch açarken --no-track kullanın (git switch -c SCRUM-14 --no-track origin/dev). Aksi halde push, yeni branch yerine taban branch’e gider.
  • Arayüz metinleri Türkçe ve doğal cümle düzeninde yazılır (TÜMÜ BÜYÜK veya Her Kelime Büyük değil).
  • Dokümantasyon değişikliğin parçasıdır: Dokümantasyon düzeni.

Diğer sayfalar

Last updated on