<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://agenda.omeu.space/feed.xml" rel="self" type="application/atom+xml" /><link href="https://agenda.omeu.space/" rel="alternate" type="text/html" /><updated>2026-04-19T16:30:18+00:00</updated><id>https://agenda.omeu.space/feed.xml</id><title type="html">AGENDA</title><subtitle>Private mobile app for task management and personal finances. 100% offline.</subtitle><author><name>lizzyman04</name><email>admin+agenda@omeu.space</email></author><entry xml:lang="en"><title type="html">Why Privacy-First Matters for Productivity Apps</title><link href="https://agenda.omeu.space/blog/2025/04/20/privacy-first/" rel="alternate" type="text/html" title="Why Privacy-First Matters for Productivity Apps" /><published>2025-04-20T13:00:00+00:00</published><updated>2025-04-20T13:00:00+00:00</updated><id>https://agenda.omeu.space/blog/2025/04/20/privacy-first-en</id><content type="html" xml:base="https://agenda.omeu.space/blog/2025/04/20/privacy-first/"><![CDATA[<p>When you write down a task in a productivity app, what happens to that information?</p>

<p>In most cases: it goes to a server. It gets analyzed for personalization. It feeds behavioral models. It can be sold, breached, discontinued. And when the service shuts down — because services shut down — your data disappears with it.</p>

<p>AGENDA starts from a different premise: <strong>your data is yours, and it should never leave your device.</strong></p>

<h2 id="the-problem-with-modern-productivity-apps">The Problem with Modern Productivity Apps</h2>

<p>Popular productivity apps have a business model that depends on your data or your monthly subscription. This creates incentives that aren’t aligned with the user:</p>

<ul>
  <li><strong>Mandatory sync</strong>: your data lives on third-party servers because that’s what enables the model</li>
  <li><strong>Behavioral analytics</strong>: how you use the app becomes the product</li>
  <li><strong>Lock-in</strong>: leaving is hard because your data is trapped in their ecosystem</li>
  <li><strong>Discontinuation risk</strong>: if the company shuts down or pivots, you lose everything</li>
</ul>

<p>This isn’t conspiracy thinking. It’s simply the business model that has come to dominate the market.</p>

<h2 id="what-privacy-first-means-in-practice">What “Privacy-First” Means in Practice</h2>

<p>In AGENDA, privacy is not a feature. It’s an architectural constraint.</p>

<blockquote>
  <p>If a design decision violates privacy, that decision is wrong — regardless of other benefits.</p>
</blockquote>

<p>This has concrete consequences:</p>

<h3 id="1-no-analytics">1. No analytics</h3>

<p>No calls to Amplitude, Mixpanel, Firebase Analytics, or any similar service. We know zero about how you use the app. This is intentional.</p>

<h3 id="2-no-external-crash-reporting">2. No external crash reporting</h3>

<p>No Sentry, no Crashlytics. If the app crashes, the log stays on the device. You can send it to us if you want, but we don’t send it automatically.</p>

<h3 id="3-100-local-database">3. 100% local database</h3>

<p>We use <a href="https://pub.dev/packages/isar_community">Isar Community</a> — a native database that stores everything on the device, with Dart queries and excellent performance. No data leaves the device.</p>

<h3 id="4-100-offline-functionality">4. 100% offline functionality</h3>

<p>AGENDA doesn’t have an “offline mode” — it is offline by default. There is no sync code. There is no conditional logic based on connectivity. The app works on a plane, in a bunker, anywhere.</p>

<h3 id="5-open-source">5. Open source</h3>

<p>The code is at <a href="https://github.com/lizzyman04/agenda">github.com/lizzyman04/agenda</a>. Anyone can audit it, verify the claims above, and contribute.</p>

<h2 id="the-honest-tradeoff">The Honest Tradeoff</h2>

<p>Local privacy has a real cost: <strong>no automatic cloud backup</strong>.</p>

<p>If you lose your device without having done a manual backup (via CSV/JSON export), your data is not recoverable. We don’t have a copy.</p>

