Dojo Competition — Project Brief
Questions for Clarification
- Points for Elliot’s reading — “Reading 10 long pages or equivalent” has no point value listed. Is it 1 point? 2 points? A> 1
- Goal examples — Can you provide some example individual and joint goals? (e.g., Gina: “Unicorn toy — 30 points”, Elliot: “New basketball — 40 points”, Joint: “Family cinema trip — 50 points”) A> each 50 dojos > £10 smiths voucher
300 dojos joint > a family day out
resets at 300
- Negative score actions — You mentioned some actions can have negative scores. Can you list a few examples? (e.g., “Not tidying up when asked: -1” A> poor dinner table behaviour, -2, being rude to people -5, not foing something when asked -3
- Reset cadence — Do daily task completions reset each day (i.e., you can earn “brushing teeth” points fresh each day), while points accumulate towards goals? A> yes, toothbrushing twice per day
- Multiple users / access control — Is this parent-only entry, or should kids be able to tap/mark tasks as done themselves? Any PIN or simple auth? A> just myself and wife giubergamin@gmail.com should be added to ingress authentication
- History / ledger visibility — Should kids see a full history of what they earned, or just current totals and progress bars?
detailed accounting visible /editablee in a seperate page
- Goal redemption — When a child reaches a goal’s point threshold, are those points “spent” (deducted), or do points just keep accumulating and goals are simply milestones? A> no, resets at 300
- Joint goal contribution — For the joint goal, do both children’s points pool together, or is it a separate shared balance? A> both pool together
- Theme preferences — Gina loves unicorns, Elliot loves football/basketball. Should each child have a themed view/avatar, or is one shared theme fine for v1? A> themed avatar
- Alexa skill scope (v2) — Just read-only queries (“What’s Elliot’s score?”), or also voice-entry (“Elliot brushed his teeth”)? A> readonly
Overview
A mobile-friendly web application to track a points-based reward competition between two children:
- Elliot (boy, 7) — loves football and basketball
- Gina (girl, 4) — loves unicorns
Children earn points by completing daily tasks. Points accumulate towards individual goals and a shared joint goal.
Architecture
| Layer | Choice | Notes |
|---|---|---|
| Repo | craigedmunds/dojo | New GitHub repository |
| Frontend | Static site (HTML/CSS/JS) | No build step needed for v1; could use a lightweight framework (e.g., Alpine.js or vanilla JS) |
| Data store | YAML files in repo | No database; files live on the code-server PVC and are committed to git |
| Hosting | Kubernetes (k8s-lab) via ArgoCD | Public ingress at dojo.ctoaas.co |
| Alexa skill | v2 milestone | Voice queries for scores and goal progress |
Data Model (YAML)
config/tasks.yaml — Task Definitions
tasks:
# Shared tasks (both children)
- id: tidy-playroom
name: Tidying up the playroom
points: 2
children: [elliot, gina]
frequency: daily
- id: tidy-kitchen
name: Tidying up the kitchen
points: 1
children: [elliot, gina]
frequency: daily
- id: brush-teeth
name: Brushing teeth
points: 1
children: [elliot, gina]
frequency: daily
maxPerDay: 2 # morning + evening
- id: ready-for-bed
name: Getting ready for bed
points: 1
children: [elliot, gina]
frequency: daily
- id: ready-for-school
name: Getting ready for school
points: 1
children: [elliot, gina]
frequency: daily
- id: sleep-no-issues
name: Going to sleep without issues
points: 1
children: [elliot, gina]
frequency: daily
- id: own-bed-all-night
name: Sleeping in own bed all night
points: 1
children: [elliot, gina]
frequency: daily
# Gina-only tasks
- id: no-peepee-accident
name: No peepee in pants for a day
points: 2
children: [gina]
frequency: daily
- id: picture-book
name: Reading 1 picture book
points: 1
children: [gina]
frequency: daily
# Elliot-only tasks
- id: reading-pages
name: Reading 10 long pages or equivalent
points: 1 # TBC — see Q1
children: [elliot]
frequency: daily
- id: empty-dishwasher
name: Emptying the dishwasher
points: 1
children: [elliot]
frequency: dailyconfig/goals.yaml — Goal Definitions
goals:
individual:
elliot:
- id: goal-elliot-1
name: "TBC" # e.g., "New basketball"
pointsRequired: 30
gina:
- id: goal-gina-1
name: "TBC" # e.g., "Unicorn toy"
pointsRequired: 30
joint:
- id: goal-joint-1
name: "TBC" # e.g., "Family cinema trip"
pointsRequired: 50config/children.yaml — Child Profiles
children:
- id: elliot
name: Elliot
age: 7
theme: sports # football & basketball
icon: "⚽"
- id: gina
name: Gina
age: 4
theme: unicorn
icon: "🦄"data/ledger.yaml — Points Ledger
entries:
- date: "2026-04-19"
child: elliot
taskId: brush-teeth
points: 1
note: "Morning"
- date: "2026-04-19"
child: gina
taskId: tidy-playroom
points: 2Home Screen (UI)
The main screen shows at a glance:
- Score cards — One per child, showing:
- Name and avatar/icon
- Current total points
- Progress bar towards next individual goal (with goal name and points remaining)
- Joint goal — Shared progress bar showing combined contribution towards the joint goal
- Today’s tasks — Checklist of today’s tasks per child, with tappable checkboxes to record completion
- Recent activity — Last few ledger entries
Design Principles
- Mobile-first — Optimised for phone and iPad
- Kid-friendly — Large tap targets, bright colours, fun icons
- Simple navigation — Single-page or minimal tabs (Home / History / Goals)
- Themed — Light personalisation per child (colours, icons)
Deployment
- Static files served from the repo via a simple web server (e.g., nginx container)
- YAML data files mounted from the code-server PVC (or a shared volume)
- ArgoCD application definition in
k8s-labrepo - Ingress at
dojo.ctoaas.cowith TLS
Scope
v1 (MVP)
- Static web app with task recording and score display
- YAML-based configuration and data persistence
- Mobile-responsive design
- ArgoCD deployment to
dojo.ctoaas.co - Parent-operated (no auth needed for v1)
v2 (Future)
- Alexa skill for querying scores and progress
- Voice-based task completion recording
- Streak tracking and badges
- Weekly/monthly reports