PortfólioProjeto de desenvolvimento web

Projeto de desenvolvimento web · Hospitalidade · Turismo

Source privado · documentação pública

Solar dos Pireneus

O que este site faz

Desenvolvimento do site para apresentar duas casas de temporada independentes, explicar capacidade e estrutura e conduzir o visitante à solicitação de reserva.

Site e base digital para apresentar duas casas de temporada independentes em Pirenópolis e conduzir o visitante até uma solicitação de reserva.

TanStack StartReact 19TypeScriptTailwind CSS 4SupabaseTanStack QueryZodBunRLSSEO dinâmico
3DProfundidade

Superfícies, arquitetura e dados organizados em planos visuais.

4DProcesso

Fluxos mostram a sequência entre entrada, decisão, execução e resultado.

5DContexto

Seção ativa, foco e interação reforçam a informação relevante sem mover o layout.

Veja como o Solar dos Pireneus é apresentado ao visitante.

As telas mostram como o site apresenta as duas casas, organiza a decisão e conduz o visitante até a solicitação de reserva.

Home · Solar dos Pireneus
Solar dos Pireneus em Pirenópolis
Solar dos PireneusConsultar disponibilidade

Pirenópolis · Goiás

Solar dos Pireneus

Pirenópolis em outro ritmo.

Entre a tranquilidade do Cerrado e a proximidade de Pirenópolis, um lugar para reunir quem você gosta e aproveitar cada momento.

Reserve sua estadiaEscolha as datas e continue para a solicitação de reserva.
◫
Check-inCheck-outHóspedesVer disponibilidade
Casas
Casa Solar
Até 8 hóspedesCasa SolarAconchego, autonomia e lazer privativo.
Casa Tapera
Até 25 hóspedesCasa TaperaMais espaço para famílias, amigos, equipes e grupos.
Reserva
Reserve sua estadia

Escolha as datas e continue para a solicitação de reserva.

Check-inSelecionar
Check-outSelecionar
HóspedesSelecionar
Ver disponibilidade

O problema que orientou as decisões e a abordagem implementada.

A arquitetura e os fluxos apresentados neste case partem deste contexto e das restrições reais do produto.

Desafio

O visitante precisa entender rapidamente qual casa atende ao seu grupo, o que cada espaço oferece e como solicitar a estadia. Ao mesmo tempo, o sistema não pode prometer disponibilidade, pagamento ou confirmação que ainda dependem de tratamento posterior, nem expor dados pessoais enviados por hóspedes.

Abordagem

A experiência separa apresentação e operação. Conteúdo publicado descreve casas, estrutura, ofertas e destino; o formulário registra pedido de reserva com contexto da estadia e origem da campanha; RLS impede leitura pública dos dados enviados; published/noindex controla o que pode ser exposto e indexado. Assim, a Fase 1 funciona como site comercial sem fingir ser um PMS ou motor de pagamento.

O que esteve sob minha responsabilidade.

Escopo real de atuação no projeto, separado de funcionalidades ou decisões que pertencem a fornecedores e sistemas externos.

Projetar a Fase 1 para funcionar como site público sem bloquear a evolução futura para um painel administrativo autenticado.

Modelar acomodações, conteúdo editorial, mídia, ofertas, avaliações, cardápio, configurações, pedidos de reserva e leads.

Separar solicitação de reserva de confirmação real, evitando prometer disponibilidade ou pagamento que o sistema ainda não processa.

Aplicar Row Level Security para leitura pública, submissão anônima e acesso interno a dados sensíveis.

Construir SEO administrável por banco, com published/noindex, metadata e sitemap/robots dinâmicos.

Preservar UTMs, origem, referrer e dispositivo nos pedidos e leads para futura análise de aquisição.

Documentar dependências de mídia e riscos de migração antes de desligar a infraestrutura antiga.

Evidências técnicas do projeto.

Tecnologias e estruturas descritas a partir do código, da configuração e da documentação dos projetos — não por barras subjetivas de habilidade.

Frontend

TanStack Start · React 19

Aplicação TypeScript com Tailwind CSS 4, TanStack Query e Vite.

Dados

Supabase · migrations

Conteúdo, mídia, acomodações, ofertas, reservas e leads compartilham a mesma fonte de verdade.

Segurança

RLS · papéis internos

Políticas distinguem conteúdo público, inserts anônimos e leitura de dados sensíveis por equipe autenticada.