<p>This isn’t carelessness — it’s a direct consequence of the model. We’d like to have a secure automatic backup in the future, but we won’t do it in a way that compromises the privacy promise.</p>

<p>For now: <strong>use the export regularly</strong>. Your tasks and finances deserve a local backup.</p>

<h2 id="why-this-matters-beyond-convenience">Why This Matters Beyond Convenience</h2>

<p>Personal productivity involves sensitive information. Your tasks reveal your projects, your concerns, your plans. Your finances reveal your habits, your debts, your goals.</p>

<p>This kind of data shouldn’t exist on third-party servers — not because the services are malicious, but because data concentration creates risk. All it takes is one breach, one acquisition, one policy change.</p>

<p>AGENDA is a bet: that there’s a segment of users who prefer real control over sync convenience. That “your data, yours alone” is a value proposition strong enough to build something on.</p>

<p>We believe it is.</p>

<hr />

<p><em>AGENDA is in active development. Follow the progress on <a href="https://github.com/lizzyman04/agenda">GitHub</a>.</em></p>]]></content><author><name>lizzyman04</name><email>admin+agenda@omeu.space</email></author><category term="privacy" /><category term="philosophy" /><category term="architecture" /><category term="offline" /><summary type="html"><![CDATA[In a world where productivity apps are data collection vectors, AGENDA takes a different path: your data never leaves the device.]]></summary></entry><entry xml:lang="pt"><title type="html">Por que Privacidade em Primeiro Lugar Importa para Apps de Produtividade</title><link href="https://agenda.omeu.space/blog/2025/04/20/privacidade-em-primeiro-lugar/" rel="alternate" type="text/html" title="Por que Privacidade em Primeiro Lugar Importa para Apps de Produtividade" /><published>2025-04-20T13:00:00+00:00</published><updated>2025-04-20T13:00:00+00:00</updated><id>https://agenda.omeu.space/blog/2025/04/20/privacy-first</id><content type="html" xml:base="https://agenda.omeu.space/blog/2025/04/20/privacidade-em-primeiro-lugar/"><![CDATA[<p>Quando você anota uma tarefa em um app de produtividade, o que acontece com essa informação?</p>

<p>Na maioria dos casos: ela vai para um servidor. É analisada para personalização. Entra em modelos de comportamento. Pode ser vendida, hackeada, descontinuada. E quando o serviço fechar — porque serviços fecham — seus dados somem com ele.</p>

<p>O AGENDA parte de uma premissa diferente: <strong>seus dados são seus, e nunca deveriam sair do seu dispositivo.</strong></p>

<h2 id="o-problema-com-apps-de-produtividade-modernos">O Problema com Apps de Produtividade Modernos</h2>

<p>Apps populares de produtividade têm um modelo de negócio que depende dos seus dados ou da sua assinatura mensal. Isso cria incentivos que não estão alinhados com o usuário:</p>

<ul>
  <li><strong>Sync obrigatório</strong>: seus dados ficam em servidores de terceiros porque é o que viabiliza o modelo</li>
  <li><strong>Analytics comportamentais</strong>: como você usa o app vira produto</li>
  <li><strong>Lock-in</strong>: sair é difícil porque seus dados estão presos no ecossistema deles</li>
  <li><strong>Risco de descontinuação</strong>: se a empresa fechar ou mudar de direção, você perde tudo</li>
</ul>

<p>Não estamos falando de conspirações. É simplesmente o modelo de negócio que dominou o mercado.</p>

<h2 id="o-que-privacidade-em-primeiro-lugar-significa-na-prática">O que “Privacidade em Primeiro Lugar” significa na prática</h2>

<p>No AGENDA, privacidade não é uma feature. É uma restrição de arquitetura.</p>

<blockquote>
  <p>Se uma decisão de design viola a privacidade, essa decisão está errada — independente de outros benefícios.</p>
</blockquote>

<p>Isso tem consequências concretas:</p>

<h3 id="1-sem-analytics">1. Sem analytics</h3>

