Oracle3
Open-source trading engine and MCP server for prediction markets. Fee-aware no-arbitrage trading across related contracts, live on Kalshi, Polymarket and Solana or on paper.
Aplicativo para controle inteligente de investimentos financeiros
Translation pending
FinanceJavaScript · TypeScriptGitHub @hhenriquOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Gestão financeira familiar — um Progressive Web App para o controle do dinheiro de casa: contas, cartões, lançamentos, despesas divididas em grupo, orçamento, metas e relatórios. Tem um módulo de investimentos, mas ele é uma parte do produto, não o produto.
No ar em https://pulodogato.hmoraes.com.br.
Sobre este arquivo. Até setembro de 2026 o README e a PRD descreviam um "Controle de Investimentos": um app de carteira de ações, FIIs e dividendos que nunca foi o que este repositório construiu. O passo a passo de instalação chegava a mandar colar
CREATE TABLE assets,transactionsedividendsno SQL Editor — tabelas que não existem no schema real e que conflitam com as 25 migrations dedatabase/migrations/. Quem seguisse o README montava um banco que o app não sabe ler. Isto é a HMO-119.
Dinheiro entrando e saindo
Dividir com outras pessoas
Planejar
O resto
| Frontend | Next.js 14 (App Router) + TypeScript + Tailwind |
| Componentes | Radix UI, Recharts, Lucide |
| Formulários | React Hook Form + Zod |
| Banco / Auth | Supabase (PostgreSQL, RLS) |
| PWA | next-pwa |
| Hospedagem | Vercel (+ Vercel Cron) |
Precisa de Node 20 e de um projeto Supabase.
npm install
cp .env.local.example .env.local # preencha as duas chaves do seu projeto
npm run dev # http://localhost:3000
As variáveis que o app lê:
| variável | para quê |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | cliente e servidor |
NEXT_PUBLIC_SUPABASE_ANON_KEY | cliente e servidor |
SUPABASE_SERVICE_ROLE_KEY | só as rotas de cron |
CRON_SECRET | autentica as rotas de cron |
NEXT_PUBLIC_VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, VAPID_SUBJECT | push |
NEXT_PUBLIC_URL | links absolutos em e-mail e push |
BRAPI_TOKEN | só o cron de cotação da carteira (/api/cron/cotacoes) |
As duas primeiras são obrigatórias já no build: utils/supabase/env.ts
valida que existem, que a URL é válida e que não são o valor de exemplo — e
next build pré-renderiza as telas de login, então um build sem elas falha em 31
páginas com Variável de ambiente ausente. As demais são lidas dentro dos
handlers: faltar não quebra o build, quebra a rota que precisa delas.
.env.productionnão está versionado (nem poderia: o.env.local.exampleexiste justamente para isso). Um clone limpo não constrói sem que você preencha as duas chaves — foi assim que o jobbuilddo CI reprovou na sua primeira execução.
O schema vive versionado em database/migrations/, hoje 001 a 024, e a ordem
importa — 001 sozinho deixa o banco aberto, é o 002 que liga a RLS.
001_baseline.sql é gerado por pg_dump; não edite à mão.
O deploy publica código, não schema. Não existe runner de migration neste
projeto: subir um PR para a Vercel não aplica nada no banco. Migration nova é um
passo manual, colada no SQL Editor do Supabase a partir do bundle de
database/validation/ — que o CI mantém em sincronia com as migrations
(node scripts/gen-validation-bundle.mjs --check).
Detalhes de cada arquivo, a ordem completa e as armadilhas conhecidas estão em
database/README.md.
Cálculo financeiro é testado dos dois lados. A aritmética em TypeScript roda com o runner nativo do Node sobre o JS compilado:
npm run test:lancamento # sinal, categoria, campos obrigatórios
npm run test:grupos # rateio e acerto de grupo
npm run test:card-invoice # fatura de cartão
npm run test:dinheiro # máscara de valor (R$ 1.000,00 -> 1000)
npm run test:contas # o corte entre Contas e Cartões
# ...~50 suítes no total; veja os scripts `test:*` do package.json
E as regras que moram no banco — RLS, triggers, invariantes de dinheiro — rodam
em Postgres de verdade, em database/tests/, dentro do workflow db-verify.
npm run type-check # tsc --noEmit
npm run lint # hoje 142 warnings, nenhum erro
Onze workflows no GitHub Actions. O primeiro nasceu com a HMO-119:
| workflow | prova |
|---|---|
build | next build, tsc --noEmit e o build da imagem Docker |
db-verify | o schema sobe do zero e a RLS isola um usuário do outro |
code-schema-drift | todo .from("tabela") do código existe no schema |
color-tokens | nenhuma cor fixa fora dos tokens, contraste AA nos dois temas |
pwa-assets | todo asset declarado existe e é o que diz ser |
lancamento, contas, dinheiro, configuracoes, menu-mobile | as regras e a árvore de cada tela |
env-preview | o preview da Vercel não escreve no banco de produção |
Quase todos rodam sem filtro de paths, de propósito: o db-verify é
filtrado e foi assim que três suítes deste repositório ficaram paradas em verde.
Vários deles carregam controle negativo — um passo que planta o defeito e exige que a verificação reprove. Verificação que nunca viu vermelho não é verificação.
Vercel, a partir da main. Duas coisas que este projeto aprendeu doendo:
.env.production local não chega ao build de lá.Os crons (/api/cron/*) rodam pelo Vercel Cron, autenticados por CRON_SECRET.
No plano Hobby o horário tem tolerância de ±59 min, então a ordem entre dois
jobs do mesmo dia não é garantida.
docker build -t pulodogato .
docker run -p 3000:3000 pulodogato
A imagem é multi-stage e o estágio final copia .next/standalone, que só existe
porque next.config.js tem output: "standalone". O job docker do CI existe
para pegar justamente isso: tirar essa chave não quebra next build nem o tsc,
só o COPY da imagem.
docs/ tem a PRD, a especificação da API, as decisões de arquitetura e os guias
de cada área (offline, PWA, grupos, contas previstas, deploy). O guia de
governança da PRD (docs/PRD-Governance.md) descreve como mudá-la.
Um aviso sobre
docs/: documento que se declara FINAL costuma ser o menos confiável da pasta. Este repositório já teve umSTATUS_FINALanunciando pronto uma pendência que o guia ao lado listava como aberta.