Vou transformar minha vida numa API

Vou transformar minha vida numa API
Photo by Douglas Lopes / Unsplash

Minha ideia

Eu tava de boa trabalhando, e do nada veio uma epifania, "E se eu transformasse minha vida numa API" e com a ideia mesmo de eu conseguir fazer uma requisição GET e retornar algo como:

{
  "mood": "coding",
  "coffee_count": 3,
  "last_commit": "2 minutes ago",
  "current_song": "Lo-fi Hip Hop Radio"
}

Então vou fazer isso, vou criar o LifeOS.

Por que vou fazer isso?

Acredito que isso é basicamente uma resposta do meu primeiro post "saudade de codar". E isso nem é só por causa de não estar mais trabalhando 100% com código no meu trabalho. O problema é que desde o momento que programar se torna sua profissão, quando você fica a maior parte do dia fazendo isso porque é obrigado, porque precisa ganhar um salário, a magia e o encanto acabam se perdendo. Programar fica chato.

Então eu acho que isso é algo para qualquer um que já viu programar ficando chato: não é e não precisa ser assim. Quem programa tem a habilidade para fazer coisas extraordinárias, e a gente não precisa fazer isso só para trabalhar. São projetos bobos, coisas que se você fizer ou não, talvez não mude tanto na sua vida. Mas você pode parar para mostrar para duas pessoas e falar "Olha que massa".

É sobre isso: voltar a fazer coisas por diversão, sem esperar retorno financeiro.

O que vou trackear

photo of bulb artwork
Photo by AbsolutVision / Unsplash

Bom, ainda não da para fazer magia, e pegar absolutamente todos os aspectos da minha vida de uma vez. Mas eu mapeei as principais ferramentas que eu uso tanto na parte profissional quanto pessoal, e vou fazer integrações para a minha API, para que eu tenha métrica do máximo de coisas possíveis, isso para conseguir desde ver o que eu fiz no dia ou na semana, até conseguir integrar uma IA para análise preditiva e ver quais são meus pontos de alta performance e produtividade, e conseguir fazer planos e mapeamentos. Entender por que x semana foi ruim, qual comportamento eu tenho tido, isso desde o trabalho até minha saúde.

Eu dividi as integrações em 2 contextos

Vida pessoal:

  • Apple Music: O que estou ouvindo, mood musical, horas escutadas na semana
  • Kindle: Livros sendo lidos, tempo de leitura por período, highlights feitos
  • Nintendo: Horas jogadas, jogos mais jogados (Sim, vou precisar fazer uma gambiarra porque a Nintendo obviamente não tem nenhum tipo de API)
  • Apple Health: Exercícios, sono, tempo de atividade
  • Banco: Gastos em tempo real, controle de fatura de cartão, investimentos

Vida profissional

  • GitHub: Commits, linguagens usadas, contribuições, pull requests
  • Notion Calendar: Reuniões vs tempo de foco, work/life balance
  • Jira: Tasks entregues, story points, projetos ativos
  • Slack: Mensagens enviadas, tempo de resposta, comunicação

Total: 9 integrações para começar. E sim, pretendo adicionar mais no futuro.

A arquitetura

sign illustration
Photo by Hanna Morris / Unsplash

Aqui é onde fica interessante, em vez de criar uma tabela para cada integração que vou fazer, com seus próprios campos, vou unificar tudo com 3 tabelas principais.

Tabela "metrics"

vai armazenar TUDO. Cada evento, de qualquer API que seja vira uma linha:

  • source: de onde veio (github, spotify, slack)
  • timestamp: quando aconteceu
  • event_type: o que aconteceu (commit, track_played, message_sent)
  • value: valor numérico se houver
  • data: um campo JSONB com os dados específicos de cada API

Por que JSONB? Porque o PostgreSQL permite que eu guarde qualquer estrutura de dados e ainda faça queries dentro dele. Um commit do GitHub tem campos diferentes de uma música do Spotify, mas ambos cabem perfeitamente no mesmo lugar.

Tabela "daily_summaries"