<p>Nenhuma chamada para Amplitude, Mixpanel, Firebase Analytics ou qualquer serviço similar. Sabemos zero sobre como você usa o app. Isso é intencional.</p>

<h3 id="2-sem-crash-reporting-externo">2. Sem crash reporting externo</h3>

<p>Sem Sentry, sem Crashlytics. Se o app crashar, o log fica no dispositivo. Você pode nos enviar se quiser, mas não mandamos automaticamente.</p>

<h3 id="3-banco-de-dados-100-local">3. Banco de dados 100% local</h3>

<p>Usamos <a href="https://pub.dev/packages/isar_community">Isar Community</a> — um banco de dados nativo que armazena tudo no dispositivo, com queries em Dart e performance excelente. Nenhum dado sai do aparelho.</p>

<h3 id="4-funcionalidade-100-offline">4. Funcionalidade 100% offline</h3>

<p>O AGENDA não tem modo “offline” — ele é offline por padrão. Não existe código de sincronização. Não existe lógica condicional baseada em conectividade. O app funciona em um avião, em um bunker, em qualquer lugar.</p>

<h3 id="5-código-aberto">5. Código aberto</h3>

<p>O código está em <a href="https://github.com/lizzyman04/agenda">github.com/lizzyman04/agenda</a>. Qualquer pessoa pode auditar, verificar as afirmações acima e contribuir.</p>

<h2 id="o-tradeoff-honesto">O Tradeoff Honesto</h2>

<p>Privacidade local tem um custo real: <strong>sem backup automático na nuvem</strong>.</p>

<p>Se você perder o dispositivo sem ter feito backup manual (via exportação CSV/JSON), seus dados não são recuperáveis. Não temos cópia.</p>

<p>Isso não é descuido — é uma consequência direta do modelo. Preferiríamos ter um backup automático seguro no futuro, mas não faremos isso de forma que comprometa a promessa de privacidade.</p>

<p>Por enquanto: <strong>use a exportação regularmente</strong>. Suas tarefas e finanças merecem um backup local.</p>

<h2 id="por-que-isso-importa-além-da-conveniência">Por que isso importa além da conveniência</h2>

<p>Produtividade pessoal envolve informações sensíveis. Suas tarefas revelam seus projetos, suas preocupações, seus planos. Suas finanças revelam seus hábitos, suas dívidas, suas metas.</p>

<p>Esse tipo de dado não deveria existir em servidores de terceiros — não porque os serviços sejam maliciosos, mas porque concentração de dados cria risco. Basta um vazamento, uma aquisição, uma mudança de política.</p>

<p>O AGENDA é uma aposta: que existe um segmento de usuários que prefere controle real sobre conveniência de sync. Que “seus dados, só seus” é uma proposta de valor suficientemente forte para construir algo em cima.</p>

<p>Acreditamos que sim.</p>

<hr />

<p><em>O AGENDA está em desenvolvimento ativo. Acompanhe o progresso no <a href="https://github.com/lizzyman04/agenda">GitHub</a>.</em></p>]]></content><author><name>lizzyman04</name><email>admin+agenda@omeu.space</email></author><category term="privacidade" /><category term="filosofia" /><category term="arquitetura" /><category term="offline" /><summary type="html"><![CDATA[Em um mundo onde apps de produtividade são vetores de coleta de dados, o AGENDA escolhe um caminho diferente: seus dados nunca saem do dispositivo.]]></summary></entry><entry xml:lang="en"><title type="html">Phase 2 Complete: Task Management is Here</title><link href="https://agenda.omeu.space/blog/2025/04/15/phase-2-complete/" rel="alternate" type="text/html" title="Phase 2 Complete: Task Management is Here" /><published>2025-04-15T15:00:00+00:00</published><updated>2025-04-15T15:00:00+00:00</updated><id>https://agenda.omeu.space/blog/2025/04/15/phase-2-complete-en</id><content type="html" xml:base="https://agenda.omeu.space/blog/2025/04/15/phase-2-complete/"><![CDATA[<p>After weeks of intense development, <strong>AGENDA Phase 2</strong> is officially complete.</p>

