1

Pitch: fiz sozinho um app de assinaturas em 10 dias. O que aprendi

Sou brasileiro e, em outubro, passei uns 10 dias construindo sozinho o Subfaro, um app para controlar assinaturas. Usei o Claude Code como par de programação o tempo todo. Ajudou a ir rápido, mas as decisões (e os erros) abaixo são meus. Quero contar o que deu trabalho e ouvir quem entende do assunto.

O problema

Três coisas me incomodavam na minha própria fatura:

  • Assinatura em dólar custa mais do que parece. Em cima do câmbio vêm o IOF de 3,5% e o spread do cartão.
  • Reajuste silencioso. O aviso do serviço chega por e-mail (quando chega), e você só percebe meses depois.
  • Teste grátis que vira cobrança. O clássico.

O gerenciador de assinaturas do Nubank resolve parte disso, de graça e sem você cadastrar nada. Mas só enxerga o cartão de crédito Nubank e não cancela nada (dá para bloquear ou trocar o cartão). Nos EUA existe o Rocket Money, que é bom, mas depende de conectar o banco e só funciona com bancos americanos.

O que o Subfaro faz

Você escolhe o serviço e o plano (Netflix Padrão, Spotify Família...) e o preço vem preenchido. Depois disso:

  • aviso antes de cada cobrança e do fim do teste grátis, por e-mail e notificação;
  • custo real do que é cobrado em moeda estrangeira: câmbio + IOF + spread do seu cartão;
  • assinatura dividida conta só a sua parte;
  • importação da fatura (PDF, CSV ou OFX) e uma extensão para Chrome que, na página da sua conta da Netflix, oferece "Adicionar ao Subfaro?" já preenchido;
  • link direto para cancelar cada serviço. O app não cancela nada por você.

É grátis até 10 assinaturas. O Pro custa R$ 9,90/mês ou R$ 79,90/ano.

Stack: Next.js 15 + Prisma + Postgres no Render (app e API), landing em Next.js estático, Android em Kotlin/Compose, extensão Chrome MV3, e-mails pelo Resend. São 5 repositórios e uns 260 commits.

5 decisões técnicas

1. Não conectar o banco

O Open Finance resolveria a detecção automática, mas escolhi não usar. Pedir acesso ao banco para listar assinaturas é pedir demais. O banco só mostra a cobrança depois que ela acontece, e a ideia é avisar antes. E dado que eu não guardo não vaza.

O preço é atrito: você precisa cadastrar. Para diminuir, existem o catálogo, a extensão e a importação de fatura (lida e descartada na hora; o arquivo não fica salvo).

2. Um robô de preços que pergunta antes de mudar

Toda segunda, às 6h de Brasília, um cron no Render visita a página de preços de mais de 100 serviços, no Brasil e nos EUA. Cada serviço tem um adaptador, e os parsers têm testes com páginas salvas. As requisições passam por proxy no país certo, porque o mesmo site mostra preços diferentes para quem acessa do Brasil e dos EUA.

  • Variação acima de 60% não entra sozinha. Fica para revisão: num salto desses, um erro de leitura do parser é mais provável que um reajuste.
  • O app não troca o valor da sua assinatura. Quando o preço oficial muda, ele pergunta: "A Netflix anunciou R$ 51,90 (você paga R$ 44,90). Sua fatura já mudou?". O preço novo vale primeiro para quem assina agora; quem já assina costuma pagar o antigo por mais um tempo.

Surpresa: pelo iPhone costuma sair mais caro. O YouTube Premium Família custa R$ 53,90 no site e R$ 69,90 pela App Store, então o catálogo guarda os dois.

3. Reajustes com data e fonte, e um índice

O robô só sabe o que viu a partir de outubro de 2026. Para trás, o histórico veio de páginas oficiais, páginas arquivadas e da imprensa, plano por plano, com o link da fonte em cada linha. Hoje são 111 mudanças de preço no Brasil e 132 nos EUA, numa página pública.

Com isso deu para montar um índice com o plano mais comum de 34 serviços. Em 12 meses, streaming e música (17 serviços) ficaram 6,6% mais caros; o IPCA de 12 meses foi 4,6%. Os dados estão num CSV aberto.

A regra mais importante: só conta como reajuste a mudança entre dois preços confirmados, pelo robô ou à mão na página oficial. Um preço de referência digitado uma vez nunca vira "preço antigo".

