Estudo de Caso
Uma app de finanças pessoais para iOS, de utilizador único: transações, subscrições, orçamentos e objetivos de poupança manuais, com registo offline e conselhos de IA, a pedido, sobre se uma compra cabe mesmo no orçamento.

O problema
As apps de orçamento ou querem ligar-se ao banco — o que significa entregar credenciais a terceiros só para acompanhar um café — ou são uma folha de cálculo, que ninguém mantém atualizada depois da segunda semana. Faltava algo pelo meio: registo manual rápido que respeita o ritual de acompanhar os próprios gastos, sem a fricção de uma ligação bancária nem a taxa de abandono de uma folha de cálculo.
A restrição mais difícil era pessoal: construir sozinho, inteiramente a partir de Windows sem Mac, visando um iPhone físico, sem equipa de backend separada nem infraestrutura extra para manter depois — tudo tinha de ser uma única unidade implantável.
Decisões-chave
Sem integração Open Banking, sem credenciais partilhadas, sem intermediário de dados terceiro. Cada transação, subscrição e orçamento é inserido à mão — mais lento por registo, mas a app não detém nada que não precise, e o modelo de dados mantém-se simples de ponta a ponta.
A API vive como route handlers `+api.ts` do Expo Router, exportada para a Vercel através do seu adaptador (não oficial, mas funcional). Não há servidor Express/Next.js separado — a app mobile e o seu backend saem do mesmo código, do mesmo commit.
Um espelho local em SQLite põe as transações em fila com um ID gerado no cliente; a interface atualiza-se de imediato independentemente da ligação, e um gestor de sincronização esvazia a fila ao reconectar, com deduplicação no servidor pelo mesmo ID — um pedido repetido nunca duplica o registo.
Lembretes de renovação de subscrições, avisos de limite de orçamento e check-ins semanais de objetivos correm como funções Inngest — agendadas por cron ou disparadas por evento na criação de uma transação — para a lógica de notificações nunca bloquear nem depender do ciclo de pedido/resposta.
A funcionalidade 'vale a pena comprar?' envia o saldo atual, subscrições próximas e gastos recentes ao Gemini com uma resposta limitada por schema JSON, e recebe um veredito, um raciocínio e um valor seguro para gastar — validado no servidor antes de chegar ao ecrã.
Tecnologias
Expo Router (SDK 57) e TypeScript para a app e as suas rotas de API, Clerk para autenticação só por Google, Neon Postgres com Drizzle ORM, Inngest para tarefas agendadas/orientadas a eventos, Google Gemini para o conselho a pedido, tudo na Vercel com Sentry para monitorização de erros.
O resultado
Uma v1 funcional a correr no meu próprio iPhone: transações, orçamentos por categoria com um limite mensal geral, objetivos de poupança, notificações push para renovações/limites/check-ins, e conselho de compra por IA a pedido — inserido offline tão facilmente como online. Um único código carrega o produto inteiro, do ecrã do telemóvel à linha no Postgres.
Contacto
Tens um projeto em mente ou queres só dizer olá? A minha caixa de entrada está sempre aberta — costumo responder no próprio dia.
Disponível para estágios & freelance