<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Francisco Aleixo</title>
    <description>The latest articles on DEV Community by Francisco Aleixo (@francisco_aleixo).</description>
    <link>https://dev.to/francisco_aleixo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4160553%2F30348b51-f71a-4533-9a89-3fa641f933fc.png</url>
      <title>DEV Community: Francisco Aleixo</title>
      <link>https://dev.to/francisco_aleixo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/francisco_aleixo"/>
    <language>en</language>
    <item>
      <title>Construindo uma ferramenta cívica, open source e local-first para as Eleições 2026</title>
      <dc:creator>Francisco Aleixo</dc:creator>
      <pubDate>Sat, 03 Oct 2026 22:17:00 +0000</pubDate>
      <link>https://dev.to/francisco_aleixo/construindo-uma-ferramenta-civica-open-source-e-local-first-para-as-eleicoes-2026-kd2</link>
      <guid>https://dev.to/francisco_aleixo/construindo-uma-ferramenta-civica-open-source-e-local-first-para-as-eleicoes-2026-kd2</guid>
      <description>&lt;p&gt;Olá, comunidade dev.to! 👋&lt;/p&gt;

&lt;p&gt;Gostaria de compartilhar um projeto em que estive trabalhando: o &lt;strong&gt;SaibaTudo — Eleições 2026&lt;/strong&gt;. Trata-se de uma iniciativa cívica, independente, 100% de código aberto, sem anúncios e sem fins lucrativos, voltada a tornar o acesso a dados eleitorais públicos mais ágil, transparente e intuitivo no celular.&lt;/p&gt;

&lt;p&gt;Neste post, quero detalhar a arquitetura técnica, as escolhas de design e como resolvemos desafios de integridade de dados e privacidade local-first.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Por que criar mais um app de eleições?
&lt;/h2&gt;

&lt;p&gt;Consultar dados de candidaturas em interfaces governamentais costuma ser uma experiência pesada ou pouco amigável em telas móveis. Além disso, muitos serviços criados por terceiros acabam inserindo publicidade invasiva, rastreadores ou algoritmos de recomendação opacos.&lt;/p&gt;

&lt;p&gt;O objetivo do &lt;strong&gt;SaibaTudo&lt;/strong&gt; foi desenhar uma solução técnica guiada por 4 princípios:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Dados 100% oficiais:&lt;/strong&gt; Todo dado provém do Portal de Dados Abertos do TSE via licença CC BY. Se o dado não existe oficialmente, ele não aparece.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Neutralidade estrita:&lt;/strong&gt; O sistema não ranqueia, não recomenda e recusa pedidos de previsão de voto. Listas seguem ordem canônica oficial (cargo, UF, número).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacidade e Local-First:&lt;/strong&gt; Funciona offline, não requer login, não possui analytics comerciais e não envia dados do usuário para servidores externos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparência técnica total:&lt;/strong&gt; Todo o pipeline de dados, o aplicativo Android e o site web possuem código aberto no GitHub para qualquer pessoa auditar.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🛠️ Stack e Arquitetura
&lt;/h2&gt;

&lt;p&gt;TSE (Dados Abertos / CDN)&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
pipeline/ (Python 3.12: Fetch incremental + ETL + Validação + Assinatura ECDSA)&lt;br&gt;
│&lt;br&gt;
├──► app Android (Kotlin, Jetpack Compose, MVVM, Assets + WorkManager)&lt;br&gt;
├──► web/ (PWA em JavaScript puro, sem dependências externas)&lt;br&gt;
└──► /api/nlu (Serverless + modelo local/nuvem restrito a fatos oficiais)&lt;/p&gt;

&lt;p&gt;O projeto divide-se em três pilares principais:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Pipeline de Dados com Assinatura Criptográfica (ECDSA)
&lt;/h3&gt;

&lt;p&gt;Para manter as informações atualizadas sem precisar forçar uma nova versão do app Android a cada mudança nos registros de candidaturas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Um pipeline em Python coleta alterações de forma incremental (usando headers &lt;code&gt;ETag&lt;/code&gt; e &lt;code&gt;Last-Modified&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;O pacote gerado é validado contra schemas rígidos e assinado com &lt;strong&gt;chaves assimétricas ECDSA&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;O app Android valida o checksum e a assinatura criptográfica antes de carregar qualquer atualização dinâmica nos dados, impedindo adulterações sem ferir as políticas de &lt;em&gt;Dynamic Code Loading&lt;/em&gt; da Google Play.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Android Moderno &amp;amp; Local-First
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linguagem/UI:&lt;/strong&gt; 100% Kotlin com Jetpack Compose e arquitetura MVVM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testes:&lt;/strong&gt; 41 testes unitários cobrindo desde integridade e falhas de assinatura até 46 casos de NLU e cenários de apuração.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simulador Educativo da Urna:&lt;/strong&gt; Criado para orientar o eleitor sobre a ordem de votação de forma puramente educativa.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Assistente de NLU Determinístico
&lt;/h3&gt;

&lt;p&gt;Para responder dúvidas da população sem o risco de alucinações (comum em LLMs generativas), a IA local atua apenas identificando a &lt;strong&gt;intenção e as entidades&lt;/strong&gt; da pergunta do usuário. O fato em si é extraído deterministicamente da base validada do TSE. Se o dado não existir, a IA não "inventa".&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Links do Projeto
&lt;/h2&gt;

&lt;p&gt;Se quiser testar a ferramenta ou analisar o código-fonte:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💻 &lt;strong&gt;Repositório no GitHub:&lt;/strong&gt; &lt;a href="https://github.com/franciscoaleixoIOT/SaibaTudo-Eleicao2026" rel="noopener noreferrer"&gt;github.com/franciscoaleixoIOT/SaibaTudo-Eleicao2026&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;Web / PWA:&lt;/strong&gt; &lt;a href="https://saibatudo.net/eleicoes2026" rel="noopener noreferrer"&gt;saibatudo.net/eleicoes2026&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📄 &lt;strong&gt;Contrato de Dados &amp;amp; Privacidade:&lt;/strong&gt; Disponíveis na pasta &lt;code&gt;docs/&lt;/code&gt; do repositório.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💬 Feedback e Contribuições
&lt;/h2&gt;

&lt;p&gt;Adoraria receber o feedback de vocês sobre a arquitetura do pipeline, sugestões para a UI em Jetpack Compose ou melhorias nos testes de NLU.&lt;/p&gt;

&lt;p&gt;Issues, pull requests e contribuições no GitHub são muito bem-vindos! ⭐&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>opensource</category>
      <category>android</category>
      <category>civictech</category>
    </item>
  </channel>
</rss>
