Documento Técnico

System Design

Especificação técnica completa — sistema de design, esquemas de dados, rotas de API, autenticação e integrações.

CoresTipografiaEspaçamentoComponentesÍconesDocsEsquemasRotas de APIAutenticaçãoWebhooks
01Design System

Paleta de Cores

A paleta foi construída para transmitir sofisticação e confiança. O dourado sobre fundo escuro cria o contraste premium que posiciona a marca no segmento de saúde de alto cuidado — a mesma linguagem visual usada por clínicas de referência e consultórios premium.

O dourado é a cor central da identidade. Cada variação — do sólido ao 12% de opacidade — tem um propósito específico para manter consistência em botões, bordas, badges e efeitos visuais.

Primary#C9A84C--gold

A cor principal. Botões de ação, títulos destacados, ícones, labels de seção. O primeiro elemento que o visitante nota.

Primary Hover#E8D48B--gold-light

Estado hover de botões e links. Versão mais clara que confirma visualmente que o elemento é clicável.

On Primary#0A0A0A--bg

Cor do texto sobre botões dourados. O contraste escuro sobre gold garante legibilidade nos CTAs.

Primary Mutedrgba(201,168,76,0.12)--gold-dim

Gold a 12% — fundo de badges, tags e highlight boxes. Destaque suave sem competir com o texto.

Primary Glowrgba(201,168,76,0.25)--gold-glow

Gold a 25% — box-shadow em hover de botões. Cria a sensação de "luz" premium e acolhedora do consultório.

Border Defaultrgba(201,168,76,0.18)--gold-border

Gold a 18% — bordas de cards, inputs e dividers. Sutil no estado normal para não criar ruído visual.

Border Hoverrgba(201,168,76,0.35)--gold-border-h

Gold a 35% — bordas em hover, focus e active. O brilho extra confirma que o elemento é interativo.

Quatro camadas de escuro que criam profundidade visual. Cada nível é ligeiramente mais claro, permitindo que cards e elementos "flutuem" sobre o fundo sem usar sombras pesadas.

Background#0A0A0A--bg

O fundo base de todas as páginas. Quase preto, mas com calor suficiente para não parecer frio.

Card#101010--bg-card

Fundo de todos os cards, caixas de conteúdo e o menu mobile. Um nível acima do fundo para criar separação visual.

Element#141414--bg-el

Fundo de elementos interativos em hover — quando o usuário interage com um card, este nível aparece para dar feedback visual.

Surface#1A1A1A--bg-surf

O nível mais elevado. Usado em dropdowns e tooltips — elementos que "flutuam" sobre todo o resto.

Seis tons de texto organizados por hierarquia visual. O dourado destaca elementos de navegação e acentos; os tons neutros guiam o olhar do visitante do título ao conteúdo de suporte.

Gold (Acento)#C9A84C--gold

Cor de texto para labels de seção (01 — QUEM SOMOS), acentos em títulos com <em>, nome da nutricionista no header, links em hover e ícones.

Gold Hover#E8D48B--gold-light

Texto dourado em estado hover — links de navegação, itens de menu e botões quando o usuário interage.

Primary#F0EDE6--text

Todos os títulos, nomes e informações que o visitante precisa ver primeiro. Tom quente e acolhedor em fundo escuro.

Secondary#C8C3B8--text-s

Parágrafos e texto de suporte. Visível o suficiente para leitura confortável, mas não compete com os títulos.

Muted#8A8578--text-m

Descrições curtas, placeholders de formulários e metadata. Guia o olhar sem dominar a página.

Disabled#5A5549--text-d

Informação terciária — timestamps, notas legais e rodapé. Presente mas discreta.

Cores reservadas para comunicar estados ao usuário — sucesso de um envio de formulário, um aviso importante ou informação de suporte. Nunca usadas para decoração.

Success#6FCF97--green

Confirmação de ações bem-sucedidas — formulário enviado, agendamento confirmado, item incluído no plano.

Success Mutedrgba(111,207,151,0.1)--green-dim

Fundo suave para badges de sucesso. Usado na tabela de serviços para indicar itens incluídos.

Danger#E87461--red-soft

Alertas que requerem atenção — erros de formulário, avisos de prazo, pontos fracos na análise.

Info#7B9EFF--blue

Informação neutra que merece destaque — badges "should have", links de referência, área técnica nas features.

Info Mutedrgba(100,140,255,0.1)--blue-dim

Fundo suave para badges informativos. Usado nos tags de prioridade "should" e versão "v2".

02Design System

Tipografia

Três famílias tipográficas, cada uma com um papel claro. A combinação de uma serifada clássica para impacto, uma sans-serif moderna para legibilidade e uma monoespaciada para precisão técnica cria a linguagem visual premium do projeto.

Playfair Display

Display & Headings
--serifGoogle Fonts
Por que esta fonte?

Uma serifada com personalidade acolhedora e sofisticada. As curvas e o contraste dos traços transmitem autoridade e cuidado — ideal para uma nutricionista clínica. O visitante sente "confiança" antes de ler uma palavra.

Onde aparece no site?

Todos os títulos de seção, o headline do hero, nomes das especialidades e cabeçalhos do blog.

Fallback: Georgia, serif
Nutrição Clínica em Goiânia, GO400 · 2rem
Especialidades em Saúde da Mulher600 · 1.6rem
Agende sua Consulta700 · 1.4rem
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 !@#$%&*().,;:?

Outfit

Body & UI
--sansGoogle Fonts
Por que esta fonte?

Uma sans-serif geométrica e limpa que garante legibilidade máxima em qualquer tamanho de tela. O peso Light (300) cria parágrafos elegantes; o Semi-Bold (600) dá firmeza aos títulos de cards e botões.

Onde aparece no site?

Todo o corpo de texto, descrições de cards, botões, navegação, formulários e labels. É a fonte que o visitante mais lê.

Fallback: system-ui, sans-serif
Nutricionista clínica em Goiânia, GO, com foco em emagrecimento, saúde da mulher, nutrição esportiva e gestantes.300 · 0.95rem
Consulta personalizada com plano alimentar exclusivo600 · 0.95rem
A Nutricionista700 · 0.85rem
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 !@#$%&*().,;:?

JetBrains Mono

Code & Labels
--monoGoogle Fonts
Por que esta fonte?

Uma monoespaciada desenhada para legibilidade em tamanhos pequenos. Usada em contextos técnicos e de navegação — transmite precisão e atenção ao detalhe sem ser intimidante.

Onde aparece no site?

Labels de seção (01 — ESPECIALIDADES), tags de conteúdo, badges de prioridade, versões (v1/v2), preços e o menu de navegação.

Fallback: monospace
01 — ESPECIALIDADES · v1 · MUST HAVE400 · 0.72rem
/api/agendamento · POST · 201 Created500 · 0.72rem
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 !@#$%&*().,;:?

Cada peso tipográfico tem uma função na hierarquia visual. A regra é simples: quanto mais importante a informação, mais pesado o weight. Isso garante que o visitante sabe exatamente onde olhar primeiro.

300
LightOutfit
Acompanhamento nutricional personalizado, plano alimentar exclusivo e suporte contínuo — do primeiro atendimento à conquista dos seus objetivos.
0.95rem--sansBody text — descrição de seção
Consulta online ou presencial em Goiânia, GO. Atendimento humanizado e ciência aplicada.
0.84rem--sansBody small — texto dentro de cards
Semana 1–2 · Milestone: Escopo aprovado ✦
0.78rem--sansCaption — metadata de timeline

O peso principal para parágrafos longos. Fino o suficiente para ser elegante em fundo escuro, mas com legibilidade total em qualquer dispositivo.

400
RegularOutfit · Playfair Display · JetBrains Mono
Nutrição que transforma vidas em Goiânia
2rem--serifHeading 1 — título de seção (serif)
Emagrecimento & Saúde da Mulher
1.2rem--serifHeading 3 — título de especialidade (serif)
01 — ESPECIALIDADES · v1 · MUST HAVE
0.72rem--monoLabel — código e labels (mono)

O peso "neutro". Usado nos títulos serifados que devem ser elegantes sem gritar, e no texto base quando Light seria demasiado sutil.

500
MediumOutfit · JetBrains Mono
ESPECIALIDADES · SOBRE · AGENDAMENTO
0.72rem--sansNav links — menu de navegação
EMAGRECIMENTO · GESTANTES · ESPORTIVA
0.6rem--monoTags — badges de especialidade
01 — ESPECIALIDADES
0.62rem--monoSection label — numeração de seções

Cria ênfase suave — os links de navegação e labels de seção usam este peso para se destacarem do corpo de texto sem serem "bold".

600
Semi-BoldOutfit · Playfair Display
Emagrecimento com Saúde
0.95rem--sansHeading 4 — título de card (sans)
Como Funciona a Consulta
1rem--sansSub-title — sub-seção (sans)
AGENDAR CONSULTA
0.82rem--sansButton — texto de CTA

O peso de "ação". Todos os títulos de cards, botões e sub-headings usam Semi-Bold para indicar que são pontos de entrada para o conteúdo.

700
BoldOutfit · Playfair Display
A Nutricionista
0.8rem--sansBrand — nome no header (sans)
R$ 280
0.88rem--monoPrice — valor da consulta
01
1.4rem--serifNumber — número de seção (serif)

Reservado para informação de alto impacto — o nome da nutricionista, valores de consulta e percentagens de resultado. Usado com parcimônia para manter o seu poder.

Uma escala de 11 níveis que cobre desde o título do hero até o menor tag de especialidade. Cada nível tem tamanho, peso, fonte e espaçamento definidos para que qualquer elemento adicionado ao site encaixe naturalmente na hierarquia visual.

Nutrição que Transforma
Display<h1 (hero)>
Tamanhoclamp(2.4rem, 5.5vw, 4.5rem)Linha1.15Fonte--serifPeso400

A primeira coisa que o visitante vê. Responsivo — 4.5rem no desktop, 2.4rem no mobile. Apenas 1 por página.

Especialidades da nutricionista
Heading 1<h2 (section)>
Tamanhoclamp(1.8rem, 3.5vw, 2.6rem)Linha1.25Fonte--serifPeso400

Título de cada seção principal — "Especialidades", "Sobre", "Agendamento". Marca a entrada de um novo bloco de conteúdo.

Emagrecimento & Saúde da Mulher
Heading 2<h3 (card group)>
Tamanho1.5remLinha1.3Fonte--serifPeso400

Sub-título dentro de uma seção — cabeçalho de especialidade, nome de material, posicionamento proposto.

Setup & Design System
Heading 3<h3 (timeline)>
Tamanho1.2remLinha1.4Fonte--serifPeso400

Títulos de fases do timeline, especialidades e pilares. Suficientemente grande para ser um ponto de parada visual.

Nutrição para Gestantes
Heading 4<h4 (card)>
Tamanho0.95remLinha1.5Fonte--sansPeso600

Título de cada card individual — especialidades, materiais, features. O visitante lê estes títulos para decidir o que explorar.

Como Funciona a Consulta
Sub-title<h3 (sub)>
Tamanho1remLinha1.5Fonte--sansPeso600

Introduz um sub-bloco dentro de uma seção — "Processo de Atendimento", "Materiais Gratuitos", "Especialidades Selecionadas".

Nutricionista clínica em Goiânia, GO, com foco em emagrecimento e saúde da mulher.
Body<p>
Tamanho0.95remLinha1.7Fonte--sansPeso300

Parágrafos descritivos nas seções. Line-height generoso (1.7) para conforto de leitura em fundo escuro.

Consulta presencial em Goiânia. Plano alimentar personalizado incluso.
Body Small<p (card)>
Tamanho0.84remLinha1.7Fonte--sansPeso300

Texto dentro de cards — descrições de especialidades, detalhes de materiais, texto de features.

E-book gratuito · Receitas Saudáveis para Gestantes ✦
Caption<span>
Tamanho0.78remLinha1.6Fonte--sansPeso300

Informação de contexto — tipos de material, metadata de suporte, notas de rodapé.

01 — ESPECIALIDADES
Label<div/span>
Tamanho0.62remLinha1Fonte--monoPeso500

O "numerador" de cada seção. Sempre em maiúsculas, com letter-spacing largo. Define a cadência da página.

EMAGRECIMENTO · GESTANTES · V1
Tag<span>
Tamanho0.6remLinha1Fonte--monoPeso500

Os menores elementos de texto. Badges de especialidade, prioridades MoSCoW e versões. Sempre dentro de pills ou com background.

03Design System

Espaçamento

2xs4px0.25remInline gaps, badge padding
xs8px0.5remComponent internal gaps
sm12px0.75remInput padding, small gaps
md16px1remCard padding, standard gap
lg24px1.5remSection padding (mobile)
xl32px2remSection padding (desktop), spacers
2xl48px3remContent block margins
3xl64px4remSection vertical (mobile)
4xl96px6remSection vertical (desktop)
04Design System

Componentes

Agendar ConsultaSM

Button Primary

bg-gold text-dark, rounded, uppercase tracking-wide, hover shadow-gold + bg-gold-light

<Button variant="primary">
Ver EspecialidadesSM

Button Ghost

Transparente com border-gold, text-gold, hover border-gold-border-h

<Button variant="ghost">

Nutrição para Emagrecimento

Saúde da Mulher · Goiânia, GO

ClínicoEspecialidade

Card

bg-dark-card com shimmer top-line gradient, hover lift (-3px) e shadow-gold

<Card>
Como funciona o agendamento?
Preencha o formulário de agendamento e nossa equipe entrará em contato em até 24 horas.
Atende de forma online também?

Accordion

Collapsible com chevron animado (rotate 180°), bg-dark-card, gold border

<AccordionItem>
GoldInfoSuccessMuted

Badge

Pill em font-mono text-tag com variantes: gold, info, success e muted

<Badge>
02 — ESPECIALIDADESNutrição clínica

Section Label

"01 — Título" em JetBrains Mono, text-gold, uppercase, tracking-[0.2em]

<SectionLabel>

Divider

Linha gradient: transparent → gold/35 → transparent, GSAP scaleX reveal

<Divider>
★ ★ ★ ★ ★
“A consulta transformou minha relação com a alimentação”

Ana C. — Goiânia, GO

Testimonial

Blockquote em Playfair Display, 5 stars gold, dot navigation com expand

<TestimonialSlider>
500+

Pacientes Atendidos

8+

Anos de Experiência

Counter Up

Número animado de 0 até valor final com ease-out cúbico no viewport

<CounterUp>
Qualidade

CRN e especializações comprovadas

Trust Signal

Card com ícone ◆ gold, Badge label e descrição body-sm

TrustSignal
Dra. Nutricionista
EspecialidadesMateriaisSobreAgendar

Header

Fixed top, transparent → blur bg on scroll, hide on scroll-down, show on scroll-up

<Header>
HomeEspecialidadesMateriaisSobre
Agendar

Mobile Drawer

Slide-in right 280px, backdrop blur, focus trap, body scroll lock, gold CTA

<MobileDrawer>
Dra. Nutricionista
IGTKWA
Serviços

Especialidades

Materiais

Agendamento

Info

Sobre

FAQ

Contato

© 2026 Dra. NutricionistaPrivacidade · LGPD

Footer

4 colunas: brand + social + 3 link groups, bottom bar com copyright e legal

<Footer>
Fixed bottom-right, z-40

WhatsApp Float

Botão fixo bottom-right #25D366, hide on fast scroll, mensagem contextual por rota

<WhatsAppFloat>

Utilizamos cookies para melhorar sua experiência e analisar o tráfego do site, conforme a LGPD.

RecusarAceitar

Cookie Banner

Slide-up com backdrop blur full-page, Recusar (ghost) + Aceitar (gold)

<CookieBanner>
Email *
paciente@email.com
Nome Completo
Ana Carolina

Form Field

Input bg-dark-el border-gold-border, label mono uppercase, focus ring-gold/30

<FormField>
Contato
2
Consulta
3
Detalhes

Progress Bar

Step indicators circulares w-8 h-8, connecting lines, active/completed em gold

<ProgressBar>
1
2
3
EmagrecimentoSaúde da MulherEsportivaGestantes

Lead Form

Wizard 3 passos (react-hook-form + zod): dados pessoais → especialidade → detalhes

<LeadForm>
Mon 24Tue 25Wed 26Thu 27
09:0010:0011:0014:0015:0016:0017:0018:00

Booking Widget

Calendário Google Calendar / Cal.com embutido com horários disponíveis

<BookingWidget>
05Design System

Ícones

Material Symbols Outlined via Google Fonts

menumenu
closeclose
expand_moreexpand_more
expand_lessexpand_less
arrow_forwardarrow_forward
arrow_backarrow_back
arrow_downwardarrow_downward
health_and_safetyhealth_and_safety
photo_cameraphoto_camera
text_fieldstext_fields
articlearticle
descriptiondescription
auto_awesomeauto_awesome
searchsearch
drawdraw
exploreexplore
edit_documentedit_document
syncsync
bar_chartbar_chart
calendar_todaycalendar_today
paymentspayments
credit_cardcredit_card
inventory_2inventory_2
local_hospitallocal_hospital
locklock
checklistchecklist
account_treeaccount_tree
handshakehandshake
blockblock
calendar_todaycalendar_today
publicpublic
06Arquitetura & Escopo

Documentos Detalhados

07Backend

Esquemas de Dados

Sem banco de dados tradicional — Sanity CMS para todo o conteúdo, Stripe para compras de materiais. Os esquemas abaixo refletem os tipos de documento do Sanity e os objetos do Stripe.

especialidades (Sanity)

Especialidades da nutricionista — gerenciadas no Sanity Studio, sem banco SQL
CampoTipoRestrição
_idstringSanity document ID
titlestringNOT NULL
slugslugUNIQUE
areastringemagrecimento, saude-mulher, esportiva, gestantes
descricaorichText
beneficiosstring[][]
imagemimageCloudinary via Sanity
featuredbooleanDEFAULT false
tagsstring[][]
_createdAtdatetimeauto

posts (Sanity)

Posts do blog — gerenciados no Sanity Studio com slug, categoria e metadados SEO
CampoTipoRestrição
_idstringSanity document ID
titlestringNOT NULL
slugslugUNIQUE
categoriastringemagrecimento, gestantes, esportiva, saude-mulher, receitas, dicas
resumotext
corporichText
imagemDestaqueimageCloudinary via Sanity
seoobject{ metaTitle, metaDescription }
publishedAtdatetime

materiais (Sanity)

E-books e materiais digitais disponíveis para compra ou download gratuito
CampoTipoRestrição
_idstringSanity document ID
titlestringNOT NULL
slugslugUNIQUE
coverImageimageCloudinary via Sanity
descricaorichText
preconumberBRL — 0 para gratuito
arquivoUrlstringCloudinary secure URL
categoriastringebook, guia, planilha
disponivelbooleanDEFAULT true

depoimentos (Sanity)

Depoimentos de pacientes com consentimento — gerenciados no Sanity Studio
CampoTipoRestrição
_idstringSanity document ID
nomestringNome ou primeiro nome da paciente
especialidadestringEspecialidade atendida
depoimentotextNOT NULL
fotoimageCloudinary via Sanity — opcional
consentimentobooleanDEFAULT false — LGPD
avaliacaonumber1 a 5 estrelas

faq (Sanity)

Perguntas frequentes gerenciadas no Sanity Studio com ordenação personalizada
CampoTipoRestrição
_idstringSanity document ID
perguntastringNOT NULL
respostarichTextNOT NULL
categoriastringagendamento, pagamento, atendimento, lgpd
ordemnumberOrdenação manual