<p>138 tests passing. Zero regressions. The task module is functional end to end.</p>

<h2 id="what-was-built">What Was Built</h2>

<p>Phase 2 covers the entire task management core — from the domain layer to the user interface, through the BLoC, Isar repositories, and three integrated productivity frameworks.</p>

<h3 id="productivity-frameworks">Productivity Frameworks</h3>

<p><strong>Eisenhower Matrix</strong> — A 2×2 grid that classifies tasks by urgency and importance. Do immediately what is urgent and important. Plan what is important but not urgent. Delegate the urgent but unimportant. Eliminate the rest.</p>

<p><strong>1-3-5 Rule</strong> — Each day starts with a clear intention: 1 big task, 3 medium, 5 small. AGENDA enforces this constraint automatically, preventing the infinite list that never ends.</p>

<p><strong>GTD (Getting Things Done)</strong> — Capture, process, organize by context, and weekly review. Nothing falls through the cracks.</p>

<h3 id="project-management">Project Management</h3>

<ul>
  <li>Projects with subtasks and rolled-up progress</li>
  <li>Recurring tasks with auto-regeneration (daily, weekly, monthly)</li>
  <li>Real-time keyword search</li>
  <li>Advanced filters: status, priority, framework, date</li>
</ul>

<h3 id="interface">Interface</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">TaskListScreen</code> with tabs per framework</li>
  <li><code class="language-plaintext highlighter-rouge">TaskFormScreen</code> with 14 fields and real-time validation</li>
  <li><code class="language-plaintext highlighter-rouge">EisenhowerScreen</code> — 2×2 grid with quadrant drag-and-drop</li>
  <li><code class="language-plaintext highlighter-rouge">DayPlannerScreen</code> — 1-3-5 Rule view with visual slots</li>
  <li><code class="language-plaintext highlighter-rouge">GtdFilterScreen</code> — filter by GTD context</li>
</ul>

<h2 id="technical-decisions">Technical Decisions</h2>

<h3 id="bloc-as-the-single-source-of-truth">BLoC as the single source of truth</h3>

<p>Every task operation — create, update, complete, delete, filter — goes through <code class="language-plaintext highlighter-rouge">TaskListCubit</code>. The UI never accesses the repository directly. This makes state predictable and testable.</p>

<div class="language-dart highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// All operations go through the cubit</span>
<span class="k">await</span> <span class="n">cubit</span><span class="o">.</span><span class="na">createTask</span><span class="p">(</span><span class="n">params</span><span class="p">);</span>
<span class="k">await</span> <span class="n">cubit</span><span class="o">.</span><span class="na">toggleComplete</span><span class="p">(</span><span class="n">id</span><span class="p">);</span>
<span class="k">await</span> <span class="n">cubit</span><span class="o">.</span><span class="na">applyFilter</span><span class="p">(</span><span class="n">filter</span><span class="p">);</span>
</code></pre></div></div>

<h3 id="isar-community-as-the-database">Isar Community as the database</h3>

<p>We chose <code class="language-plaintext highlighter-rouge">isar_community</code> (the active fork of the original Isar, abandoned since 2023) for its native read performance on device and reactive API via <code class="language-plaintext highlighter-rouge">watchQuery</code>. No SQLite, no JSON files — typed queries directly in Dart.</p>

<h3 id="tests-without-database-mocks">Tests without database mocks</h3>

<p>138 tests, all against real repositories with Isar in-memory. Mocks only for external dependencies (notifications, auth). This taught us an important lesson from prior projects: database mocks hide schema and query issues that only surface in production.</p>

<h2 id="test-coverage">Test Coverage</h2>

