Svelte Commerce
SvelteKit으로 만든 독립형 오픈소스 스토어프론트, 26개 상거래 백엔드와 헤드리스 연동, MIT 라이선스
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Plataforma SaaS B2B de pedidos à mesa para restaurantes em Portugal, com integração ao POS (ZoneSoft ZS Rest, via adaptador abstrato) e modelo de comissão de 1% sobre o valor faturado.
Estado: Fase 3 em curso — o cliente lê o QR/NFC, escolhe na ementa e envia o pedido; o pedido fica gravado em Postgres e uma fila entrega-o ao POS (MockPOS), com reenvios e rate limit.
Requisitos: Node.js ≥ 20.9. Não é preciso instalar Postgres: sem DATABASE_URL, a app usa PGlite em .data/pglite (apague a pasta para recomeçar).
npm install
npm run check # typecheck + testes + build de produção
npm run dev # http://localhost:3000
npm run demo:urls # URLs das 10 mesas de demonstração
Abra http://localhost:3000 (página comercial da MESVIO) ou http://localhost:3000/demo para escolher uma mesa de demonstração, ou vá diretamente a um URL de mesa (ex.: /m/jG6WQHgwr4fQ5qQEOKtZJw).
/central: todos os restaurantes, pedidos e comissões do mês (estimativa sobre o valor sem IVA dos pedidos confirmados), alertas (pedidos que não chegaram ao POS, POS com falhas ou por configurar, restaurantes sem dono ou sem mesas) e Novo restaurante (empresa, espaço, POS, comissão, mesas e espreguiçadeiras com QR Code, e convite ao dono). Cada restaurante tem a sua ficha, com mais lugares, outros donos e a folha de QR Codes para imprimir.
platform_admins), com 2FA obrigatório (TOTP: Google Authenticator, 1Password…), configurado com um código de ativação de uso único dado pelo script (fora do email). Segredos cifrados com PLATFORM_SECRET_KEY; cada código só serve uma vez; 5 tentativas a cada 5 min; sessão verificada de 8 h. Quem não é administrador vê "não encontrado".npm run admin:criar, admin:repor-2fa, admin:remover (ver docs/14-PUBLICAR.md). Em desenvolvimento entra-se como "Paula (plataforma, demo)".O cliente vê a ementa, o pedido e a conta em português ou inglês: telemóveis em português abrem em português, todos os outros em inglês, e há um seletor na ementa (a escolha fica num cookie). Botões, avisos, alergénios e etiquetas estão em src/lib/i18n/; pratos e categorias vêm da tabela menu_translations (por restaurante, com RLS). A demo tem inglês completo. O POS e o painel continuam em português.
Passo a passo (domínio, Supabase, GitHub, Vercel) em docs/14-PUBLICAR.md.
Identidade, cores, logótipos e regras de uso em docs/13-MARCA.md. Os nomes internos (pasta restaurante-saas, tabelas, chaves de armazenamento mesa-digital:*) mantêm-se para não quebrar dados existentes.
/painel (ou o link em /demo). Com a Supabase configurada, entra-se com um código de 6 dígitos enviado por email (só pessoas convidadas). Sem Supabase (desenvolvimento), escolhe-se um utilizador de demonstração: Ana (dona), Bruno (gerente) ou Carla (staff).
menu_images, RLS) e servida com cache permanente em /api/imagens/<id>. Tem prioridade sobre a foto do POS./painel/qr): imprimir e gerar um QR novo se um for fotografado e usado de fora (o antigo deixa logo de funcionar).Cada lugar tem um modo: as mesas pagam a conta no fim; as espreguiçadeiras (zona "Praia" na demo) pagam cada pedido ao pedir. O botão do carrinho passa a "Pagar e pedir"; o pedido fica "por pagar" e só segue para a cozinha quando o pagamento é confirmado. Sem pagamento em 15 min, é cancelado. No painel, as mesas aparecem agrupadas por zona e os pedidos por pagar num grupo à parte.
/m/[token]/conta (botão "Conta da mesa" no topo da ementa): todos os pedidos da mesa desde que abriu, de todos os telemóveis, com o total. Com pagamentos ligados no painel (separador Mesas), o cliente paga o que falta com Apple Pay, MB WAY ou cartão; a mesa aparece "Paga" no painel. Sem chaves Stripe (desenvolvimento), o pagamento é simulado.
npm run dev -- -H 0.0.0.0 (telemóvel e computador na mesma rede Wi-Fi).http://<IP-do-computador>:3000/qr — os QR Codes passam a apontar para esse endereço.Para NFC: grave o URL da mesa (mostrado por baixo de cada QR) numa etiqueta NTAG213/215 como registo URI (ex.: app NFC Tools).
/m/[token] (ementa + carrinho guardado no telemóvel) → POST /api/orders (cabeçalho Idempotency-Key; rate limit; o servidor recalcula preços e grava pedido + tarefa na mesma transação) → fila outbox (envio ao POS, até 8 tentativas em ~3 min) → /m/[token]/pedido/[id] (estado; "Confirmado" só com aceitação do POS).
docs/ PRD, arquitetura, BD, integração POS, riscos, plano, decisões, deployment
src/app/ Next.js App Router
page.tsx Índice de demonstração (10 mesas)
m/[token]/ Ementa do cliente + carrinho (token seguro da mesa)
m/[token]/pedido/[id]/ Estado do pedido
api/orders/ Criar pedido (POST) e consultar estado (GET)
api/cron/outbox/ Processar a fila a partir de um cron (alojamento serverless)
qr/ Folha imprimível de QR Codes / URLs NFC
painel/ Painel do staff (entrada por email/código) + api/painel/*
api/health/ Health check
src/components/menu/ Componentes da ementa
src/components/order/ Carrinho, detalhe de produto, estado do pedido
src/components/staff/ Painel do staff
src/lib/ Utilitários (dinheiro, IVA, preço de variantes/extras)
src/server/ Domínio (só servidor)
db/ Schema Drizzle (multi-tenant) e cliente
pos/ PosAdapter, MockPOS, esqueleto ZoneSoft
menu/ Serviço de ementa por mesa
orders/ Criação de pedidos, idempotência, fila de envio ao POS (outbox)
security/ Rate limit e pseudonimização de IP
auth/ Supabase Auth, modo dev, convites
staff/ Contexto e permissões do painel, ações do staff, equipa
db/tenant.ts withTenant: cada pedido corre com RLS no restaurante certo
catalog/ Esgotados do painel aplicados ao catálogo do POS
tables/ Tokens de mesa
commissions/ Motor de comissões
scripts/ Utilitários de desenvolvimento