App Launcher
← All apps
Simple Chores screenshot
Live

Simple Chores

Family chore tracking that kids actually use

Go Gin GORM React TypeScript Vite Tailwind CSS MySQL JWT Docker Kubernetes Prometheus

What it is

Simple Chores keeps our household running without the nagging. Each kid sees their assigned and optional chores, taps to mark one done, a parent approves it, and points accumulate toward rewards. A gamification layer — achievements, a points economy, and an avatar shop — keeps the kids coming back. It’s built for real daily use by both adults and young children on the same account.

Architecture

A Go + Gin REST API backs a React 19 + TypeScript single-page app built with Vite and Tailwind. Data is modeled with GORM over MySQL. Auth is JWT; every request is scoped to a family, so the data model is genuinely multi-tenant rather than single-household.

Kids & Parents
Ingress TLS / cert-manager
React SPA Vite + TS
Go + Gin API JWT
MySQL GORM
JWT-authenticated SPA over a family-scoped Go API, on Kubernetes

Data & domain model

  • Family → Users (parent/child roles), Chores, and ChoreAssignments with flexible (cron-like) scheduling.
  • A PointLedger modeled as double-entry bookkeeping: every earn, spend, and adjustment is an immutable entry, so a balance is always the sum of its history and can’t drift from concurrent updates.
  • An Achievement engine covering six types (points, streaks, daily/weekly completions, optional-chore counts, lifetime totals) with progress tracking and claimable rewards.
  • An avatar shop where earned points buy cosmetic items.

Engineering highlights

  • Family-scoped multi-tenancy — the JWT carries the family id, middleware rejects any request whose path doesn’t match it, and every query is filtered by family. Isolation holds even if a handler has a bug.
  • Multi-pod-safe migrations — a custom runner takes a database-backed lock with stale-lock detection, so when replicas start at once exactly one applies migrations and the rest proceed safely.
  • Per-tenant observability — Prometheus metrics (request counts + latency histograms) labeled by route, status, and family id, scraped into dashboards.
  • An in-app AI assistant — an Anthropic Claude integration with tool use that can read assignments and help manage chores conversationally.
  • Layered, testable design — thin Gin handlers over an interface-based service layer; tested with testify + sqlmock on the Go side and Jest + React Testing Library on the UI, gated in CI.

Infrastructure & delivery

Multi-stage Docker builds (static Go binary on Alpine; Vite build served by Node) run on a Kubernetes cluster behind an nginx ingress, with TLS issued by cert-manager. Secrets are committed as encrypted Sealed Secrets for a clean GitOps workflow. GitHub Actions runs the Go + React test suites as a required gate, then builds and pushes images (tagged by semver and commit SHA) and triggers a zero-downtime rolling update (maxUnavailable: 0 + readiness probes).

What I learned

Building for kids forces real UX discipline — anything ambiguous gets misused. The approval step and the double-entry ledger started as small details and became the things that made the whole system trustworthy enough for the family to rely on every day.