Skip to main content

CompleteStatus: Built. Completed as far as its page describes, and not being developed further now.

Every project’s status →

01.22Android app

VoxPlan

AR Labs' open-source Android app for hierarchical goal planning and time tracking, with daily time quotas and a gamified focus timer.

Source · public repositoryrichardmthompson / VoxPlanAppgithub.com (opens in a new tab)
Two operators at a control bench beneath a row of large scale dials in a wind tunnel balance room, 1950
On this page
  1. What it does
  2. What exists today
  3. How it was built
  4. Where it was meant to go

VoxPlan is AR Labs' Android app for goal planning and time tracking. It lets a person break a large goal into smaller goals and tasks, set how many minutes a day each goal deserves, and then work against those quotas with a focus timer that rewards sustained concentration. It is open source under the MIT licence. It is one of our earliest software projects, begun with the aim of a planner a person could control entirely by voice.

What it does

The app is organised around four ideas.

  • A goal tree, three levels deep. A top-level goal ("Learn guitar") holds sub-goals ("Master chord progressions"), which hold tasks ("Practise the G-C-D progression"). Breadcrumb navigation moves up and down the tree, and goals can be reordered or moved between levels. The three-level limit is deliberate; it keeps a plan small enough to hold in mind.
  • Daily quotas. Each goal can carry a daily target in minutes and a set of active days, for example 60 minutes of programming, Monday to Friday.
  • Focus mode. A timer for working on one goal, with Pomodoro-style work and rest periods. Every 30 minutes of focused work earns a medal, with a sound, and a long day earns a larger award. Earned time is banked against the goal.
  • Weekly progress. A week view shows time spent on each goal as bars against its quota, and lets the person step back through earlier weeks.
FIG. 01
flowchart LR
  G["Goal tree (3 levels)"] --> Q["Daily quotas"]
  Q --> F["Focus mode timer"]
  F --> M["Medals and time bank"]
  M --> W["Weekly progress vs quota"]
  W --> G

What exists today

Version 3.3, labelled the MVP release, was published on GitHub in December 2025 as a downloadable APK. It runs on Android 8.1 and later. The goal tree, quotas, focus mode and weekly progress are complete. Two further features are partly built and hidden in the release: a daily task list that draws on quotas, and a day scheduler with drag-to-reschedule. Their code is kept in the repository so it can be re-enabled.

The repository also carries a set of context documents written for AI pair programming: a project overview, a technical map of the codebase and a migration plan for full Material 3 theming. They exist so that a coding agent (an AI agent that writes code, such as Claude Code; an AI agent is a language model run in a loop with tools), or a new contributor, can pick up the project without reading every file first.

Separately, and not part of the public release, we are experimenting with a Model Context Protocol (MCP) server for VoxPlan. MCP is the open standard that lets an AI assistant call external tools; this server exposes the goal tree and daily tasks so that an agent can list, add, move and complete them.

How it was built

VoxPlan has been built three times. The first version was a desktop prototype in Python with the Kivy interface library: a goal tree drawn on screen, a command line and keyboard-driven navigation modelled on editors like Vim. A web version followed later as a separate experiment, TaskGlowTimer, a keyboard-driven focus timer for the browser. The Android app is the one that matured.

It is written in Kotlin with Jetpack Compose for the interface and Material 3 components. The architecture is Model-View-ViewModel (MVVM): screens observe state exposed by view models, which read and write through repositories. A few choices are worth naming:

  • Manual dependency injection. A single application container builds the database and repositories lazily. This is simpler than a framework such as Hilt, needs no reflection, and keeps every dependency visible in one file.
  • Reactive state with Kotlin Flow. View models combine database streams with navigation state into a single StateFlow that the screen renders, so the interface updates whenever the data does.
  • Room for storage. Goals, quotas, scheduled events and banked time live in a local SQLite database through Room. The database is at schema version 13, with a migration for each change so that stored data survives an upgrade.
  • ExoPlayer (Media3) plays the reward sounds.

The repository lists the app's known limits openly: colours are still partly hard-coded rather than drawn from the Material theme, so there is no dark mode yet, and there are no unit tests.

Where it was meant to go

The longer path, set out in the README, was voice-controlled goal entry and scheduling, then sync with a desktop, then a conversational assistant that helps plan the day. That direction carried into our later voice work, first in Vox Manifestor and Coherence, the voice-first Android apps that followed, and then in the browser voice agents.