Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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/*.