Conversão

booking_requests · leads

Pedidos e contatos preservam contexto de campanha e origem sem serem tratados como confirmação automática.

SEO

published · noindex · sitemap

Indexação e metadados podem acompanhar o estado editorial real de cada conteúdo.

Como o sistema funciona na prática.

Cada fluxo é mostrado junto de uma representação visual do produto, para que arquitetura e comportamento sejam compreendidos sem depender apenas de documentação textual.

01Datas + hóspedes + casa
02validação
03pedido recebido

Solicitação de reserva

F01Solicitação de reserva

Fluxo 01

Solicitação de reserva

Datas + hóspedes + casa → validação → pedido recebido

O visitante informa o contexto da estadia e envia uma solicitação. O sistema confirma o recebimento, não disponibilidade garantida, pagamento ou reserva confirmada.

Datas + hóspedes + casavalidaçãopedido recebido
01Conteúdo
02published/noindex
03página pública
04SEO

Conteúdo só quando validado

F02Conteúdo só quando validado

Fluxo 02

Conteúdo só quando validado

Conteúdo → published/noindex → página pública → SEO

Informações provisórias podem permanecer no banco sem aparecer para o visitante ou mecanismos de busca até que estejam prontas para publicação.

Conteúdopublished/noindexpágina públicaSEO
01Visitante envia
02RLS permite insert
03leitura pública bloqueada
04equipe acessa

Dados protegidos após o envio

F03Dados protegidos após o envio

Fluxo 03

Dados protegidos após o envio

Visitante envia → RLS permite insert → leitura pública bloqueada → equipe acessa

Pedidos e leads entram no sistema sem conceder ao visitante acesso à lista ou aos dados pessoais de outras pessoas.

Visitante enviaRLS permite insertleitura pública bloqueadaequipe acessa

Arquitetura do trabalho

Em vez de uma lista isolada, as decisões estruturais aparecem intercaladas com imagens e representações do sistema.

A01TanStack Start, React 19, TypeScript e Tailwind CSS 4 formam a aplicação web
A02Supabase/Lovable Cloud centraliza conteúdo, acomodações, mídia, ofertas, avaliações, cardápio, configurações, pedidos e leads
ArquiteturaA01 — A02
A01

TanStack Start, React 19, TypeScript e Tailwind CSS 4 formam a aplicação web.

A02

Supabase/Lovable Cloud centraliza conteúdo, acomodações, mídia, ofertas, avaliações, cardápio, configurações, pedidos e leads.

A03Row Level Security separa leitura pública, submissão anônima e acesso interno autenticado
A04Migrations incrementais em supabase/migrations versionam o schema e as políticas de acesso
ArquiteturaA03 — A04
A03

Row Level Security separa leitura pública, submissão anônima e acesso interno autenticado.

A04

Migrations incrementais em supabase/migrations versionam o schema e as políticas de acesso.

A05SEO por banco controla título, descrição, imagem social, published e noindex em diferentes entidades
A06Pedidos de reserva armazenam dados da estadia, hóspede, acomodação, oferta/cupom e atribuição de marketing
ArquiteturaA05 — A06
A05

SEO por banco controla título, descrição, imagem social, published e noindex em diferentes entidades.

A06

Pedidos de reserva armazenam dados da estadia, hóspede, acomodação, oferta/cupom e atribuição de marketing.

Arquitetura e experiência públicas. Implementação e dados sensíveis privados.

O showcase do Solar dos Pireneus apresenta a arquitetura do site, o fluxo de solicitação de reserva, SEO, modelagem de dados e segurança por RLS sem publicar o repositório de produção ou dados pessoais enviados pelos visitantes.

O repositório público também inclui exemplos de código sanitizados e testes para avaliação técnica, sem copiar a implementação de produção.

Frontend

TanStack Start · React 19

Aplicação TypeScript com Tailwind CSS 4, TanStack Query e Vite.

Dados

Supabase · migrations

Conteúdo, mídia, acomodações, ofertas, reservas e leads compartilham a mesma fonte de verdade.

Segurança

RLS · papéis internos

Políticas distinguem conteúdo público, inserts anônimos e leitura de dados sensíveis por equipe autenticada.

Conversão

booking_requests · leads

Pedidos e contatos preservam contexto de campanha e origem sem serem tratados como confirmação automática.

SEO

published · noindex · sitemap

Indexação e metadados podem acompanhar o estado editorial real de cada conteúdo.

