132f0921e0
First slice of offline-first (Phase 1). Makes every dashboard area *viewable* offline with last-synced data, instead of empty lists on an offline reload (previously only next-pwa's 10-min API cache survived). - offline-db: add a generic `kv` IndexedDB store (DB v2, preserves order_queue) with kvGet/kvSet/kvDelete; all degrade silently on quota/unavailable. - query-persister: debounced snapshot of the React Query cache via dehydrate/hydrate (no new dependency). Restore is guarded by a schema buster, 24h max-age, and a café scope so one tenant never hydrates another's data. - providers: gcTime 24h so hydrated data isn't GC'd; restore on mount + persist on cache changes, re-scoped when the signed-in café changes. No write-path changes; the existing POS order queue is untouched. Next in Phase 1: generalize that queue into an idempotent outbox with client→server ID remapping. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Meezi Dashboard
Next.js 14 POS dashboard for Meezi (میزی).
Setup
cd web/dashboard
npm install
cp .env.example .env.local
npm run dev
Open http://localhost:3000/fa/login
Ensure the API is running at NEXT_PUBLIC_API_URL (default https://localhost:7208).
Demo login
- Phone:
09121234567 - OTP: check API console log (
DEV OTP for ...) when Kavenegar is not configured
Features (Sprint 4)
- i18n:
fa(default, RTL),ar(RTL),en(LTR) - Dashboard layout with RTL-aware sidebar
- POS screen: menu grid + cart + order submit
- KDS screen: live orders + SignalR + status advance
- Placeholder pages for upcoming modules