Cliente real · em produção
Armazém São Joaquim
Plataforma digital para restaurante, pousada e café
- 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/apiEndpoints serverless (route handlers) públicos, administrativos e de diagnóstico. -
componentsUI organizada em admin, atoms, molecules, sections e ui — inspiração em Atomic Design. -
libAutenticação, acesso ao Supabase, cache, retry, monitoramento e validações. -
supabase/migrationsEvolução do banco, políticas RLS, funções SQL e correções de segurança.
Fluxo de reserva
- O visitante acessa páginas públicas em
app/[locale], com conteúdo estático e conteúdo dinâmico vindo do Supabase. - O usuário se autentica via Supabase Auth.
- Ao criar uma reserva, o frontend chama
/api/reservas. - A rota valida os dados, grava no banco e gera um token de confirmação.
- O usuário confirma a reserva via
/api/reservas/confirm?token=.... - O painel administrativo consome
/api/admin/*para gerir blog, cardápio, usuários, reservas, pousada e galeria. - 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.