About

A task app that minds its own business

TaskFlow started from a small frustration: most to-do apps want an account, a subscription and a copy of your data before they will show you a checkbox. This one asks for none of those and still does the planning work.

The idea

Fast capture, honest planning, no lock-in

There are two moments that decide whether a task app helps you. The first is the half-second after you think of something — if capture is slow or fiddly, the thought is lost. The second is the moment you sit down to work — if the list has no shape, you spend your energy deciding instead of doing.

TaskFlow is built around those two moments. Capture is one sentence with natural-language parsing. Planning is a Today view that leads with what you missed, backed by an Eisenhower matrix, a board, a calendar and a focus timer for when the list itself is the problem. Everything else — projects, labels, dependencies, habits, analytics — exists to support those two moments, not to decorate them.

And it is deliberately local. No account, no sync service, no telemetry. Your task list is a private document; TaskFlow treats it that way.

At a glance

NameTaskFlow
Version1.0.0
PlatformAndroid 8.0+ (API 26–34)
Packagecom.taskflow
PriceFree, no ads, no purchases
AccountNone
NetworkNot requested
Source size185 Kotlin files
Tests489 unit tests
Release APK2.5 MB

Design principles

Six rules the interface follows

These are not aspirations on a wall — each one is visible in the shipped screens.

Progressive disclosure

Simplicity first. Recurrence rules, dependencies, attachments and activity logs are one scroll away in the detail sheet, never in the way of the task list.

Minimal effective interface

Every element earns its place. The floating add button appears only on screens where adding a task makes sense — never on Trash, Settings or a filter editor.

Speed as a feature

Writes go to a local database, so the interface reflects your intent immediately instead of waiting on a server round-trip.

Forgiveness

Completing is reversible, deleting is undoable, and Trash holds everything for 30 days. No single tap can destroy work.

Consistency

A task behaves the same in Today, in a project, in search results and on the board. Fixing "dead" affordances — checkboxes that did nothing — was a requirement, not a nicety.

Accessibility is not optional

Contrast, touch-target size, screen-reader labels and reduced motion were built in and corrected where they had been missed.

Accessibility

Specific commitments, specific fixes

TaskFlow aims at WCAG 2.1 AA for colour contrast and interaction. Here is what that means in practice, including the things that had to be repaired.

What is implemented

  • Task rows expose a single, merged screen-reader announcement instead of fragmented text.
  • Due dates are spoken as "today", "tomorrow" or "Sep 16" rather than an ISO timestamp.
  • Chips, heatmaps, charts and the Pomodoro ring all carry descriptions.
  • Interactive targets meet or exceed 44 dp, including accent swatches and task-move buttons.
  • Foreground colours are chosen from the accent's relative luminance, so check marks stay legible on light accents.
  • Light and dark themes had their text colours contrast-corrected.
  • Font scale from 80% to 140%, plus an animations switch that forces reduced motion.
  • Today's section headers are live regions, so changing counts are announced.
  • Onboarding supports system back and has a visible previous-step control.

Where it falls short

  • The app has not been through an independent third-party accessibility audit.
  • Some board and matrix movements are only available through a menu, with no drag gesture alternative for switch-access users.
  • Instrumented UI tests are compiled in CI but are not executed there, because the build environment has no emulator.

If any part of the app is unusable with your setup, please report it as a bug: hello@taskflow.app. Include your Android version, the screen, and what your screen reader announced.

Engineering

What it is built with

A conventional, current Android stack — no exotic dependencies and nothing that phones home.

Kotlin & Jetpack Compose

The entire UI is Compose with Material 3 on a custom design-token layer, so light/dark, accent colours and type scale are one theme object.

Room + FTS4

A versioned local database with fifteen tables and a real migration, plus an external-content full-text index over task titles and descriptions.

WorkManager & AlarmManager

Scheduled work handles the daily rollup, the weekly review, trash cleanup and reminder re-arming; exact alarms fire individual reminders.

RFC 5545 recurrence

Repeat rules are real iCalendar RRULEs handled by a dedicated recurrence library, not a hand-rolled approximation — with correct count exhaustion.

Hilt & DataStore

Dependency injection throughout, and nineteen user preferences persisted on-device. No dependency reaches out to the network.

Tested in CI

489 unit tests across 31 test classes, Android lint gated by a checked-in baseline, and both debug and release APKs built on every push.

Credits & contact

Who to talk to

TaskFlow is an independent project. Bug reports, accessibility problems and feature arguments are all welcome — the last category especially if you can describe the moment in your day that the app gets wrong.

Product and interface design follow the TaskFlow specification. Visual design, iconography and this website use the app's own colour, radius and type tokens.

Third-party components

TaskFlow is built on open-source Android and Kotlin libraries, including AndroidX, Jetpack Compose and Material 3, Hilt, Room, WorkManager, DataStore, Coil, kotlinx-serialization and a recurrence library implementing RFC 5545. All are used under their respective open-source licences.

Design tokensShared between app and site
Site stackStatic HTML, CSS, plain JS — no trackers
AnalyticsNone
CookiesNone (theme choice stays in local storage)

Read the whole privacy story

Two pages, plain language, no dark patterns — because there is no data to be clever about.