尚未偵測到更新。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/*.