Skip to content
IG1816Public

About

SaaS de agendamento de retirada para padarias — Next.js, TypeScript, Supabase (Auth + Postgres + RLS), Zod

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

FornoSlot — MVP

SaaS de agendamento de retirada de encomendas para padarias.
Produto de referência neste repo: Padaria São Marco (demo via slug demo ou o slug que você criar).

Marca da plataforma: FornoSlot.

Stack

  • Next.js App Router (TypeScript strict) + Tailwind CSS v4
  • next-intl (/pt, /en)
  • Supabase Auth (e-mail/senha) + Postgres + RLS
  • Validação Zod em Server Actions
  • RPC create_booking com lock + checagem de capacity (anti-overbooking)

Assumptions

  • Timezone padrão: America/Sao_Paulo
  • Auth: e-mail + senha (magic link pode ser habilitado no painel Supabase depois)
  • CTA “Agendar demo” aponta para /b/demo/agendar — crie uma padaria com slug demo (ou troque o link)
  • Rate limit de booking é in-memory (por instância); em multi-região use Upstash/Redis depois
  • Confirmação pública lê resumo via RPC get_booking_summary (UUID); sem telefone/e-mail

Variáveis de ambiente

Copie .env.example → .env.local:

NEXT_PUBLIC_SUPABASE_URL=https://xxxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...

Não coloque SUPABASE_SERVICE_ROLE_KEY em variáveis NEXT_PUBLIC_*.

Como rodar

npm install
cp .env.example .env.local   # preencha URL + anon key
npm run dev

Abra http://localhost:3000 (redireciona para /pt).

Migrations (Supabase)

Opção A — SQL Editor (mais simples)

  1. Crie um projeto em supabase.com
  2. Authentication → Providers → Email habilitado
  3. SQL Editor → cole e execute
    supabase/migrations/20260719120000_initial_schema.sql

Opção B — CLI

npx supabase login
npx supabase link --project-ref SEU_PROJECT_REF
npx supabase db push

Contas de teste

  1. Em /pt/entrar, crie uma conta (ex.: dono@padaria.test / senha ≥ 8 chars)
  2. Se o projeto exigir confirmação de e-mail, desative “Confirm email” em Auth → Settings para dev, ou confirme pelo inbox
  3. Complete o onboarding (nome + slug, ex. demo)
  4. No painel, adicione disponibilidade (ex. Segunda 08:00–12:00, slot 30, capacity 3)

Teste ponta a ponta (6 passos)

  1. npm run dev com .env.local válido e migration aplicada
  2. Crie conta em /pt/entrar e a padaria no onboarding (slug demo)
  3. No /pt/painel, adicione regra de disponibilidade para hoje/amanhã
  4. Abra aba anônima em /pt/b/demo/agendar
  5. Escolha horário, preencha nome/telefone/itens → confirmar
  6. Volte ao painel logado: veja o booking → Confirmar / Cancelar

Idiomas: /pt e /en (mesmo fluxo).

Rotas

Rota Quem Função
/[locale] público Landing FornoSlot
/[locale]/entrar público Auth padaria
/[locale]/onboarding autenticado Criar padaria
/[locale]/painel member Disponibilidade + agenda
/[locale]/b/[slug]/agendar público Reservar horário
/[locale]/b/[slug]/agendar/confirmacao público Resumo do agendamento

RLS (resumo)

  • bakeries / availability_rules: SELECT público; escrita só member
  • bookings: SELECT/UPDATE só member; INSERT público somente via create_booking
  • get_slot_occupancy: contagens sem PII
  • get_booking_summary: resumo por UUID (sem telefone/e-mail)
  • Nenhuma policy “allow all”

Scripts

npm run dev
npm run lint
npm run build

Deploy

  • Frontend: Vercel (importar repo, setar env vars)
  • Banco/Auth: Supabase (migration + Auth redirect URLs: https://seu-dominio/* e http://localhost:3000/*)

About

SaaS de agendamento de retirada para padarias — Next.js, TypeScript, Supabase (Auth + Postgres + RLS), Zod

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages