Nicchon.
Todos os projetos
SiteEm produção· 2025

AYA Biomedicina

Site da Dra. Valéria Leite — biomedicina integrativa em Goiânia. Editor TipTap custom, analytics próprio em SQL, cache em 4 camadas.

Capa do projeto AYA Biomedicina

Sobre

Site da Dra. Valéria Leite — biomédica em Goiânia, CRBM 5.1065-GO, especialista em medicina integrativa (8 tratamentos: Acupuntura, Auriculoterapia, Aromaterapia, Florais de Bach, Laserterapia, Ozonioterapia, Radiestesia, Reiki). Arquitetura híbrida pragmática: Next.js 16 no Vercel + PHP 8.2 puro sem framework no Hostgator com MySQL 8. Cliente já paga Hostgator, então reusa PHP/MySQL dela (custo zero adicional). 88 commits mapeados em 8 marcos. CMS de artigos custom com editor TipTap estendido — não é instalação padrão.

Stack

  • Next.js 16
  • Vercel
  • PHP 8.2
  • MySQL
  • TipTap (extensions custom)
  • Tailwind 4
  • TypeScript
  • Hostgator (shared)

Decisões

  • Editor TipTap com extensions custom não-padrão: Columns (layouts 1:1, 2:1, 1:3, 1:1:1 dentro do artigo), GlobalStyleAttribute (persiste style inline em parágrafos/headings/listas), BlockControls (flutuante por bloco).
  • Biblioteca de mídia integrada com upload validado por MIME real via finfo (não pela extensão), nomes randomizados via bin2hex(random_bytes(12)), delete protegido contra path traversal com realpath confinado.
  • Analytics próprio completo sem GA/Plausible — 380+ linhas de SQL no endpoint /api/admin/analytics. Filtro de ~25 user-agents de bot antes do INSERT (Lighthouse, PageSpeed, GTmetrix, Twitterbot, etc).
  • Classificação de origem em 4 etapas (utm > click-id > referrer > direto), geo via ip-api.com SEM persistir IP (LGPD by design), tracker de leitura via IntersectionObserver + sendBeacon (só conta read_complete quando aluno realmente leu o artigo até o fim).
  • Cache em 4 camadas com fallback Apache: PHP file cache → Next.js ISR → snapshots JSON servidos pelo Apache (mesmo com PHP travado) → JSON bundled no Vercel. Site nunca cai.
  • JWT HS256 implementado à mão em 40 linhas (Hostgator shared não tem Composer).
  • Identidade visual da cliente, não nossa: paleta sálvia + dusty rose + Playfair Display.

Desafios técnicos

  • Hostgator shared sem SSH/Composer: deploy via GitHub Actions FTP, JWT HS256 implementado à mão sem dependência externa.
  • TipTap v3 com BubbleMenu conflitava com BlockControls custom: BubbleMenu removida em favor da nossa.
  • Performance em hosting compartilhado: cache em 4 camadas garante site no ar mesmo com PHP-FPM travado.
  • Slug auto-gerado com normalização PT-BR (remoção de acentos, lowercase, hífen) — cliente cria post 'Saúde Holística' e fica /saude-holistica.