O que é público

Estrutura das páginas e apresentação das duas casas.

Fluxo de solicitação de reserva e contexto de estadia.

Arquitetura TanStack Start, React, TypeScript e Supabase.

Estratégia de conteúdo publicado, noindex e SEO.

Modelo conceitual de booking requests, leads e atribuição.

Uso de RLS para separar conteúdo público e dados sensíveis.

O que permanece privado

Código-fonte da aplicação e migrations completas.

Políticas internas e detalhes de implementação de RLS.

Credenciais, service role, tokens e configurações de ambiente.

Dados pessoais de leads e solicitações de reserva.

Informações operacionais ainda não publicadas pelos proprietários.

Dependências administrativas e integrações internas.

Fluxo demonstrado publicamente

Conteúdo
Casa
Datas e hóspedes
Solicitação
RLS
Equipe

O objetivo é demonstrar raciocínio de produto, arquitetura e execução sem publicar os mecanismos internos usados para implementar o trabalho.

Dados, segurança e integridade

Regras que impedem o sistema de depender apenas da interface para manter isolamento, confiabilidade ou publicação correta dos dados.

Papéis internos previstos incluem admin, reservas, marketing, restaurante e proprietário.

Conteúdo público é lido mediante políticas de publicação; registros provisórios podem permanecer no banco sem exposição pública.

Visitantes anônimos podem inserir booking_requests e leads, porém não recebem permissão para listar ou ler os registros após a gravação.

Credencial service_role não deve ser exposta no frontend; apenas chaves apropriadas ao cliente podem fazer parte do ambiente público.

Preço, telefone, horário, capacidade, camas, metragem, avaliações e políticas não podem ser preenchidos por suposição.

Migrations já aplicadas não são reescritas; mudanças de schema devem seguir por migrations incrementais.

Validação e entrega

O que é verificado antes de tratar uma alteração como pronta para integração, publicação ou produção.

Lint e build fazem parte da validação mínima do projeto.

O modelo de dados e as políticas RLS são documentados separadamente para revisão de segurança e manutenção.

O estado de publicação usa published/noindex para impedir indexação prematura de conteúdo ainda em validação.

A documentação operacional registra dependências de mídia e etapas necessárias antes de desligar a infraestrutura anterior.

Decisões de produto e engenharia

Decisões que mudam comportamento, risco operacional ou capacidade de evolução — e não apenas preferências de estilo de código.

D1

Usar o mesmo banco para o site público e a futura operação interna, reduzindo duplicação de fonte de verdade.

D2

Tratar pedido de reserva como solicitação, e não como reserva confirmada, enquanto disponibilidade e pagamento não fazem parte desta fase.

D3

Usar RLS como fronteira de segurança no banco em vez de depender apenas de ocultação na interface.

D4

Manter conteúdo não validado como oculto ou noindex em vez de completar lacunas com dados inventados.

D5

Versionar mudanças de banco com migrations incrementais para preservar rastreabilidade do schema.

Trade-offs

O benefício de uma decisão técnica sempre vem acompanhado de custo, restrição ou dependência. Estes são os compromissos mais importantes.

T1

Centralizar conteúdo e reservas no Supabase acelera a evolução da plataforma, mas exige políticas RLS corretas para cada nova tabela ou fluxo.

T2

Manter pedidos sem confirmação automática reduz complexidade e risco operacional na Fase 1, porém exige tratamento humano posterior.

T3

Controlar indexação por registro melhora segurança editorial, mas aumenta a disciplina necessária antes do lançamento público.

T4

Depender temporariamente de mídia hospedada em infraestrutura antiga simplifica a transição, mas cria uma etapa obrigatória de migração antes do desligamento definitivo.

O que este trabalho demonstra

Competências demonstradas pelas decisões, implementação e validação apresentadas neste case.

Conecta conteúdo institucional, acomodações, experiências, ofertas, gastronomia, reservas e leads a uma fonte de dados compartilhada.

Prepara a Fase 1 para evoluir em direção a uma operação interna sem reconstruir todo o modelo de conteúdo e reservas.

Transforma publicação e indexação em estados controláveis por banco, evitando expor conteúdo ainda não validado.

Preserva origem de aquisição em booking_requests e leads por UTMs, landing page, referrer e dispositivo.

Continue pelos demais trabalhos e pela trajetória em aplicativos e inteligência artificial.