Skip to main content
← Back to Projects
Web Development In progress Flutter app

Rhythm

Habits, focus and mood on one Today screen

A Flutter app in progress that puts habits, a Pomodoro focus timer and a mood check-in on one Today screen, so a daily routine lives in one place.

Solo build

FlutterDartRiverpodMobile appproductivity
01 / Problem

The problem

Building a routine usually means juggling separate apps: one for habits, one for a focus timer, one for reading, one for a mood journal. Each keeps its own picture of your day, and none of them shows the whole thing. I wanted a single "Today" view that holds all of it.

02 / Solution

What I built

Rhythm is a Flutter app for iOS and Android built around one Today screen. In the public repo, three parts work: you can add habits and tick them off for the day, run a 25-minute Pomodoro timer, and log your mood on a 1 to 5 slider with tags such as sleep, stress, energy, exercise, social and work. The repo also holds a requirements document and an architecture note, so the plan sits next to the code.

03 / Demo

See it running

Demo coming

A recorded walkthrough of Rhythm is on the way. Until then, the write-up and the diagram below show how it works.

04 / Architecture

How it fits together

Rhythm

One Today screen, three working features

  1. Today screenFlutter app on the phoneHabitsFocusLog mood
    user actions
  2. Riverpod stateProviders in the appHabit list notifierTimer notifier
    read and write
  3. In-memory dataOn the device, reset on restartHabit repository25-minute timer
Everything runs on the device; saving data to a backend is planned, not built.
05 / Write-up

How it works

The app starts in a Riverpod ProviderScope and opens a home screen with a bottom navigation bar. The Today tab shows the date, the habit list (with loading, empty and error states) and two quick actions: one opens the focus timer, the other opens the mood sheet. Habits come from a Riverpod AsyncNotifier backed by a repository; today that repository keeps habits in memory, so they reset when the app restarts. The timer is its own notifier that counts down 25 minutes and supports pause, resume and stop. The mood sheet confirms the entry on screen but does not store it yet.

The code is organised feature first (lib/features/<feature>/data, domain, presentation), with Freezed data classes for habits, focus sessions, mood entries and books, and code-generated providers. Theming is Material 3 with light and dark variants and the Inter font.

Stack: Flutter, Dart, Riverpod, GoRouter, Freezed, Material 3.

Status and links

Rhythm is in progress. I have newer code that is not in the public repo yet; this page describes only what you can run from the repo today. It needs no accounts or keys to run: flutter pub get, dart run build_runner build --delete-conflicting-outputs, then flutter run.

What's next, none of which is built in the public repo yet:

  • Saving habits, focus sessions and mood entries, with Supabase as the planned backend and local storage for offline use.
  • Real habit streaks instead of the placeholder.
  • A reading library that imports PDFs and EPUBs from Google Drive (the Read tab shows two sample books for now).
  • An insights view built from real data (it shows sample numbers today).
  • App store release, which needs proper app ids and a working test suite first.
Work with me

Need something like this built?

I build AI automations, agents and Salesforce solutions for teams. Tell me what you want to automate and I’ll tell you honestly whether it’s a fit.

Share
Discussion

Comments

Loading comments...

Add a comment

Comments are reviewed before they appear.