Publiczne, dwujęzyczne menu i zaplecze operacyjne Marta Banaszek Atelier-Café. Aplikacja synchronizuje katalog z Dotykačką, udostępnia panel administracyjny, strefę kelnera, obsługę zamówień, rozliczeń kasowych, etapowej inwentaryzacji, grafiku i czasu pracy oraz rezerwacji.
- Next.js 16, React 19 i TypeScript
- PostgreSQL 17 oraz Drizzle ORM
- opcjonalny runtime Vinext/Cloudflare dla środowiska Sites
- Docker Compose lub natywna usługa Node.js
- Node.js
>=22.13.0i npm - PostgreSQL 17 albo Docker z obsługą Compose
- dla skryptów Sites na Linuksie:
flock,curl,sha256sumi GNUtimeout
npm ciUtwórz lokalną konfigurację tylko wtedy, gdy plik .env jeszcze nie istnieje:
test -e .env || cp .env_example .envNastępnie zastąp wszystkie wartości replace-with-... własnymi, losowymi danymi. Nie nadpisuj istniejącego .env. Prawdziwych haseł, tokenów, kluczy API, identyfikatorów prywatnych wdrożeń ani danych klientów nie wolno commitować.
Pełna lista wymaganych i opcjonalnych ustawień znajduje się w .env_example. Zmienne NEXT_PUBLIC_* trafiają do kodu przeglądarki i nie mogą zawierać sekretów.
npm run devDomyślny adres lokalny to http://localhost:3000.
DATABASE_URL jest wymagany przez aplikację i polecenia Drizzle. Po skonfigurowaniu pustej bazy uruchom:
npm run db:migrateNowe migracje po zmianach w db/schema.ts generuje:
npm run db:generatePo przygotowaniu .env:
docker compose up --buildAplikacja będzie dostępna pod http://localhost:3000. Wolumeny menu_postgres i menu_uploads przechowują bazę oraz zdjęcia poza obrazem kontenera.
npm run lint
npm run build:server
npm testnpm test wykonuje także build Vinext. Pomocnicze skrypty Sites używają projektowego katalogu .sites-runtime/, który jest lokalny i ignorowany przez Git.
- Sekrety są używane wyłącznie po stronie serwera i pochodzą z ignorowanego
.envlub chronionej konfiguracji usługi. WAITER_POS_ACTIONS_ENABLEDiDOTYKACKA_INVENTORY_WRITE_ENABLEDsą domyślnie wyłączone.- Prywatny
.openai/hosting.jsonnie jest publikowany. Dla nowego środowiska skopiuj.openai/hosting.example.jsondo.openai/hosting.jsoni uzupełnij go lokalnie. public/uploads/jest przeznaczony na dane runtime i pozostaje poza repozytorium z wyjątkiem.gitkeep.- Endpoint synchronizacji wymaga
SYNC_SECRET; webhook może używać osobnegoDOTYKACKA_WEBHOOK_SECRET.
W strefie kelnera przycisk „Rachunek dla gościa” pobiera z Dotykački zamknięte rachunki z ostatnich 12 godzin. Kelner może wybrać dowolny stolik na dowolnym tablecie. Widok gościa korzysta z końcowego zamówienia w POS, dlatego uwzględnia pozycje zmienione w Dotykačce po pierwotnym wysłaniu zamówienia. Przekazanie tabletu wylogowuje kelnera, a „Zakończ” usuwa krótką sesję rachunku i wraca do menu gościa.
Każdemu pracownikowi można w panelu „Pracownicy i dostępy” ustawić własną treść podziękowania oraz przypisać do trzech lekkich animacji MP4, WebM lub GIF. Domyślny tekst brzmi „Dziękuję i zapraszam ponownie!”. Rachunek pokazuje imienne podziękowanie osoby przekazującej tablet i losuje jedną z jej animacji; wideo odtwarza się automatycznie, bez dźwięku i w pętli.
Ankieta przed zamówieniem pozostaje w waiter_survey_questions. Osobna ankieta po rachunku i jej odpowiedzi używają tabel guest_survey_questions oraz guest_survey_responses, tworzonych przez migrację 0028_guest_receipts.sql.
Kod QR wymaga ustawienia zmiennej GOOGLE_REVIEW_URL na dokładny, publiczny link „napisz opinię” z profilu Google firmy. Bez tej zmiennej rachunek i ankieta działają, ale kod QR jest ukryty.
Panel „Pracownicy i dostępy” skupia ustawienia dostępu, karty QR, indywidualne podziękowania oraz zwijane dane pracownika: stawkę godzinową, telefon i adres e-mail. Każda osoba ma niezależny przełącznik „Grafik: TAK/NIE”. Stan „NIE” blokuje nowe dyspozycje i planowanie po stronie interfejsu oraz serwera, ale zachowuje historyczne zmiany, czas pracy, rozliczenia i napiwki.
Jeżeli pracownik nie ma kodu kreskowego w Dotykačce, administrator może wygenerować go z panelu pracowników. Zapis wymaga osobnego potwierdzenia, używa aktualnej wersji rekordu ETag, nie nadpisuje kodu istniejącego w Dotykačce i po potwierdzeniu automatycznie udostępnia kartę QR czasu pracy.
Administrator układa plan w sekcji „KROK 2 — Ułóż i opublikuj grafik”. Wyraźny przycisk „+ Dodaj zmianę” jest dostępny, gdy co najmniej jeden aktywny pracownik ma ustawienie „Grafik: TAK”. Szkic nie jest widoczny dla zespołu do chwili publikacji.
Funkcje pracownicze wymagają migracji 0037–0042. Najnowsza migracja 0042_employee_profile_and_scheduling.sql dodaje ustawienie udziału w grafiku oraz prywatne pola profilu. Pełne zasady działania i lista kontroli po wdrożeniu znajdują się w docs/WORKFORCE_AND_RESERVATIONS.md.
Szczegóły wdrożenia znajdują się w docs/DEPLOYMENT.md, zasady grafiku, ewidencji i rezerwacji w docs/WORKFORCE_AND_RESERVATIONS.md, bieżące reguły produktów, kodów, tagów, filtrów i zdjęć w docs/MENU_CONFIGURATION.md, a zasady integracji magazynowej w docs/DOTYKACKA_INVENTORY_INTEGRATION.md. Operacyjną listę przygotowania POS zawiera DOTYKACKA_CHECKLIST.md.
Repozytorium nie zawiera pliku licencji. Przed redystrybucją kodu poza projekt należy ustalić warunki z właścicielem repozytorium.