Skip to content

Repository files navigation

Lets Cozinha

Lets Cozinha

Site de receitas culinΓ‘rias (letscozinha.com.br) construΓ­do com Next.js. O conteΓΊdo gratuito (receitas e categorias) atrai visitantes e os converte em compradores de e-books.

πŸ€– Agentes de IA: leia as regras de desenvolvimento e documentaΓ§Γ£o em CLAUDE.md.


πŸš€ Como Rodar

PrΓ©-requisitos

InstalaΓ§Γ£o e Desenvolvimento

pnpm install
pnpm dev        # http://localhost:3000

Scripts

Script DescriΓ§Γ£o
pnpm dev Servidor de desenvolvimento
pnpm build Build de produΓ§Γ£o
pnpm start Servidor de produΓ§Γ£o
pnpm lint Lint
pnpm test Testes unitΓ‘rios (jest, tests/unit)
pnpm analyze Build com anΓ‘lise de bundle
pnpm index-now Submete URLs ao IndexNow
pnpm print-recipe Imprime uma receita do CMS no terminal

VariΓ‘veis de Ambiente

VariΓ‘vel DescriΓ§Γ£o
CMS_URL URL do CMS (Strapi)
CMS_TOKEN Token de API do CMS
MEILISEARCH_HOST Host do Meilisearch (busca de receitas e e-books)
MEILISEARCH_API_KEY Chave de API do Meilisearch
LETS_COZINHA_API_KEY Chave para rotas internas de API (ex.: revalidaΓ§Γ£o)
GA4_PROPERTY_ID Propriedade do Google Analytics 4
GOOGLE_SERVICE_KEY Credencial de service account do Google

πŸ—οΈ Arquitetura

  • Next.js (App Router) com React e TypeScript
  • Tailwind CSS com tema centralizado (design tokens em globals.css)
  • Strapi (headless CMS) - receitas, categorias, e-books e single types (src/cms/)
  • Meilisearch - busca de receitas e e-books com busca semΓ’ntica (embedders OpenAI)
  • Listmonk - newsletter, via rota interna /api/subscribe
  • Parallel Routes - slots @hero e @aside para composiΓ§Γ£o de layout por rota
src/
β”œβ”€β”€ app/                  # App Router
β”‚   β”œβ”€β”€ @hero/            # Slot do hero (home, vendas de e-book)
β”‚   β”œβ”€β”€ @aside/           # Slot do aside (LayoutAside configurΓ‘vel)
β”‚   β”œβ”€β”€ api/              # Rotas internas (subscribe, revalidate)
β”‚   β”œβ”€β”€ receitas/         # Lista e pΓ‘gina de receita
β”‚   β”œβ”€β”€ categorias/       # Lista e pΓ‘gina de categoria
β”‚   └── ebooks/           # CatΓ‘logo e pΓ‘gina de vendas
β”œβ”€β”€ cms/                  # Acesso ao Strapi e Meilisearch
β”œβ”€β”€ components/           # Componentes reutilizΓ‘veis
└── methods/              # Helpers compartilhados

🎯 Objetivo Principal

Vender e-books culinΓ‘rios atravΓ©s de conteΓΊdo gratuito e conversΓ΅es estratΓ©gicas. Toda decisΓ£o de design e produto usa este objetivo como critΓ©rio de desempate.


🧠 Laws of UX (Obrigatórias)

ConversΓ£o

  • Jakob's Law: Interface familiar (padrΓ΅es web conhecidos)
  • Hick's Law: MΓ‘ximo 5 opΓ§Γ΅es por decisΓ£o para acelerar escolhas
  • Miller's Law: MΓ‘ximo 7 itens por grupo/menu
  • Fitts's Law: CTAs grandes (44px+) prΓ³ximos ao conteΓΊdo relevante
  • Serial Position: E-books principais no inΓ­cio e fim das listas

