← All projects In progress

Hearthstead

A gamified chore planner for a whole household. Chores sync live between phones, earn XP when they're done, and the app keeps working without a connection.

The problem

Hearthstead is one shared planner for the chores and habits that keep a home running. Everyone in the household uses the same board.

What it does

Chores move across a board from Planted to Growing to Ready to Harvest. Finishing one earns XP, and each person in the household has a level and a place on a leaderboard.

  • Repeating chores and daily habits with streaks
  • Checklists inside a chore, and “plots” to group chores by area
  • A week view and a harvest log of everything finished
  • Reminders that fire as system notifications, even when the native app is closed
  • Households: sign in, invite family, assign chores and see changes live
  • Light and dark themes, plus JSON backup and restore

How it’s built

The front end is Angular 20 using signals for state, styled with Bootstrap 5. A single PlannerStore service holds the app state as signals, and components read from it directly.

Data access goes through a DataRepository interface with two implementations. One stores everything on the device. The other syncs to Cloud Firestore for signed-in households. The app works the same either way, and the Firebase code is lazy-loaded so people who never sign in never download it.

Saved data is versioned and migrated on load. When the app was renamed from “Directive Zero” to Hearthstead, existing users’ data moved over automatically on first launch.

Capacitor wraps the same build as native Android and iOS apps, which is what lets reminders fire while the app is closed. The web build is an installable PWA with a service worker for offline use.

Testing

Unit tests run with Karma. The Firestore security rules have their own test suite, run against the local Firebase emulators, so one household can never read or change another household’s chores.

What I’d do differently

This section is coming soon.