vai guardar agregações pré-calculadas. Todo dia às 00h, um job vai rodar calculando coisas como: total de commits, média de energia das músicas, horas em reunião, gastos do dia. Isso evita recalcular tudo sempre que o dashboard carregar. Conforme for ficando pesado, e eu sentir necessidade de ver períodos mais específicos, vou criar outras tabelas de summary, com períodos mensais, anuais etc..

Tabela "sessions"

Vai trackear atividades com início e fim. Uma sessão de gaming, um bloco de deep work, uma reunião longa. Isso permite análises como "produtividade após gaming" ou "commits durante focus time". De forma resumida vai ser para atividades onde vou fazer o registro manual.

Como funciona na prática

graphs of performance analytics on a laptop screen
Photo by Luke Chesser / Unsplash

O fluxo é assim:

  1. Uma API externa (GitHub, Spotify, etc) envia dados via webhook ou o sistema faz polling
  2. A API recebe, processa e salva na tabela metrics
  3. Imediatamente manda via WebSocket para o frontend
  4. O dashboard recebe e atualiza os números sem refresh
  5. Você vê o número de commits subir de 11 para 12 com uma animação suave

Tudo em tempo real. Quando der play numa música, o dashboard mostra. Quando fizer um commit, aparece instantaneamente.

A stack

blue ballpoint pen on white notebook
Photo by Med Badr Chemmaoui / Unsplash

Backend: Rails API

Escolhi Rails porque quero produtividade máxima. Não preciso reinventar a roda. Rails me dá ActiveRecord para queries complexas, Sidekiq para background jobs, ActionCable para WebSockets, e convenções que funcionam. Além de ser uma tecnologia que gosto de trabalhar, e isso é o que mais influencia, é para ser um projeto leve e divertido, não fiquei fazendo milhões de análises técnicas, se não funcionar bem, ou se quiser usar outra coisa depois, eu troco, sem problemas.

Frontend: Remix

Perfeito para dashboards com dados server-side e interatividade client-side. Nested routes nativo (essencial para organizar as várias views), excelente para real-time updates (isso tudo na teoria, porque vai ser a primeira vez que vou usar ele), e não é Next.js, que já estou enjoando de tanto usar.

Database: PostgreSQL

JSONB para flexibilidade total com os dados variados das APIs, otimizado para time-series queries (métricas são sempre temporais), maduro e estável. Com TimescaleDB como extensão se precisar no futuro.

Real-time: ActionCable

WebSockets nativo do Rails, funciona perfeitamente com Remix, permite que o dashboard seja verdadeiramente vivo.

Infra auxiliar: Redis para filas do Sidekiq, Docker apenas para PostgreSQL e Redis (Rails roda nativo para melhor experiência).

O plano

Separei em 2 repositórios:

  • lifeos-api - Rails backend
  • lifeos-frontend - Remix dashboard

Vou começar pelo backend porque preciso dos dados fluindo primeiro. Frontend sem dados reais é só mockup bonito.

Criei um GitHub Project, e todo começo de semana vou definir as tarefas, até domingo pretendo já ter o projeto configurado, e conseguir implementar uma API por semana pelo menos. Até agora as primeiras tarefas estão assim:

  • Setup Docker para PostgreSQL e Redis
  • Setup inicial do Rails API
  • Configurar banco de dados
  • Criar estrutura das tabelas (metrics, daily_summaries, sessions)
  • Implementar autenticação JWT
  • Configurar CORS
  • Setup Sidekiq para background jobs
  • Criar endpoint de health check
  • Documentação inicial

Acompanhe o projeto (vai ter muito código e muito erro)

Vou documentar tudo aqui no blog:

  • Cada API integrada e seus desafios únicos
  • Problemas encontrados (vai ter muitos)
  • Soluções criativas (e algumas gambiarras)
  • O dashboard evoluindo de semana em semana
  • Insights descobertos com os dados

Toda semana vou compartilhar o progresso real do GitHub Project, mostrando quantas tasks foram concluídas, quanto tempo levou, e o que aprendi. Transparência total, incluindo os fracassos.

Vamos ver no que dá!