Performance Cognitiva

  • Cognitive Load: Uma aΓ§Γ£o principal por pΓ‘gina, reduzir esforΓ§o mental
  • Chunking: Agrupar informaΓ§Γ΅es relacionadas (receitas por categoria)
  • Choice Overload: MΓ‘ximo 3-4 e-books em destaque na home

ExperiΓͺncia

  • Peak-End Rule: Hero impactante + CTA final forte
  • Von Restorff Effect: E-books destacados visualmente
  • Aesthetic-Usability: Design belo = percepΓ§Γ£o de usabilidade

πŸ“± Estrutura Base

Desktop (lg: 1024px+)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              HEADER                   β”‚ ← Fora do <main>
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ <main>                                β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚             HERO                  β”‚ |
β”‚ β”‚       (quando aplicΓ‘vel)          β”‚ β”‚
β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚   CONTENT   β”‚     ASIDE       β”‚ | β”‚
β”‚ β”‚ β”‚   (70%)     β”‚    (30%)        β”‚ | β”‚
β”‚ β”‚ β”‚ (ConteΓΊdo)  β”‚  (ConversΓ£o)    β”‚ | β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ | β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ </main>                               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚              FOOTER                   β”‚ ← Fora do <main>
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Mobile (sm e menor: <768px)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         HEADER (compacto)             β”‚ ← Fora do <main>
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ <main>                                β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚        HERO (full-width)          β”‚ |
β”‚ β”‚      (quando aplicΓ‘vel)           β”‚ β”‚
β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
β”‚ β”‚          CONTENT                  β”‚ β”‚
β”‚ β”‚        (100% width)               β”‚ β”‚
β”‚ β”‚                                   β”‚ β”‚
β”‚ β”‚ β€’ SeΓ§Γ΅es integradas:              β”‚ β”‚
β”‚ β”‚   - Newsletter contextual         β”‚ β”‚
β”‚ β”‚   - Compartilhamento social       β”‚ β”‚
β”‚ β”‚   - CTAs de conversΓ£o             β”‚ β”‚
β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
β”‚ β”‚           ASIDE                   β”‚ β”‚
β”‚ β”‚      (empilhado abaixo)           β”‚ β”‚
β”‚ β”‚                                   β”‚ β”‚
β”‚ β”‚ β€’ E-book contextual               β”‚ β”‚
β”‚ β”‚ β€’ Quem Γ© a Lets                   β”‚ β”‚
β”‚ β”‚ β€’ Categorias                      β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ </main>                               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚      FOOTER (coluna ΓΊnica)            β”‚ ← Fora do <main>
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Responsivo: Mobile-first com breakpoints Tailwind padrΓ£o: sm (640px), md (768px), lg (1024px), xl (1280px), 2xl (1536px)

PadrΓ΅es Mobile-First

  • Sticky Search: Input de busca fica fixo no topo quando focado, com scroll automΓ‘tico para o topo (apenas mobile)
  • Compact Cards: Variant compact para cards menores em 2 colunas no mobile
  • Grid Responsivo: grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5
  • Progressive Enhancement: Desktop adiciona features, mobile Γ© a base
  • Touch-First: Áreas de toque mΓ­nimas de 44px em todos os elementos interativos

🏠 PÑginas Principais

1. Home (/)

Objetivo: Converter visitantes em compradores de e-books

  • Hero: E-book principal + headline impactante + CTA grande
  • Content: E-books em destaque (3-4 mΓ‘ximo - Choice Overload), newsletter geral, receitas populares (prova social)

2. Receitas (/receitas)

Objetivo: Engajar usuΓ‘rios e converter sutilmente

  • Search sticky no topo (mobile), resultados imediatos - Cognitive Load
  • Cards compactos em grid responsivo (2 β†’ 5 colunas)
  • Category badges destacados nos cards - Von Restorff Effect

3. Receita (/receitas/:slug)