<table>
  <thead>
    <tr>
      <th>Layer</th>
      <th>Tests</th>
      <th>Status</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Domain</td>
      <td>18</td>
      <td>Passing</td>
    </tr>
    <tr>
      <td>Data (Isar)</td>
      <td>34</td>
      <td>Passing</td>
    </tr>
    <tr>
      <td>Application</td>
      <td>52</td>
      <td>Passing</td>
    </tr>
    <tr>
      <td>Presentation</td>
      <td>34</td>
      <td>Passing</td>
    </tr>
    <tr>
      <td><strong>Total</strong></td>
      <td><strong>138</strong></td>
      <td><strong>100%</strong></td>
    </tr>
  </tbody>
</table>

<h2 id="next-steps">Next Steps</h2>

<p><strong>Phase 3 — Finance Core</strong> begins now. The goal: bring the same level of completeness to the finance module — transactions, budgets, savings goals, debts, and a dashboard with charts.</p>

<p>AGENDA is taking shape. If you want to follow along or contribute, the repository is open: <a href="https://github.com/lizzyman04/agenda">github.com/lizzyman04/agenda</a>.</p>]]></content><author><name>lizzyman04</name><email>admin+agenda@omeu.space</email></author><category term="development" /><category term="flutter" /><category term="tasks" /><category term="phase-2" /><summary type="html"><![CDATA[AGENDA Phase 2 is complete with 138 passing tests. The task module includes Eisenhower, 1-3-5, GTD, subtasks, projects, recurrence, and more.]]></summary></entry><entry xml:lang="pt"><title type="html">Fase 2 Completa: Gerenciamento de Tarefas está Aqui</title><link href="https://agenda.omeu.space/blog/2025/04/15/fase-2-completa/" rel="alternate" type="text/html" title="Fase 2 Completa: Gerenciamento de Tarefas está Aqui" /><published>2025-04-15T15:00:00+00:00</published><updated>2025-04-15T15:00:00+00:00</updated><id>https://agenda.omeu.space/blog/2025/04/15/phase-2-complete</id><content type="html" xml:base="https://agenda.omeu.space/blog/2025/04/15/fase-2-completa/"><![CDATA[<p>Depois de semanas de desenvolvimento intenso, a <strong>Fase 2 do AGENDA</strong> está oficialmente completa.</p>

<p>138 testes passando. Zero regressões. O módulo de tarefas está funcional de ponta a ponta.</p>

<h2 id="o-que-foi-construído">O que foi construído</h2>

<p>A Fase 2 cobre todo o núcleo de gerenciamento de tarefas — desde a camada de domínio até a interface de usuário, passando pelo BLoC, repositórios Isar e os três frameworks de produtividade integrados.</p>

<h3 id="frameworks-de-produtividade">Frameworks de Produtividade</h3>

<p><strong>Matriz de Eisenhower</strong> — Um grid 2×2 que classifica tarefas por urgência e importância. Faça imediatamente o que é urgente e importante. Planeje o que é importante mas não urgente. Delegue o urgente não importante. Elimine o resto.</p>

<p><strong>Regra 1-3-5</strong> — Cada dia começa com uma intenção clara: 1 tarefa grande, 3 médias, 5 pequenas. O AGENDA aplica essa restrição automaticamente, impedindo a lista infinita que nunca termina.</p>

<p><strong>GTD (Getting Things Done)</strong> — Captura, processamento, organização por contexto e revisão semanal. Nada cai nas brechas.</p>

<h3 id="gerenciamento-de-projetos">Gerenciamento de Projetos</h3>

<ul>
  <li>Projetos com subtarefas e progresso acumulado</li>
  <li>Tarefas recorrentes com reinicialização automática (diária, semanal, mensal)</li>
  <li>Busca por palavra-chave em tempo real</li>
  <li>Filtros avançados: status, prioridade, framework, data</li>
</ul>

