Pular para o conteúdo

Cliente real · em produção

Armazém São Joaquim

Plataforma digital para restaurante, pousada e café

Next.js TypeScript Supabase PostgreSQL RLS Tailwind i18n
Interface do projeto Armazém São Joaquim
Status
Em produção, em domínio próprio
Arquitetura
Monólito modular serverless
Banco
PostgreSQL com RLS e migrations
Idiomas
Rotas separadas para PT e EN

Visão geral

Plataforma digital fullstack para o Armazém São Joaquim, combinando site institucional, cardápio online, blog, área de pousada, catálogo do café, galeria de arte e um painel administrativo para operação do negócio.

É o único projeto deste portfólio com cliente real e tráfego real. Em vez de uma landing page, o sistema centraliza exposição de produtos e conteúdo, autenticação, reservas, gestão administrativa e integrações de comunicação e analytics.

Arquitetura

Monólito modular serverless sobre o App Router do Next.js, com Supabase como backend-as-a-service. A escolha prioriza velocidade de entrega para um cliente real em vez de rigor arquitetural.

  • app/[locale] Páginas públicas e administrativas, com internacionalização por segmento de rota.
  • app/api Endpoints serverless (route handlers) públicos, administrativos e de diagnóstico.
  • components UI organizada em admin, atoms, molecules, sections e ui — inspiração em Atomic Design.
  • lib Autenticação, acesso ao Supabase, cache, retry, monitoramento e validações.
  • supabase/migrations Evolução do banco, políticas RLS, funções SQL e correções de segurança.

Fluxo de reserva

  1. O visitante acessa páginas públicas em app/[locale], com conteúdo estático e conteúdo dinâmico vindo do Supabase.
  2. O usuário se autentica via Supabase Auth.
  3. Ao criar uma reserva, o frontend chama /api/reservas.
  4. A rota valida os dados, grava no banco e gera um token de confirmação.
  5. O usuário confirma a reserva via /api/reservas/confirm?token=....
  6. O painel administrativo consome /api/admin/* para gerir blog, cardápio, usuários, reservas, pousada e galeria.
  7. O PostgreSQL, protegido por RLS em várias tabelas, sustenta os módulos operacionais.

Pontos fortes

  • Escopo real de negócio, com cliente e domínio próprio — muito acima de projeto tutorial.
  • Painel administrativo amplo, cobrindo múltiplos módulos operacionais.
  • Internacionalização por rota (pt e en).
  • PostgreSQL com migrations versionadas e Row Level Security.
  • Build de produção funcionando em Next.js, com type-check passando.
  • Deploy com headers e política de cache configurados.

Limites e decisões conscientes

O que este projeto não faz, e por quê. Descrever isso com precisão vale mais do que exagerar o escopo.

  • Não aplica Clean Architecture, DDD, CQRS nem Event Driven — as rotas falam diretamente com o Supabase e carregam a regra de negócio nelas mesmas.
  • Existe drift arquitetural: convivem implementações antiga e nova para o mesmo domínio (por exemplo, contratos de blog em versão simples e multilíngue).
  • A autorização depende mais de verificação procedural e do service role key do que de uma camada de autorização coesa.
  • O escopo cresceu mais rápido que a disciplina arquitetural — é um projeto de produto, não uma vitrine de arquitetura.