Survival LLM
A free AI assistant and survival library (1.5 million offline articles) that runs on your own computer, with no internet. Shows the source of every answer. Mac and Windows.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Colinha digital para as Eleições 2026: monte a lista com os números dos seus candidatos, na ordem da urna, com dados e fotos oficiais do TSE.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A colinha digital para as Eleições 2026.
Escolha seu estado, digite os números (ou busque pelo nome) e leve para a urna uma colinha impressa, sem erro e sem o celular na cabine.
1º turno · domingo, 4 de outubro de 2026
No dia da eleição, a urna pede seis números em sequência: deputado federal, deputado estadual, dois senadores, governador e presidente. Quem esquece um número, erra um dígito ou confunde a ordem acaba votando em outra pessoa ou anulando o voto sem perceber.
O Votely resolve só isso, e faz com cuidado:
| 🗳️ 6 cargos, 1 tela | Deputado Federal (4 dígitos), Estadual/Distrital (5), Senador 1ª e 2ª vaga (3), Governador (2) e Presidente (2). |
| 📷 Foto oficial do TSE | 20.983 fotos otimizadas em WebP. Quem não tem foto ganha um avatar com as iniciais. |
| 🔎 Busca sem acento | "joao" encontra "JOÃO"; dá para buscar por sigla, nome do partido ou número. |
| ⚠️ Avisos úteis | Número não encontrado, mesmo candidato nas duas vagas de senador, candidatura sub judice ou indeferida. |
| ⬜ Voto em branco | Um toque, com a instrução de qual tecla apertar na urna. |
| 🖨️ Imprimir | A4 com duas cópias e linha de recorte ✂️. Caixas vazias para anotar à mão o que faltar. |
| Compartilha a colinha em texto, pronta para mandar para a família. | |
| 💾 Salvar neste aparelho | Baixa a colinha como imagem PNG e guarda no navegador para continuar depois. |
| 🌗 Tema claro e escuro | Segue o sistema no primeiro acesso e lembra a escolha. |
📵 O celular não pode entrar na cabine de votação. Por isso o foco do Votely é o papel: imprima ou anote.
base-nova, com Base UI como primitivos (Select, Dialog, Avatar, Button e OTPField)cmdk na busca, sonner nos avisos e lucide-react nos íconesRequisitos: Bun, além de curl e unzip no sistema (usados pelos scripts de dados).
bun install
bun run dev # http://localhost:3000
Os dados dos candidatos (public/data) já vêm prontos. As fotos precisam ser geradas uma vez:
bun run fotos # baixa, cruza e converte ~21 mil fotos (~1 min)
Build de produção:
bun run build # vite build + checagem de tipos
bun run preview
Lint e formatação com Biome:
bun run lint # biome check .
bun run format # biome check --write . (formata, organiza imports e aplica correções seguras)
Componentes novos do shadcn chegam com aspas duplas. Rode
bun run formatdepois de umshadcn add.
Tudo vem do Portal de Dados Abertos do TSE e é pré-processado em arquivos estáticos. O app não tem backend nem banco de dados: carrega só o JSON do estado escolhido e faz a busca no próprio aparelho. Por isso é rápido, funciona com internet ruim e aguenta o pico do dia da eleição servido por qualquer CDN.
consulta_cand_2026.zip ──► bun run candidatos ──► public/data/{UF}.json (27 arquivos, 2,3 MB)
fotos do TSE (28 zips) ──► bun run fotos ──► public/fotos/{sq}.webp (20.983 fotos, 160 px)
bun run candidatosLê o consulta_cand_2026_BRASIL.csv de dentro do consulta_cand_2026.zip (na raiz do projeto) e gera um JSON por UF com os cargos da urna, incluindo os presidentes.
SQ_CANDIDATO é sequencial) e descarta 117 registros antigos.#NE) para todos. O mapeamento para sub judice e indeferida já está pronto em scripts/candidatos.ts; quando a coluna for preenchida, é conferir os valores e rodar de novo.Para atualizar, baixe o consulta_cand_2026.zip mais recente em Candidatos 2026 no Portal de Dados Abertos do TSE, coloque na raiz do projeto e rode bun run candidatos.
O zip não é versionado. Além do que o app usa, ele traz CPF, título de eleitor e data de nascimento de todos os candidatos. Os JSONs gerados em
public/dataguardam só número, nome de urna, partido eSQ_CANDIDATO.
bun run fotosBaixa os pacotes foto_cand2026_{UF}_div.zip (27 UFs + BR), cruza os arquivos F{UF}{SQ_CANDIDATO}_div.jpg com o CSV e salva cada foto em WebP de 160 px em public/fotos/{sq}.webp.
.cache/fotos, e as fotos já convertidas são puladas. Use --force para refazer tudo.403 para o fetch do Node/Bun e para curl simples. Só passa com curl em HTTP/1.1 e headers de navegador, e é por isso que o script usa o curl do sistema.src/
├── routes/
│ ├── __root.tsx # documento HTML, fontes, tema sem "piscar", Toaster
│ └── index.tsx # a página: form, cards, busca, colinha
├── components/
│ ├── ui/ # shadcn/ui (Base UI); otp-field.tsx é próprio
│ └── votely/ # CardUf, CardCargo, BuscaDialog, MinhaColinha,
│ # FolhaImpressao, imagemColinha (PNG em canvas)…
├── lib/
│ ├── votely.ts # UFs, cargos na ordem da urna, tipos, consulta
│ ├── candidatos.ts # carrega /data/{UF}.json com cache
│ └── tema.ts # claro/escuro com prefers-color-scheme
└── styles.css # tokens do design (verde-petróleo + cinzas)
scripts/
├── candidatos.ts # CSV do TSE → JSON por UF
└── fotos.ts # fotos do TSE → WebP
<input> de verdade (OTPField do Base UI): aceita só números, cola de uma vez e anda sozinho para a próxima casa.prefers-reduced-motion respeitado e rótulos para leitores de tela em cada casa de dígito./live)Resultados da apuração em tempo real, com os arquivos oficiais de divulgação do TSE (docs/tse).
navegador ──(TanStack Query, 30 s)──► server functions GET (CDN: s-maxage=30)
│
▼
cache em memória + Upstash Redis (trava)
│ 1 busca por arquivo a cada 30 s
▼
resultados.tse.jus.br (EA11 + EA20)
src/lib/live/api.ts) normalizam os arquivos para um formato enxuto (src/lib/live/tipos.ts).ETag/304, recuo exponencial, pausa de 11 min se vier 403/429 e nenhuma URL montada sem confirmação no ele-c.json (404 repetidos bloqueiam o IP).Configuração central em src/config/election.ts (turno, datas, banner "A apuração começou"). O ambiente do TSE vem da variável TSE_AMBIENTE (simulado, padrão, ou oficial).
bun test # 45 testes com fixtures reais do simulado
bun run live:smoke # contra o TSE de verdade (simulado) e o Redis
bun run live:carga --url <preview-url> # teste de carga contra um deploy de preview
As versões são geradas pelo release-please a partir das mensagens de commit, no padrão Conventional Commits:
| Commit | Exemplo | Versão |
|---|---|---|
fix: | fix: corrige busca com acento | patch (1.0.1) |
feat: | feat: adiciona segundo turno | minor (1.1.0) |
feat!: ou BREAKING CHANGE: | feat!: novo formato dos dados | major (2.0.0) |
docs:, chore:, ci:, refactor:… | docs: atualiza README | não gera versão sozinho |
A cada push na main, o workflow .github/workflows/release-please.yml abre (ou atualiza) um PR de release com o CHANGELOG.md e a nova versão no package.json. Ao fazer merge desse PR, a tag vX.Y.Z e a release no GitHub são criadas.
Qualquer hospedagem que rode TanStack Start serve. Duas dicas:
bun run fotos) ou suba para um armazenamento de arquivos (R2, S3…). Verifique o limite de arquivos por deploy da sua hospedagem.O Votely é independente e apartidário. Não é um aplicativo oficial da Justiça Eleitoral. Dados: TSE, Portal de Dados Abertos. Confira sempre as informações na tela da urna antes de confirmar.