Objetivo: Entregar valor e converter no timing certo

Receitas Completas (PadrΓ£o)

Ordem do conteΓΊdo, baseada em psicologia de conversΓ£o:

  1. Valor primeiro: Breadcrumb + tΓ­tulo + galeria + ingredientes + modo de preparo completo (o usuΓ‘rio recebe o que veio buscar)
  2. Reciprocidade: Compartilhamento social apΓ³s o consumo do valor
  3. Commitment: Newsletter contextual no momento de maior satisfaΓ§Γ£o (Peak-End Rule)
  4. ConversΓ£o principal: E-book recomendado (variant featured) quando hΓ‘ maior confianΓ§a estabelecida
  5. RetenΓ§Γ£o: Receitas similares para manter engajamento e reduzir bounce

Receitas Exclusivas (mostrar_ebook definido)

  • Preview limitado: Apenas 2 parΓ‘grafos do modo de preparo, com gradiente de fade-out no segundo - Curiosity Gap
  • Single CTA: Foco total na conversΓ£o do e-book especΓ­fico, zero distraΓ§Γ΅es
  • Scarcity Principle: Preview limitado cria sensaΓ§Γ£o de exclusividade

Copy: tΓ­tulo aspiracional ("Para vocΓͺ que ama cozinhar"), texto conciso, conexΓ£o contextual com o nome da receita, tom elegante sem linguagem vendedora.

4. Categorias (/categorias)

Objetivo: NavegaΓ§Γ£o eficiente por tipos de receita

  • Grid de categorias com contador de receitas
  • Sem Aside nesta pΓ‘gina

5. Categoria (/categorias/:slug)

Objetivo: Listar receitas da categoria especΓ­fica

  • Breadcrumb + tΓ­tulo da categoria (sem hero)
  • Lista de receitas com variant compact e paginaΓ§Γ£o

6. E-books (/ebooks)

Objetivo: Maximizar vendas com pΓ‘gina comercial

  • Grid comercial de e-books + newsletter especΓ­fica para e-books

7. E-book (/ebooks/:slug)

Objetivo: Converter em compra com pΓ‘gina de vendas completa

EstratΓ©gia de conversΓ£o em 3 momentos:

  1. Hero com valor imediato: capa (full-width no mobile) + descriΓ§Γ£o + preΓ§o + CTA
  2. BenefΓ­cios detalhados para convencimento (campo pagina_website em prose)
  3. CTA final com reforΓ§o visual (imagem repetida + copy persuasivo) - Peak-End Rule e Mere Exposure Effect
  • Aside minimal via parallel route - Cognitive Load: foco em uma aΓ§Γ£o (comprar)
  • Structured Data: Product schema completo para SEO

πŸ“Œ Aside PadrΓ£o (30% desktop)

Todos os asides usam o componente LayoutAside configurΓ‘vel, permitindo ativar/desativar seΓ§Γ΅es por rota com manutenΓ§Γ£o centralizada:

  • E-book em destaque: ConversΓ£o principal (featuredEbook)
  • Quem Γ© a Lets Cozinha: Credibilidade da marca (whoIsLets)
  • Categorias: NavegaΓ§Γ£o relacionada (categories)
  • Newsletter personalizada: Quando especificada (newsletter)

ExceΓ§Γ΅es:

  • Receita (/receitas/:slug): E-book como seΓ§Γ£o integrada no Content
  • Categorias (/categorias): NΓ£o possui Aside
  • E-books (/ebooks): Newsletter especΓ­fica, sem featured ebook
  • E-book (/ebooks/:slug): Aside minimal (apenas newsletter/contato)

πŸ“„ PΓ‘ginas Complementares

  • /conheca-a-lets - Sobre a autora (credibilidade)
  • /contato - Suporte e confianΓ§a
  • /politica-de-privacidade - Legal
  • /termos-de-uso - Legal

Releases

Packages

Used by

Contributors

Languages