4. Um conector MCP para o Claude

Como o app já tinha uma API REST, o servidor MCP saiu barato: umas 400 linhas e 6 ferramentas (resumo de gastos, listar, buscar no catálogo, adicionar, atualizar e marcar como cancelada). Você pergunta "quanto eu gasto com assinaturas?" e o Claude responde com o custo real em reais.

O que mais pensei foram as regras de segurança: OAuth com escopo de só leitura ou de leitura e edição, nenhuma ferramenta de excluir, no máximo 30 alterações por hora por conexão e toda alteração registrada no app, com botão de desfazer.

Não é exclusividade (Organizze e Monarch também têm conector para IA), e o do Subfaro funciona no plano grátis.

Eu queria saber de onde vêm as visitas sem banner de cookie nem Google Analytics. A página manda um fetch com o caminho, a origem (referrer ou utm_source) e se é celular ou computador. O servidor só soma contadores: uma linha por dia × página × origem × país × dispositivo. Sem IP, sem identificador.

A origem fica só na memória da aba e vai no link para o cadastro (?src=...). Assim eu sei qual canal trouxe contas, sem rastrear ninguém. O custo: não dá para contar visitantes únicos. Aceitei.

Dois erros que custaram tempo

  • Apontei o shadow database do Prisma para o meu banco local de verdade. O Prisma reseta o shadow, e lá se foram os dados de teste.
  • A conta do Stripe é compartilhada com outro produto meu, e as primeiras cobranças do Pro saíam na fatura com o nome do outro produto. Num app que ajuda a achar cobrança estranha na fatura. Já corrigi: o Pro agora tem o próprio nome no Stripe e aparece como SUBFARO.

O que ainda falta

  • App de iPhone: fica para depois. O Android acabou de sair na Google Play; no iPhone dá para usar pelo Safari e adicionar à Tela de Início.
  • Preços só do Brasil e dos EUA.
  • O robô cobre mais de 100 serviços. Fora deles, você digita o valor.
  • Não acha assinatura sozinho sem a fatura ou a extensão, que por enquanto é só para Chrome.

O que eu queria ouvir de vocês

  1. Vocês confiariam mais num app que conecta no banco ou num que não conecta? Por quê?
  2. Perguntar "sua fatura já mudou?" antes de atualizar o preço faz sentido, ou é atrito à toa?
  3. Que serviço faltou no catálogo?

Crítica dura também serve. Se quiser testar: [subfaro.com]

Vou responder os comentários por aqui.

Carregando publicação patrocinada...
1

cara, muito interessante seu app. eu pensei nisso um tempo atrás quando precisava, por motivos pessoais, falhei miseravelmente em implementar kkk. parabéns pelo app.

então, conectar ao banco poderia ser uma funcionalidade opt-in, read-only. as vezes a pessoa quer tudo mastigado. sei lá, gastos, encontrar padrões para economizar, essas coisas. e isso facilita.

quanto aos desafios técnicos, achei bem interessante. isso traz bastante aprendizado.

um outro feedback, já que pediu: eu senti esse post como um pitch e um detalhamento técnico ao mesmo tempo. no título você promete compartilhar o que aprendeu, mas acaba misturando isso com a apresentação do app. a quantidade de assuntos competindo pela atenção no mesmo post pode diluir o impacto do conteúdo e o que você pretende alcançar com ele.

— é o hype

1

valeu, cara! fiquei curioso: o que pegou na sua tentativa? kkkkk

sobre conectar o banco, você respondeu justamente a pergunta que deixei no fim do post. opt-in e só leitura é o único jeito que eu toparia fazer. o que me segurou é que aqui seria via open finance, e pra quem tá sozinho isso significa passar por um agregador (pluggy, belvo...), pagar por conexão e virar responsável por dado bancário dos outros. tem também o detalhe de que o banco só mostra a cobrança depois que ela cai, e a ideia do app é avisar antes. por isso fui de importar a fatura: o app lê, acha as assinaturas e descarta o arquivo. mas concordo que, pra quem quer tudo mastigado, ainda é atrito

e o feedback do post é válido. quis fazer as duas coisas no mesmo texto e acabou que nenhuma ficou tão forte quanto podia. da próxima vez separo: um post só com o que aprendi (o robô de preços dava um post sozinho) e o pitch fica curtinho, à parte.