Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Dashboard React para controle de apostas esportivas: cole o print do bilhete e a IA preenche o formulário. TanStack Query, Tailwind e layout mobile de verdade.
翻訳待ち
Loading the full README. The saved excerpt is shown below.
Dashboard em React pra controlar apostas esportivas. Você registra colando o print do bilhete, deixa o bot do Telegram registrar sozinho, ou digita na mão quando quiser — e depois concilia saldo por casa e olha ROI e taxa de acerto de verdade. Backend companheiro: stsbackend. Aposta que entra pelo Telegram e aposta digitada aqui caem no mesmo lugar. O dashboard só lê e edita o que a API tem — ele não é dono de nada. Essa é a parte que eu queria mostrar. O atrito de um controle de apostas é a digitação, então o modal de "Nova aposta" aceita uma imagem e se preenche.Read the full README ↗
Dashboard em React pra controlar apostas esportivas. Você registra colando o print do bilhete, deixa o bot do Telegram registrar sozinho, ou digita na mão quando quiser — e depois concilia saldo por casa e olha ROI e taxa de acerto de verdade.
Backend companheiro: stsbackend.
graph LR
U["Você"] --> UI["sts (este app)"]
TG["Canal de tips"] --> BOT["Bot do Telegram<br/>(stsbackend)"]
UI -->|"REST + JWT"| API["API stsbackend"]
BOT --> API
API --> DB[("PostgreSQL")]
Aposta que entra pelo Telegram e aposta digitada aqui caem no mesmo lugar. O dashboard só lê e edita o que a API tem — ele não é dono de nada.
Essa é a parte que eu queria mostrar. O atrito de um controle de apostas é a digitação, então o modal de "Nova aposta" aceita uma imagem e se preenche.
Tem três formas de entrar, e todas caem no mesmo fluxo: Ctrl+V em qualquer lugar — inclusive na lista de apostas, que abre o modal já lendo —, arrastar e soltar, ou o input de arquivo, que no celular já abre galeria e câmera direto.
No celular a faixa vira dois botões, Galeria e Câmera:
O que fez a diferença não foi chamar a API. Foi o resto.
A imagem não sobe crua. Print de celular é um PNG de 3 MB de cor quase toda chapada. Antes de subir, ele é reduzido pra 1600px no lado maior e reconvertido pra WebP, com JPEG de fallback em Safari antigo. Sai algumas centenas de KB, sem perder nada da legibilidade do texto do bilhete. Se qualquer etapa falhar — canvas bloqueado, formato estranho —, devolve o arquivo original: melhor mandar pesado do que não mandar.
A IA propõe, você dispõe. Nada é salvo automático, nunca. Campo preenchido pelo modelo ganha o selo IA; campo que o backend marcou como baixa confiança fica âmbar pedindo conferência. E no instante em que você digita por cima, o selo some — dali pra frente aquele valor é seu, não do modelo, e a tela para de dizer o contrário.
O sinal humano mais recente ganha. Pra descobrir a casa existe uma precedência estrita: a legenda que você digita (do mesmo jeito que legenda a foto no Telegram) vence o select, que vence a logo lida do print. Qualquer coisa que você afirmou explicitamente passa na frente de qualquer coisa inferida.
Vínculo com tip pendente. Se o bilhete bate com uma tip que já tinha chegado, o backend devolve as candidatas ranqueadas e o modal oferece vincular, com a melhor já marcada e "não vincular" sempre a um clique. O botão muda pra "Registrar e vincular", pra ação nunca ser ambígua.
E alguns detalhes que só aparecem usando: trocar o print no meio de uma leitura descarta a resposta em voo, senão uma leitura lenta sobrescreve a rápida que veio depois. "Trocar" e "Remover" limpam o formulário inteiro e não só a miniatura — deixar odd e stake do bilhete anterior na tela enquanto a nova leitura roda é exatamente como se registra a aposta errada. E os object URLs são revogados no unmount e na troca.
Dashboard. Gráfico de lucro diário, semanal ou mensal, cards de métrica no topo, apostas recentes e presets rápidos de período (mês atual, 60 e 90 dias, tudo).
Apostas. Lista paginada com filtro por status, casa, período e busca livre. A liquidação é inline: Ganha, Perdida, Meio Ganha, Meio Perdida, Cashout — que pergunta o valor recebido — ou Cancelada. Tem seleção múltipla pra resolver várias de uma vez, e agrupamento por evento.
Nova aposta. O modal descrito acima, com entrada manual sempre disponível em paralelo.
Casas. Saldo por casa, reconciliado a partir de depósitos, saques e resultados. Junto vem o comparador, que ranqueia por ROI, lucro ou taxa de acerto num período, com pódio e insights gerados — concentração de lucro, casa performando abaixo da média mas carregando stake acima dela.
Tips. A fila espelhada do canal, em três abas: pendentes, planilhadas e caíram, com busca, filtro por casa e o horário do jogo em cada tip. Dá pra planilhar direto daqui, em lote ou uma a uma, ou marcar que caiu e desfazer. A tip some da lista no clique e volta sozinha se a gravação falhar. A fila e o número no menu se atualizam sozinhos (a cada minuto, só com a aba visível), porque tip chega do canal sem o usuário fazer nada.
Conferência. O placar dos jogos chega por um job no backend, e a API propõe o resultado de cada aposta pendente. Aqui você confere e confirma, uma a uma ou em lote, ou descarta a proposta. Nada é liquidado sem esse clique. O que o motor não soube resolver vai pra uma lista à parte, com o motivo. O menu mostra quantas propostas e quantas apostas atrasadas esperam, e esses números se atualizam sozinhos a cada 2 minutos.
Perfil. Virou uma área com sub-rotas próprias (no desktop, a tela de Configurações, com abas Perfil e Dashboard):
O tema claro ou escuro se escolhe na própria tela de Perfil.
Acesso. Quando o acesso vence, a API responde 402 e o app leva pra tela de renovação, com o PIX copia-e-cola e o botão "Já paguei". Faltando poucos dias, um aviso no topo oferece o mesmo PIX sem sair do app. Esqueceu a senha: o código chega pelo bot do Telegram.
This is the beginning of the README. Read the rest at the original. Read the full README ↗