No description
  • D 90.7%
  • Rust 8.9%
  • TypeScript 0.2%
  • Makefile 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
helix-a 61c8366b2b
Some checks failed
syncNext.yml / chore: add target to .gitignore (push) Failing after 0s
tagAndRelease.yml / chore: add target to .gitignore (push) Failing after 0s
chore: add target to .gitignore
Helix-Harness: pi
Helix-Model: sparky/Sehyo/Qwen3.5-122B-A10B-NVFP4
2026-10-08 23:55:25 +00:00
.github/workflows feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
assets feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
src feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
startos feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
target feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
.dockerignore feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
.gitignore chore: add target to .gitignore 2026-10-08 23:55:25 +00:00
.prettierrc feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
AGENTS.md feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
Cargo.lock feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
Cargo.toml feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
CLAUDE.md feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
Dockerfile feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
icon.svg feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
instructions.md feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
LICENSE feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
Makefile feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
package-lock.json feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
package.json feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
README.md feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
tsconfig.json feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00
UPDATING.md feat: scaffold the Chore Wheel package 2026-10-08 23:54:18 +00:00

Chore Wheel

A family chore rotation app for StartOS that uses weighted random selection to fairly assign chores.

What It Does

Chore Wheel helps households distribute chores fairly using a visual "wheel" system. Each chore has a weight based on how overdue it is, and spinning the wheel randomly selects a chore proportional to its weight. Overdue chores have a higher chance of being selected.

Features

  • Weighted Random Selection: Chores that are more overdue have higher weights and are more likely to be picked
  • Visual Wheel: Animated canvas wheel showing chore weights as slice sizes
  • Member Management: Track multiple household members and their completion history
  • Chore CRUD: Add, edit, and remove chores with configurable intervals
  • History & Tallies: View recent completions and per-member statistics
  • Basic Auth: Simple username/password protection for LAN use

Technical Stack

  • Backend: Rust with axum (web framework) and sqlx (SQLite)
  • Frontend: Server-rendered HTML with htmx for dynamic updates
  • Database: SQLite persisted to StartOS volume
  • Authentication: HTTP Basic Auth (configurable via environment variables)

How It Works

Weight Calculation

A chore's weight is calculated as:

weight = max(0, days_since_last_completion - interval_days) + 1

New chores or never-completed chores use their created_at as the baseline, giving them a weight of 1.

Spinning

When you spin the wheel:

  1. All chores are sampled via weighted random selection
  2. The selected chore is displayed
  3. You can mark it as complete, which updates last_completed_at and resets its weight

Configuration

Environment Variables

  • AUTH_USERNAME: Basic auth username (default: admin)
  • AUTH_PASSWORD: Basic auth password (default: password)

Set these in your Dockerfile or container configuration before building.

API Endpoints

Method Endpoint Description
GET / Main UI with wheel, member picker, and chore list
POST /spin Weighted random chore selection (JSON: {chore_id, member_id})
POST /complete Mark chore complete (JSON: {chore_id, member_id})
GET /chores List all chores with weights
POST /chores Create new chore (form: name, interval_days)
PATCH /chores/:id Update chore (form: name, interval_days)
DELETE /chores/:id Delete chore
GET /history Recent completions with member tallies

Building

make

This produces a .s9pk file ready for installation on StartOS.

Development

# Build Rust backend
cargo build --release

# Run locally (for testing)
AUTH_USERNAME=admin AUTH_PASSWORD=password ./target/release/chore-wheel

License

MIT