# Chore Roulette > Spin a fair chore rota: random but balanced by effort, with a “not again” rule. Enter the people (with an optional capacity, e.g. 0.5 for a child) and the chores with effort points. Chore Roulette draws a reproducible random assignment that balances everyone’s total effort, can avoid giving anyone the same chore as last week, and shows each person’s load against their fair share. Part of usefulweb.site (https://usefulweb.site/). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://choreroulette.usefulweb.site/ (interactive tool at https://choreroulette.usefulweb.site/tool) - JSON API: POST https://choreroulette.usefulweb.site/api/v1/calculate with a JSON object of inputs (schema: https://choreroulette.usefulweb.site/api/v1/tool) - OpenAPI: https://choreroulette.usefulweb.site/openapi.json - MCP (Streamable HTTP): https://choreroulette.usefulweb.site/mcp - tool `chore_roulette` ## Inputs - people (table, required): People - chores (table, required): Chores - lastWeek (table): Last week (optional) - Who did which chore last week, for the “not again” rule. - avoidRepeats (boolean): Avoid giving anyone the same chore as last week - seed (text): Seed (optional) - Same seed + same inputs = same draw. Leave empty to derive it from the inputs; change it (e.g. to the week number) to re-spin. ## Method - Each chore occurrence is a task with effort points. A person’s fair share is total effort × their capacity ÷ the sum of capacities. - The seeded random generator (sfc32 seeded with SHA-256 of the seed) shuffles the tasks and the people; tasks are then handed out largest first to whoever would end up with the lowest load relative to their capacity (ties go to the seeded order). - A local search then moves single tasks and swaps pairs whenever that lowers the sum of squared differences between each person’s effort and their fair share, until nothing improves. Moves never give someone a chore they did last week when the rule is on. - Fairness = 100 × (1 − Σ|effort − fair share| ÷ (2 × total effort)): the share of the work that sits with the right person. Spread = highest minus lowest effort per full share of capacity. - If everyone did a chore last week, a repeat is unavoidable and is reported. Without a seed, the seed is a hash of the inputs, so the same rota appears on the page, in the API and in MCP; change the seed to re-spin.