尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 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).查看完整 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/*.