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.
Controle financeiro pessoal/familiar
Translation pending
FinanceTypeScript · JavaScriptGitHub @evidentestudioOnlineOwner 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
Loading the full README. The saved excerpt is shown below.
Controle financeiro pessoal/familiar. Migração web do protótipo "Controle financeiro" (Sonar 2.0), construída em etapas — ver sondar-etapas-implementacao.md. Etapa atual: 0 — Fundação. Next.js (App Router) + Postgres + Tailwind CSS. Consulte db/sondar_schema.sql para o schema completo (aplicado por inteiro desde a Etapa 0).Read the full README ↗
Controle financeiro pessoal/familiar. Migração web do protótipo "Controle
financeiro" (Sonar 2.0), construída em etapas — ver sondar-etapas-implementacao.md.
Etapa atual: 0 — Fundação.
Next.js (App Router) + Postgres + Tailwind CSS. Consulte db/sondar_schema.sql
para o schema completo (aplicado por inteiro desde a Etapa 0).
Postgres rodando localmente (ou aponte DATABASE_URL para outro banco).
Copie .env.example para .env.local e preencha:
DATABASE_URLSESSION_SECRET — gere com node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"SEED_USER1_* / SEED_USER2_* — os dois membros do household (não há
cadastro aberto; login só funciona para quem foi semeado aqui)Instale as dependências e aplique o schema:
npm install
npm run db:migrate # aplica db/000_extensions.sql, db/sondar_schema.sql, db/001_auth.sql, db/002_fix_month_totals_view.sql, em ordem
npm run db:seed # cria o household e os 2 usuários a partir do .env.local
npm run dev e abra http://localhost:3000 — deve redirecionar para
/login; entre com as credenciais semeadas.
npm run dev / npm run build / npm run startnpm run lintnpm test — vitest (conexão com o banco, existência de todas as
tabelas/views do schema, hash de senha, sessão JWT, fluxo de login)npm run db:migrate — reaplica o schema (idempotente: usa IF NOT EXISTS/
CREATE OR REPLACE em tudo)npm run db:seed — idempotente: nunca sobrescreve household ou usuário já
existentedb/sondar_schema.sql — o schema entregue, sem alterações estruturais. As
únicas 2 mudanças em relação ao arquivo original são puramente sintáticas
(Postgres exige função IMMUTABLE em coluna gerada / índice de expressão) e
estão documentadas no cabeçalho do próprio arquivo.db/000_extensions.sql — extensões (unaccent, pgcrypto) + o wrapper
immutable_unaccent() que a mudança acima usa. Roda antes do schema.db/001_auth.sql — adiciona users.password_hash, único campo que o schema
original não tinha e que o login básico da Etapa 0 precisa. Roda depois do
schema.db/002_fix_month_totals_view.sql — corrige a view month_totals: ela
fazia JOIN categories (inner), e como lançamento de crédito tem
category_id = NULL por definição do próprio schema, isso descartava todo
crédito da view em silêncio (creditos_total sempre voltava vazio). Troca
pra LEFT JOIN e agrupa por e.household_id em vez de c.household_id.Login básico para os dois membros do household — sem cadastro aberto, sem
multiusuário genérico (isso fica fora de escopo até depois da Etapa 7, ver
sondar-etapas-implementacao.md). Sessão é um JWT assinado (HS256, jose) em
cookie httpOnly; senha com bcrypt. src/proxy.ts (era middleware.ts até o
Next.js 16 renomear a convenção) protege todas as rotas exceto /login e
/api/auth/*.