Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Planejamento e controle financeiro do casal Rodolfo e Thainy, incluindo o perfil PJ RLiima. Substitui a planilha anual de abas mensais. A palavra-chave do produto é previsibilidade. O que rodar no dia a dia O .env.local fica fora do git. Copie o .env.example e preencha com a URL e a anon key do projeto. Nunca coloque a service_role no frontend: ela só vale em Edge Functions e scripts.README 전문 보기 ↗
Planejamento e controle financeiro do casal Rodolfo e Thainy, incluindo o perfil PJ RLiima. Substitui a planilha anual de abas mensais. A palavra-chave do produto é previsibilidade.
pnpm install # primeira vez, ou depois de trocar de branch com dependência nova
pnpm dev # http://localhost:5173
pnpm validar # lint, testes e build. Rodar antes de qualquer commit importante
Outros comandos:
| Comando | O que faz |
|---|---|
pnpm test | Testes de unidade dos formatadores, máscaras, formas e erros |
pnpm test:watch | O mesmo, reagindo a cada salvamento |
pnpm lint | ESLint, sem any e exigindo import type |
pnpm build | Checagem de tipos mais o build de produção com o service worker |
pnpm preview | Serve o build pronto, com PWA ligado, em http://localhost:4173 |
pnpm icones | Regera os PNGs do app a partir da marca |
pnpm types:supabase | Regera src/types/database.ts do schema (precisa da CLI do Supabase) |
O .env.local fica fora do git. Copie o .env.example e preencha com a URL e a anon key do
projeto. Nunca coloque a service_role no frontend: ela só vale em Edge Functions e scripts.
src/
├── app/ rotas, shell, guarda de login, cliente de dados, persistência offline
├── features/ uma pasta por módulo: dashboard, lancamentos, carteira, investimentos,
│ categorias, agenda, perfil, auth, catalogo
├── hooks/ todo acesso a dados vive aqui, sempre via TanStack Query
├── ui/ componentes reutilizáveis do design system
├── lib/ formatadores, máscaras, marcas, formas de pagamento, erros, confete
├── store/ zustand: tema, filtros, toasts, sheets
├── styles/ tokens.css e prototipo.css (cópia fiel do v40), correcoes.css, login.css, pwa.css
└── types/ database.ts, gerado do schema
supabase/
├── migrations/ o schema inteiro, em ordem. Nunca alterar nada pelo painel
├── testes/ fluxos críticos e RLS, em SQL
└── seed.sql o casal e as dez categorias padrão
scripts/ gerador dos ícones do PWA
docs/ documento mestre, especificação técnica, PROGRESSO e o protótipo v40
Regra que não se quebra: nenhum componente fala com o Supabase direto. Tudo passa por um
hook em src/hooks/. Assim o cache, a invalidação e o tratamento de erro ficam num lugar só.
Detalhes em supabase/README.md. O resumo:
supabase/migrations, aplicada pelo MCP do Supabase.casal_id. A função que resolve o casal mora no schema private,
fora do alcance da API REST.Depois de cada migration, regerar os tipos e rodar pnpm build.
| Onde | O que cobre | Como rodar |
|---|---|---|
src/lib/*.test.ts | Moeda em BRL, data em DD/MM/AAAA, hora em 24h, máscaras, formas de pagamento e tradução de erro | pnpm test |
supabase/testes/fluxos_criticos.sql | Baixa com timestamp, fatura zerando e restaurando o limite, parcelas com o dia do cartão cruzando o ano, ajuste com motivo obrigatório, aporte somando e subtraindo, integridade de investimento | SQL Editor do painel, com papel de serviço |
supabase/testes/rls_e_restricoes.sql | Isolamento entre casais nos quatro verbos e as restrições de schema | SQL Editor do painel, com papel de serviço |
Os dois scripts SQL limpam tudo o que criam. Se algum passo falhar, a exceção sobe com a palavra FALHOU e nada fica gravado pela metade.
O Supabase no plano gratuito guarda backup automático diário, com retenção curta. Para o histórico financeiro de vocês isso não basta sozinho. O que fazer:
Uma vez por mês, depois de aprovar o balanço:
Exportação manual dos dados, quando quiser um CSV legível:
No SQL Editor, rode e baixe o resultado de cada um:
select * from v_lancamentos order by data_vencimento;
select l.descricao, p.data_pagamento, p.hora_pagamento, p.valor_pago
from pagamentos p join lancamentos l on l.id = p.lancamento_id
order by p.data_pagamento;
select * from carteiras order by tipo, nome;
select * from investimentos order by sub, nome;
select * from ajustes order by criado_em;
Restaurar: Database > Backups > Restore, no próprio painel. Depois de qualquer restauração, confira que os dois agendamentos do pg_cron continuam ativos:
select jobname, schedule, active from cron.job;
O que não é backup: o cache offline no aparelho. Ele existe para o app abrir sem rede, tem teto de um dia e some quando alguém sai da conta.
O deploy é na Vercel, ligado ao repositório: todo push na main publica. As três variáveis de
ambiente precisam estar cadastradas nos três ambientes (Production, Preview e Development):
VITE_SUPABASE_URL
VITE_SUPABASE_ANON_KEY
VITE_APP_NOME
O vercel.json já traz as reescritas da SPA e o cabeçalho de cache certo para o sw.js, que
não pode ser cacheado, senão a atualização do app nunca chega.
O cadastro é fechado por convite: a tabela convites guarda os e-mails liberados e um gatilho
recusa qualquer outro, mesmo por chamada direta à API. Cada convite vale uma vez.
Para liberar mais alguém depois:
insert into convites (email, casal_id, nome)
values ('[email protected]', '00000000-0000-4000-8000-000000000001', 'Nome');
type="date".numeric(12,2) no banco, jamais float.docs/ESTLIM_v40.html é a especificação visual. Divergências ficam isoladas em
src/styles/correcoes.css, cada uma com o motivo escrito.