Projects

Personal project · Sep 2026

Mindful App

An Android app that makes me say why before I open a distracting app.

Illustration of the Mindful App's two guard screens: "Why would you open this app?" and "Are you sure?"
Illustration of the two guard screens.
Role
Solo: design, app, backend, deploy
Period
Sep 2026
Stack
Kotlin · Jetpack Compose · Go · Docker
Status
Running on my phone, syncing to my own server

Why I built it

I open apps on autopilot. I wanted a small pause that asks me why before they open.

How it works

  1. It asks why

    When I open a guarded app, a screen asks "Why would you open this app?" and won't continue until I type a reason.

  2. It gives me a way out

    Then "Are you sure?": a large "I'll do it later" button, or a small "Open anyway" that lets me in for a few minutes.

  3. It keeps a record

    Every attempt is saved on the phone first and synced to my server in the background, so I can look back at my reasons.

What I built

Android app

Kotlin and Jetpack Compose. An accessibility service notices when a guarded app comes to the front, and Room keeps the records on the phone.

Backend

A small Go API with a SQLite database and token check, built from a written API contract.

Deployment

A Docker image on my own Ubuntu server behind HTTPS, with backup and rollback steps written down.

Choices I made

  • Go for the backend. A small static binary and a ~15 MB image, against ~200 MB for a JVM option. Cheap to run, and no new framework to learn.
  • SQLite is enough. One file in a volume, and a backup is a file copy. That's plenty for one user, and it's one less service to secure.
  • An accessibility service. Launch events arrive instantly, so nothing has to poll in the background.
  • Phone first, sync later. Records are saved on the phone before anything is sent. Sync retries with backoff, so it works offline.

Privacy

The accessibility service only reads the name of the app that comes to the front. It does not read the screen or what I type.