Orbital
Controle financeiro pessoal para iPhone, Android e web, servido por uma única API.
- O problema
- Controlar gastos numa planilha não acompanha a pessoa no celular. O Orbital leva o controle para iPhone, Android e web sem duplicar regra de negócio: as três telas falam com a mesma API.
- O que eu fiz
- Projeto pessoal: modelagem do banco, API, app multiplataforma e testes.
Decisões técnicas
- Monorepo com o contrato da API em schemas Zod compartilhados: se o formato de uma resposta muda, o TypeScript do app quebra na hora.
- Dinheiro sempre em centavos (bigint) e lançamentos como data de calendário, sem erro de ponto flutuante nem de fuso horário.
- Chave estrangeira composta: o próprio banco recusa um gasto ligado a uma categoria de receita.
- Lançamentos recorrentes gerados na leitura, sem cron, com um índice único que impede duplicidade.
82 testes cobrindo valores em pt-BR, limites de mês e fuso e recorrência. Em desenvolvimento, com cadastro por convite.
- TypeScript
- Expo
- React Native
- Hono
- Drizzle
- Better Auth
- Zod
- Cloudflare Workers
- PostgreSQL
// Só o TIPO cruza a fronteira: o TypeScript enxerga cada rota e cada resposta,
// mas o Metro não empacota uma linha do servidor dentro do app.
import type { AppType } from '@financas/api'
/* … */
const rpc = hc<AppType>(API_URL, {
/* … */- Linha 3Só o tipo da API entra no app. Nenhuma linha do servidor vai junto para o iPhone, o Android ou a web.
- Linha 5O cliente conhece cada rota e cada resposta. Se a API mudar um formato, o app deixa de compilar na hora.

