Inspiration

"Unfinished business" is what keeps a ghost around. It is also what my to-do list is made of.

The tasks that haunt me are rarely the big ones. They are the vague ones: "sort out the dentist thing", "deal with that email". They sit there for weeks, not because they are hard, but because nobody has said what "done" looks like.

So we turned each of them into a small ghost. Not a scary one. Just one that is waiting.

What it does

  • Write down something you have been putting off. A grey little ghost moves into the old house.
  • Tell it what "done" looks like and give it one small first step. It turns white: ready.
  • Tick a step and the ghost does a little chore — sweeps, waters the plants, wipes the window — and gains some colour. Untick it and the ghost quietly steps back.
  • Nothing ever finishes by itself. When every step is ticked, you say goodbye by hand. The ghost stamps your memorial book and a warm lamp lights up in the lobby.
  • The house grows a floor as more ghosts move in. After twelve goodbyes, a friend with a lantern comes out of the mist.

There are no streaks, no deadlines and no scolding. Everything stays in your browser: no account, no server. English and Simplified Chinese are both built in, and there is a real reduced-motion mode.

How we built it

It is a small static web app: Preact, TypeScript and Vite, with no backend. The ghost, the night sky, the lamps and the keepsake stamps are drawn in code with SVG and CSS. Your notebook lives in your browser's local storage.

We built it spec-first with Kiro (see "How we used Kiro").

Challenges we ran into

  • Making a task tool that never makes you feel bad. Every "motivating" mechanic we could think of — streaks, countdowns, red badges — turned out to be a small way of scolding. We removed them all and let the ghost's colour carry the feeling instead.
  • Being honest about progress. Unticking a step had to really step back, and a task had to be impossible to complete by accident.
  • Keeping it calm for everyone: keyboard use, screen-reader announcements, large touch targets, and a reduced-motion mode where the celebration becomes a still page.

Accomplishments that we're proud of

  • The goodbye. Confirming a task by hand, watching the ghost get its stamp and a lamp come on, feels like finishing something — which was the whole point.
  • It works on a phone, keeps working offline once loaded, and never sends your words anywhere.

What we learned

Writing down what "done" looks like is most of the work. That is true for a dentist appointment, and it turned out to be true for building software with an AI partner too.

What's next for Unfinished Business

More residents, more keepsakes, and a way to carry your house between devices without giving up privacy.

Built With

Share this project:

Updates

Submission history