Como Construí um Blog com Arquitetura de Startup Unicórnio por $0/mês
Depois de 21 anos construindo sistemas, criei um blog que publica posts sozinho usando ML, knowledge graph e pipeline automatizado. Por que alguém faria isso ao invés de usar WordPress?
Este é o decision log completo da arquitetura do Vivo de Código: Next.js 16, PostgreSQL com pgvector, 10 containers Docker na Oracle Cloud e um sistema que parece saído de uma startup de $1B rodando com custo zero.
A Arquitetura Geral
graph TB
subgraph "Frontend (Vercel)"
A[Next.js 16 + React 19]
A --> D[6 Cron Jobs Proxy]
end
subgraph "Database (Supabase)"
E[PostgreSQL + pgvector]
E --> F[Embeddings 384-dim]
E --> G[Knowledge Graph]
end
subgraph "VPS Oracle Cloud"
I[10 Docker Containers]
I --> J[ACI - FastAPI]
I --> K[MinIO Storage]
I --> L[12 Python Crons]
end
A --> E
A --> I
J --> E
Esta arquitetura serve 27 posts, ~2.000 palavras cada, com pipeline de ML que roda embeddings, extrai entidades e constrói grafos de conhecimento automaticamente.
Por Que Next.js 16 e Não Astro/Hugo
Alternativas consideradas:
- Astro (melhor performance)
- Hugo (velocidade insana)
- WordPress (ecossistema gigante)
Por que Next.js venceu:
Server Components: Posso rodar ML direto no servidor. O Revenue Router do AdSense segmenta anúncios por perfil sem API calls.
ISR + On-Demand Revalidation: Pipeline publica post → webhook revalida páginas específicas. Zero rebuild manual.
Flexibilidade: Páginas estáticas (posts), dinâmicas (busca) e híbridas (comentários) na mesma stack.
Números reais:
- Build: ~2min para 27 posts
- FCP: ~0.8s
- TTI: ~1.2s
PostgreSQL + pgvector: O Cérebro do Sistema
Por que não MongoDB/Redis/Elasticsearch:
PostgreSQL resolve tudo: dados relacionais, embeddings vetoriais, full-text search e JSON. Um banco, múltiplas funções.
-- Busca semântica com pgvector
SELECT
title,
content,
1 - (embedding <=> query_embedding) as similarity
FROM posts
WHERE 1 - (embedding <=> query_embedding) > 0.7
ORDER BY embedding <=> query_embedding
LIMIT 10;
O pipeline de embeddings:
- Post publicado → webhook dispara
- Texto chunked em 512 tokens
- all-MiniLM-L6-v2 gera embeddings 384-dim
- pgvector indexa para busca semântica
- Knowledge graph extrai entidades relacionadas
Custo: $0 (Supabase free tier: 500MB, 2 conexões simultâneas)
VPS Oracle Cloud: 10 Containers por $0
Por que Oracle Cloud e não AWS/GCP:
Oracle Always Free: 4 OCPUs ARM, 24GB RAM, 200GB storage. Para sempre. Sem cartão de crédito após trial.
Os 10 containers rodando:
# docker-compose.yml (resumido)
services:
aci-api:
image: vivodecodigo/aci:latest
ports: ["8000:8000"]
minio:
image: minio/minio
volumes: ["./data:/data"]
ml-pipeline:
image: vivodecodigo/ml-pipeline:latest
environment:
- SUPABASE_URL=${SUPABASE_URL}
- HUGGINGFACE_TOKEN=${HF_TOKEN}
12 Python crons rodando:
- Scraping de fontes RSS (4x/dia)
- Processamento de embeddings (1x/dia)
- Backup automático (1x/semana)
- Health checks (1x/hora)
- Analytics sync (1x/dia)
Pipeline de ML sem GPU
O desafio: Rodar modelos Transformer em CPU ARM sem explodir o orçamento.
A solução:
- Sentence-transformers otimizado para CPU
- Batch processing noturno
- Cache agressivo de embeddings
- Quantização INT8 nos modelos
Tempo de processamento:
- 1 post (~2000 palavras): ~45s
- Batch 10 posts: ~6min
- Embedding similarity search: ~50ms
Knowledge Graph Caseiro
Cada post vira um nó conectado por:
- Similaridade semântica (embeddings)
- Tags compartilhadas
- Entidades nomeadas (spaCy)
- Referências cruzadas
Resultado: sistema de recomendação que sugere posts relacionados com 78% de precisão vs 23% de tags manuais.
Monitoramento e Analytics
Stack de observabilidade:
- Umami (analytics privacy-first)
- Sentry (error tracking)
- Uptime Robot (monitoring)
- Custom dashboards (Grafana + Prometheus)
Métricas que importam:
- Tempo de leitura médio: 4min 32s
- Taxa de rejeição: 23%
- Posts mais lidos: tutoriais práticos
- Horário de pico: 14h-16h (Brasil)
Custos Reais Mensais
- Vercel: $0 (hobby plan)
- Supabase: $0 (free tier)
- Oracle Cloud: $0 (always free)
- Cloudflare: $0 (free tier)
- Domínio: R$ 40/ano
- Total mensal: ~R$ 3,33
Lições Aprendidas
Over-engineering vale a pena quando cada decisão vira conhecimento aplicável em projetos pagos.
Free tiers são poderosos se você conhece os limites e otimiza dentro deles.
Automação é investimento - 40h construindo pipeline vs 2h/semana publicando manualmente.
PostgreSQL é subestimado - um banco que faz trabalho de 4 ferramentas.
O Vivo de Código não é só um blog. É um laboratório de produção onde testo tecnologias que uso com clientes, sem o risco de quebrar sistemas críticos.
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
Top comments (0)