EN
Mobile

Minhas Listas

Lista de compras offline-first em Flutter + Drift: sem conta, sem nuvem e com os dados 100% no aparelho.

Período2026
PapelDesenvolvimento individual
Tela do Minhas Listas, app de lista de compras com itens organizados por categoria

Contexto

Começou como exercício de arquitetura local-first: um app que resolvesse a lista de compras sem conta e sem servidor. Virou um produto único e multiplataforma (Android, iOS, Web e desktop), com documentação de produto, design system, testes e CI. O app está completo, mas ainda não foi publicado nas lojas.

O desafio

Manter o mesmo modelo de dados e a mesma experiência em quatro plataformas, com o banco local como única fonte da verdade — incluindo migrações, backup fiel, categorização automática sem serviço externo e privacidade por padrão. No navegador, isso significa rodar SQLite via WASM e persistir sem backend.

Papel e responsabilidades

  • Arquitetura offline-first com Drift/SQLite como fonte da verdade; escrita sempre local e IDs UUID gerados no cliente
  • Modelo de domínio com quantidades fracionárias, enum fechado de unidades, categorias e ordenação personalizável
  • Categorização local em camadas (memória por nome → dicionário estático → 'outros'), sem chamadas de rede
  • Importação por texto com parser determinístico e pré-visualização editável; adição por voz com o reconhecedor do sistema
  • Histórico de compras com snapshot por ida, estatísticas de gasto e comparação de preços por mercado
  • O mesmo banco em Android, iOS, desktop e Web (WASM com OPFS/IndexedDB), além de backup e restauração em JSON

Stack e arquitetura

Flutter 3.44 + Dart 3.12 no app; Drift 2.34 sobre SQLite no armazenamento local (WASM no navegador); Material 3; speech_to_text, share_plus e qr_flutter nos recursos de voz e compartilhamento; GitHub Actions para CI.

FlutterDartDrift + SQLiteMaterial 3GitHub Actions

Destaques

  • Privacidade radical: sem conta, analytics, anúncios ou chamadas de rede — os dados não saem do aparelho
  • Um único modelo de dados rodando em mobile, desktop e navegador, com o mesmo Drift e fallback de persistência
  • Categorização e importação resolvidas localmente, sem IA ou serviço externo
  • Produto tratado como produto: design system, onboarding com tour, alvos de 48dp, contraste AA e documentação normativa

Aprendizados

Local-first simplifica a infraestrutura — não há backend para operar — mas desloca a complexidade para migrações, backup e experiência de recuperação. Aprendi que privacidade por padrão é uma decisão de arquitetura, não uma tela de configurações.