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:
| Repo | Rolü |
|---|---|
smart_menu_adisyon_ui | Flutter istemcisi — POS, Garson, KDS ve Yazıcı uygulama rolleri |
smart-menu-adisyon-backend-dev | Go backend — sipariş, ödeme, mutfak, yazdırma, error_logs |
smart-menu-adisyon-localdb-dev | Restorandaki yerel Postgres şeması, migration’lar ve seed’ler |
smart-menu-adisyon-admin-panel | Bu 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.tsiç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.tsmodü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/lgkı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) |
| UI | React 19.2.8 |
| Dil | TypeScript 5, strict: true, @/* yolu repo köküne eşlenir |
| Stil | Tailwind CSS 4 (@tailwindcss/postcss, CSS öncelikli @theme; tailwind.config.js yok) |
| Font | Archivo, next/font/google ile (Türkçe karakterler için latin-ext) |
| Lint | ESLint 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 kontrolTest 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’lardev’den, subtask’lar ebeveyn issue’nun branch’inden açılır.mainhiçbir zaman branch noktası değildir. - Branch açarken
--no-trackkullanı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.