Executando verificação de segurança...
0

Pitch: Anatomia do Vivo de Codigo: Como Construi um Blog com Stack de Startup

Como Construí um Blog que Parece Startup Unicórnio com $0/mês

Depois de 21 anos desenvolvendo para empresas, criei um blog pessoal que roda pipeline ML autônomo, knowledge graph caseiro e publica posts sozinho. Por que não usar WordPress? Porque cada projeto é uma chance de experimentar tecnologias que vou usar nos próximos clientes.

A Stack Completa: Decision Log Real

Frontend: Next.js 16 + React 19 na Vercel
Database: PostgreSQL + pgvector no Supabase
Backend: 10 containers Docker na Oracle Cloud (grátis)
Pipeline: 12 crons Python + FastAPI + MinIO

Resultado: 27 posts publicados, ~2.000 palavras cada, custo mensal praticamente zero.

Por Que Next.js 16 Venceu Astro e Hugo

Considerei Astro (melhor performance), Hugo (velocidade insana) e até WordPress (ecossistema gigante). Next.js venceu por três razões técnicas:

1. Server Components para ML: Posso rodar machine learning direto no servidor, sem API calls. O sistema de segmentação de anúncios roda como server component.

2. ISR + On-Demand Revalidation: Quando o pipeline publica um post, um webhook revalida apenas páginas necessárias. Sem rebuild completo.

3. Flexibilidade híbrida: Páginas estáticas (posts), dinâmicas (busca) e híbridas (comentários) na mesma aplicação.

Trade-offs aceitos:

  • Bundle maior que Astro (Vercel Edge resolve)
  • Mais complexo que Hugo (JavaScript é nativo pra mim)
  • Build time: ~2min para 27 posts
  • First Contentful Paint: ~0.8s

PostgreSQL + pgvector: O Cérebro da Operação

Supabase entrega PostgreSQL com pgvector nativo. Isso significa embeddings vetoriais de 384 dimensões rodando direto no banco, sem Pinecone ou Weaviate.

-- Busca semântica real rodando em produção
SELECT 
    p.title,
    p.slug,
    1 - (p.embedding <=> $1::vector) as similarity
FROM posts p
WHERE 1 - (p.embedding <=> $1::vector) > 0.7
ORDER BY similarity DESC
LIMIT 10;

Por que não Pinecone: 70/mês vs 0/mês no Supabase. Com 27 posts, pgvector entrega a mesma qualidade.

Knowledge Graph caseiro: Relacionamentos entre posts, tags e conceitos armazenados como JSONB. Busca por "React" traz posts sobre Next.js automaticamente.

Pipeline ML Sem GPU: Como Funciona

O segredo está na Oracle Cloud Free Tier: 4 OCPUs ARM + 24GB RAM grátis para sempre. Rodo 10 containers Docker:

# Geração de embeddings com sentence-transformers
from sentence_transformers import SentenceTransformer

model = SentenceTransformer('all-MiniLM-L6-v2')

def generate_embedding(text):
    # Limpa e processa o texto
    clean_text = preprocess_content(text)
    
    # Gera embedding 384-dimensional
    embedding = model.encode(clean_text)
    
    return embedding.tolist()

Pipeline completo:

  1. Cron coleta conteúdo (Notion API)
  2. IA processa e otimiza texto
  3. Gera embeddings vetoriais
  4. Publica no banco + CDN
  5. Revalida Next.js via webhook

Custo: $0 (Oracle Free Tier)
Tempo: Post completo em ~3 minutos

Vercel + Cloudflare: CDN Duplo

Configuração inusitada: Vercel como origem, Cloudflare como proxy. Por quê?

  • Vercel: Deploy automático, Edge Functions
  • Cloudflare: Cache agressivo, proteção DDoS, analytics detalhados

Resultado: TTFB médio de 89ms no Brasil, 134ms na Europa.

Analytics Próprio: Umami + Dados Customizados

Google Analytics não basta para decisões de produto. Rodo Umami self-hosted + coleta customizada:

  • Tempo real de leitura (não estimativa)
  • Scroll depth por seção
  • Origem do tráfego (dev.to, LinkedIn, direto)
  • Performance por dispositivo

Tudo armazenado no mesmo PostgreSQL, queries em tempo real.

Custos Reais: A Planilha Completa

  • Vercel: $0 (Hobby Plan)
  • Supabase: $0 (Free Tier - 500MB usado de 500MB)
  • Oracle Cloud: $0 (Free Tier permanente)
  • Cloudflare: $0 (Free Plan)
  • Domínio: R$ 40/ano

Total mensal: ~R$ 3,33

Resultados em Produção

Performance:

  • Core Web Vitals: 100/100 no PageSpeed
  • First Contentful Paint: 0.8s
  • Time to Interactive: 1.2s

Escalabilidade testada:

  • 1.000 posts simultâneos (stress test)
  • 50 requests/segundo sem degradação
  • Pipeline processa 10 posts/hora

Lições Aprendidas: O Que Faria Diferente

  1. Começaria com Astro: Para blog puro, performance > flexibilidade
  2. Redis para cache: PostgreSQL aguenta, mas Redis seria mais elegante
  3. Testes desde o início: Pipeline complexo = bugs complexos

Leia o artigo completo com todos os exemplos de código e diagramas em https://vivodecodigo.com.br/backend/anatomia-vivo-de-codigo-arquitetura-blog-tech

Carregando publicação patrocinada...