solicitacoesAgendamento (Sanity)

Solicitações de consulta enviadas pelo formulário do site
CampoTipoRestrição
_idstringSanity document ID
nomestringNOT NULL
emailstringNOT NULL
celularstring
tipoConsultastringTipo de atendimento solicitado
mensagemtext
statusstringnova, em-analise, confirmada, cancelada
_createdAtdatetimeauto

configuracoesDoSite (Sanity)

Configurações globais do site e padrões de SEO
CampoTipoRestrição
_idstringSingleton document
nomeSitestring
descricaoSitetext
emailContatostring
whatsappstringNúmero com DDI (+55)
redesSociaisobject{ instagram, facebook, tiktok }
enderecotextGoiânia, GO, Brasil

Compras (Stripe)

Compras de materiais digitais gerenciadas pelo Stripe — sem tabela local de pedidos
CampoTipoRestrição
idstringStripe PaymentIntent ID
customer_emailstringNOT NULL
amountintegerEm centavos (BRL)
currencystringDEFAULT "brl"
statusstringsucceeded, pending, failed
metadataobject{ material_id, material_title, ... }
createdtimestampStripe timestamp
08Backend

Rotas de API

Next.js App Router — validação via Zod, respostas JSON.

POST/api/agendamento

Solicitação de consulta — salva no Sanity e envia e-mail de confirmação à paciente e notificação à nutricionista

{ nome, email, celular?, tipoConsulta, mensagem }
POST/api/leads

Captura de e-mail para material gratuito — valida consentimento LGPD, adiciona à lista e dispara envio do PDF via Resend

{ nome, email, materialId, consentimento }
POST/api/contato

Formulário de contato simples — envia notificação por e-mail à nutricionista

{ nome, email, mensagem }
POST/api/checkout

Cria Stripe Checkout Session para compra de material digital — retorna URL de redirecionamento

{ items: [{ materialId, title, preco, quantity }], customerEmail }
POST/api/webhooks/stripe

Webhook Stripe — processa payment_intent.succeeded e envia link de download por e-mail

Stripe payload (signature verificada)
POST/api/webhooks/sanity

Webhook Sanity — aciona revalidação ISR ao publicar conteúdo

Sanity payload (secret verificado)
09Segurança

Fluxo de Agendamento & Autenticação

Visitante navega pelo site sem necessidade de cadastro ou login

arrow_downward

Paciente preenche formulário de agendamento → POST /api/agendamento salva solicitação no Sanity

arrow_downward

E-mail enviado automaticamente via Resend com confirmação de recebimento e próximos passos

arrow_downward

Paciente preenche e-mail → POST /api/leads valida consentimento e dispara o PDF por e-mail

arrow_downward

Paciente seleciona e-book → POST /api/checkout cria Stripe Checkout Session

arrow_downward

Navegador redirecionado para checkout hospedado pelo Stripe com dados de compra pré-preenchidos

arrow_downward

Stripe envia payment_intent.succeeded para /api/webhooks/stripe — link de download enviado por e-mail

10Integrações

Webhooks & Fluxo de Dados

Fluxo de dados entre Stripe, Sanity e o site.

edit_document

Paciente solicita agendamento

POST /api/agendamento → salva no Sanity → Resend envia e-mail de confirmação à paciente e notificação à nutricionista

description

Captura de lead (material gratuito)

POST /api/leads → valida consentimento LGPD → Resend envia PDF e e-mail de boas-vindas

payments

Compra de material concluída

Stripe payment_intent.succeeded → POST /api/webhooks/stripe → Resend envia link de download por e-mail ao comprador

sync

Conteúdo publicado no Sanity

Webhook Sanity → POST /api/webhooks/sanity → aciona revalidação ISR das páginas /especialidades, /materiais e /blog

mail

Formulário de contato enviado

POST /api/contato → Resend notifica a nutricionista com os dados do visitante