Inputs
The generator takes four inputs from you: people (one or more household members), rooms (kitchen, bathroom, bedrooms, etc.), chores (each tagged with a frequency, an effort and an optional difficulty), and weeks (how many weeks of plan to generate, default 4). Optionally, you can fix some chores to specific people or specific rooms — useful for "Anna always does the bins because she walks the dog past them anyway".
Chore weighting
Each chore is converted into a numeric weight before allocation. The formula combines three factors:
- Effort — small (1), medium (2), or large (3). A weekly toilet scrub is large; a daily counter wipe is small.
- Frequency multiplier — daily (× 7), weekly (× 1), biweekly (× 0.5), monthly (× 0.25). This normalises the weekly load a chore actually contributes.
- Difficulty modifier — easy (× 1), normal (× 1.1), annoying (× 1.3). This is what stops one person carrying every unpleasant task.
The result is a real number representing the chore's "weekly cost". These weights are summed to give a target per-person load, which is the total weekly weight divided by the number of household members.
The allocation algorithm
Allocation is a constraint-aware greedy scheduler with three passes:
- Pass 1 — fixed assignments. Any chore the user pinned to a specific person is assigned first and its weight is subtracted from that person's remaining budget.
- Pass 2 — annoying-task rotation. Difficulty-tagged chores are distributed across people in a cyclic rotation across weeks, so the same person does not get the bin two weeks running. Within a week, ties are broken by lowest cumulative weight.
- Pass 3 — remaining chores. Sorted heaviest-first, each remaining chore is assigned to the person who is currently furthest below their weekly budget. Ties are broken by who got the fewest chores in the current room (so one person doesn't get the whole kitchen).
The output is a per-week, per-person, per-room schedule that is provably balanced to within one chore-weight unit per person per week, and rotates annoying tasks fairly across the planning horizon.
Frequency expansion
Daily chores are expanded into seven entries per week and assigned round-robin across the household so the same person is not on kitchen-counter duty seven days in a row. Weekly, biweekly and monthly chores appear in the schedule on the appropriate week cadence — biweekly on weeks 1 and 3 of a 4-week plan, monthly on week 1 only.
What the algorithm does NOT try to do
- We do not try to "optimise" cleaning order within a day. Top-to- bottom and dry-to-wet are well-known heuristics; we mention them on guide pages but do not enforce them in the schedule.
- We do not assume any specific surface-care chemistry. The chore name is yours; the algorithm only schedules it.
- We do not try to predict your calendar. If you are away on Tuesday, you swap with someone on the printable. The chart is the list — you are the planner.
Where the computation happens
Every line of allocation logic runs in your browser as compiled JavaScript. There is no API call. There is no server-side scheduling. The source for the scheduler lives in src/lib/scheduler.ts and is shipped to your browser as part of the static site bundle. You can verify this with your browser's network tab: opening any landing page makes no XHR or fetch request to a "schedule" endpoint, because there is none. This is the same architectural choice that makes our privacy claim true by construction rather than by promise.
Exports
PDF export uses an in-browser HTML-to-canvas pipeline (html2canvas + jsPDF) at 1.5× scale with JPEG compression at quality 0.85, which keeps printable A4 / US Letter output under one megabyte while remaining sharp at 300 DPI. PNG, CSV and plain-text exports are generated synchronously from the same in-memory schedule object.
Data sources
Default chore lists, room presets, and effort defaults are opinionated defaults built from a curated set of household-management references and our own testing. They are starting points, not prescriptions — the tool is designed to be edited.
Algorithm changes
Material changes to the scheduling algorithm — anything that changes what schedule a given input would produce — are documented on this page, along with the date of the change. Minor refactors are not documented.