<h3 id="interface">Interface</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">TaskListScreen</code> com tabs por framework</li>
  <li><code class="language-plaintext highlighter-rouge">TaskFormScreen</code> com 14 campos, validação em tempo real</li>
  <li><code class="language-plaintext highlighter-rouge">EisenhowerScreen</code> — grid 2×2 com drag-and-drop de quadrante</li>
  <li><code class="language-plaintext highlighter-rouge">DayPlannerScreen</code> — visão da Regra 1-3-5 com slots visuais</li>
  <li><code class="language-plaintext highlighter-rouge">GtdFilterScreen</code> — filtro por contexto GTD</li>
</ul>

<h2 id="decisões-técnicas">Decisões Técnicas</h2>

<h3 id="bloc-como-única-fonte-de-verdade">BLoC como única fonte de verdade</h3>

<p>Cada operação de tarefa — criar, atualizar, concluir, deletar, filtrar — passa pelo <code class="language-plaintext highlighter-rouge">TaskListCubit</code>. A UI nunca acessa o repositório diretamente. Isso torna o estado previsível e testável.</p>

<div class="language-dart highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Todas as operações passam pelo cubit</span>
<span class="k">await</span> <span class="n">cubit</span><span class="o">.</span><span class="na">createTask</span><span class="p">(</span><span class="n">params</span><span class="p">);</span>
<span class="k">await</span> <span class="n">cubit</span><span class="o">.</span><span class="na">toggleComplete</span><span class="p">(</span><span class="n">id</span><span class="p">);</span>
<span class="k">await</span> <span class="n">cubit</span><span class="o">.</span><span class="na">applyFilter</span><span class="p">(</span><span class="n">filter</span><span class="p">);</span>
</code></pre></div></div>

<h3 id="isar-community-como-banco-de-dados">Isar Community como banco de dados</h3>

<p>Escolhemos <code class="language-plaintext highlighter-rouge">isar_community</code> (fork ativo do Isar original, abandonado desde 2023) pela performance de leitura nativa no dispositivo e pela API reativa via <code class="language-plaintext highlighter-rouge">watchQuery</code>. Sem SQLite, sem JSON em arquivo — queries tipadas diretamente em Dart.</p>

<h3 id="testes-sem-mocks-de-banco">Testes sem mocks de banco</h3>

<p>138 testes, todos contra repositórios reais com Isar em memória. Mocks só para dependências externas (notificações, auth). Isso nos ensinou uma lição importante em projetos anteriores: mocks de banco escondem problemas de schema e query que só aparecem em produção.</p>

<h2 id="cobertura-de-testes">Cobertura de Testes</h2>

<table>
  <thead>
    <tr>
      <th>Camada</th>
      <th>Testes</th>
      <th>Status</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Domain</td>
      <td>18</td>
      <td>Passando</td>
    </tr>
    <tr>
      <td>Data (Isar)</td>
      <td>34</td>
      <td>Passando</td>
    </tr>
    <tr>
      <td>Application</td>
      <td>52</td>
      <td>Passando</td>
    </tr>
    <tr>
      <td>Presentation</td>
      <td>34</td>
      <td>Passando</td>
    </tr>
    <tr>
      <td><strong>Total</strong></td>
      <td><strong>138</strong></td>
      <td><strong>100%</strong></td>
    </tr>
  </tbody>
</table>

<h2 id="próximos-passos">Próximos Passos</h2>

<p>A <strong>Fase 3 — Finance Core</strong> começa agora. O objetivo: trazer o mesmo nível de completude para o módulo financeiro — transações, orçamentos, metas de economia, dívidas e um dashboard com gráficos.</p>

<p>O AGENDA está ganhando forma. Se você quiser acompanhar ou contribuir, o repositório é aberto: <a href="https://github.com/lizzyman04/agenda">github.com/lizzyman04/agenda</a>.</p>]]></content><author><name>lizzyman04</name><email>admin+agenda@omeu.space</email></author><category term="desenvolvimento" /><category term="flutter" /><category term="tarefas" /><category term="fase-2" /><summary type="html"><![CDATA[A Fase 2 do AGENDA está completa com 138 testes passando. O módulo de tarefas inclui Eisenhower, 1-3-5, GTD, subtarefas, projetos, recorrência e muito mais.]]></summary></entry></feed>