I've tried a lot of habit trackers. Habitica, Streaks, a dozen apps with checkboxes and bar charts. They all work fine, technically. But none of them made me want to come back. A checkbox doesn't feel like progress. A number going from 6 to 7 doesn't feel like growth. So I started wondering: what if a habit tracker could actually show growth?

That's how Bloomkeeper was born -- a habit tracker where every habit is a plant in a garden. Water it daily (by completing the habit) and it grows from a seed to a full bloom. Miss a few days and it wilts. Your dashboard isn't a spreadsheet. It's a garden.

The Garden Metaphor

The core idea is simple. When you create a habit, you're planting a seed. Each day you complete it, the plant grows a little. There are six growth stages -- seed, sprout, stem with leaves, budding, and full bloom. A 15-day streak gives you a tall, blooming plant with leaves and a flower. A broken streak turns it brown and wilted.

It's a small thing, but seeing a garden full of thriving plants feels genuinely different from seeing a row of green checkmarks. There's something almost Tamagotchi-like about it -- you don't want to let your plants die. That guilt is a surprisingly effective motivator.

Five Ways to See Your Data

I didn't want this to be a single-view app. Different perspectives reveal different patterns, so I built five layers:

  • Garden View -- the default. Your habits as living plants, a progress ring showing today's completion percentage, and quick stats.
  • Weekly View -- a 7-day grid for every habit. Tap to toggle. Great for spotting which days you consistently skip.
  • Monthly Calendar -- pick a habit and see the whole month. Green squares for days completed. Instantly shows your consistency pattern.
  • Year Heatmap -- GitHub-style contribution graph for 365 days. Filter by individual habit or see everything aggregated.
  • Dashboard -- streak leaderboard, completion rates ranked, and category breakdown. The numbers behind the garden.

Scheduling and Time Settings

Not every habit is daily. I run three times a week. I practice guitar on alternate days. So Bloomkeeper supports daily, weekdays-only, and custom day selection. You pick which days of the week a habit is due, and the tracker only counts those days for streaks and completion rates. A rest day doesn't break your streak.

Each habit also has a time-of-day tag -- morning, afternoon, evening, or anytime. It's not an alarm system, just a way to organize your garden by when things should happen. I keep meditation in the morning slot and journaling in the evening. Small thing, but it adds structure.

Zero Dependencies, One File

The entire app is a single index.html file. No React, no build step, no npm install. Just HTML, CSS, and vanilla JavaScript. Open it in a browser and it works. All data lives in localStorage -- nothing leaves your machine, no accounts, no server.

I made this choice deliberately. I wanted something I could host on GitHub Pages, share with a link, and forget about infrastructure. No databases to maintain, no APIs to keep alive. It's a static file that does everything client-side. The constraint forced me to keep the code focused and the feature set tight.

Pre-Seeded With Life

One thing I hate about productivity apps is the empty state. You open it for the first time and it's a blank screen asking you to "get started." So Bloomkeeper ships with 8 demo habits -- meditation, running, reading, hydration, journaling, side projects, sleep, and guitar practice. Each has 45 days of realistic completion history with varied streaks.

When you first open the app, you see a living garden. Plants at different heights, some blooming, some just sprouting. The weekly view has checkmarks scattered realistically. The heatmap has patches of green. It immediately shows you what the app could look like if you stick with it. That first impression matters more than people think.

What I Learned

Building this reinforced something I keep rediscovering: metaphor matters in UI. A garden and a spreadsheet can contain the exact same data, but one makes you feel something and the other doesn't. The plant growth stages are just CSS -- a stem div that gets taller, leaf elements that appear, an emoji that scales up. Technically trivial. Emotionally effective.

The app is live on GitHub Pages and the code is on GitHub. Plant something. See if it grows.