DEV Community

Marcos Soares
Marcos Soares

Posted on • Originally published at vivodecodigo.com.br

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

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
Enter fullscreen mode Exit fullscreen mode

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:

  1. Server Components: Posso rodar ML direto no servidor. O Revenue Router do AdSense segmenta anúncios por perfil sem API calls.

  2. ISR + On-Demand Revalidation: Pipeline publica post → webhook revalida páginas específicas. Zero rebuild manual.

  3. 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;
Enter fullscreen mode Exit fullscreen mode

O pipeline de embeddings:

  1. Post publicado → webhook dispara
  2. Texto chunked em 512 tokens
  3. all-MiniLM-L6-v2 gera embeddings 384-dim
  4. pgvector indexa para busca semântica
  5. 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}
Enter fullscreen mode Exit fullscreen mode

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

  1. Over-engineering vale a pena quando cada decisão vira conhecimento aplicável em projetos pagos.

  2. Free tiers são poderosos se você conhece os limites e otimiza dentro deles.

  3. Automação é investimento - 40h construindo pipeline vs 2h/semana publicando manualmente.

  4. 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)