PWA offline-first para operação de bar/comanda, focado em uso simples para pequenos estabelecimentos.
- Operação principal:
Venda avulsa(fluxo rápido)Abrir comanda
- Persistência local com Dexie (offline-first).
- Isolamento lógico por
tenantId. - Sessão persistente entre reloads.
- Suporte de autenticação em dois modos:
local(mock)api(REST backend)
- React + TypeScript
- Vite
- Dexie (IndexedDB)
- Tailwind (via CDN config no
index.html) - React Router DOM
- Storybook
- Node.js 20+
- npm
npm install
npm run devApp em desenvolvimento: http://localhost:3000
Build de produção:
npm run build
npm run previewnpm run dev: sobe app em modo desenvolvimento (HMR)npm run build: build de produçãonpm run preview: preview da buildnpm run storybook: sobe Storybooknpm run build-storybook: build estática do Storybook
Sem configuração extra, o app usa autenticação local (mock) com dados no Dexie.
Configure em .env.local:
VITE_AUTH_MODE=api
VITE_API_BASE_URL=http://localhost:3000Contrato esperado no backend:
POST /auth/loginPOST /auth/refreshPOST /auth/logoutGET /auth/me
A sessão é persistida e restaurada via:
auth_session_v1auth_user_id
No modo local, existe fallback entre as duas chaves para evitar perda de login em reload.
/lock//sale/sales/customers/customers/new/customers/detail?customerId=.../monthly/monthly/detail?customerId=.../inventory/reports/users
As entidades principais possuem tenantId e são carregadas/salvas por escopo de tenant:
customersproductsordersmonthlyAccountsusersinventoryAdjustments
Tema centralizado com tokens CSS:
index.cssservices/theme.ts
Recursos:
- modo padrão
- modo
high-contrast - tokens customizáveis via
applyCustomThemeTokens
Componentes em components/form:
FormInputFormSelectFormCheckboxFormRadioFormButtonFormLabel
- Status de pedido:
open,payment,closed - Venda avulsa persiste como pedido fechado
- Estoque baixa automaticamente na venda
- Bloqueio para produto inativo ou sem estoque
- Remoção de item restaura estoque
- Remoção do último pagamento (admin)
App.tsx: orquestração principal do apppages/*: telasservices/db.ts: Dexie + seedservices/auth.ts: autenticação (local/api)services/theme.ts: temautils/monthly.ts: regras de mensalista
- Projeto é pensado para operação simples.
- Prioridade: evitar confusão e perda de venda.
- Commits preferencialmente atômicos por assunto.