Transform household chores into an epic family adventure - Self-hosted gamification app
50K+
Transform household chores into an epic family adventure
TidyQuest is a self-hosted web application that gamifies housework using RPG mechanics. Complete tasks, earn coins, unlock achievements, and compete with your family on the leaderboard.
Warning
**Early-stage project** ā TidyQuest is under active development. You may encounter bugs, incomplete features, or breaking changes between versions. Back up your data regularly and feel free to [open an issue](https://github.com/mellow-fox/TidyQuest/issues) if something breaks.
TidyQuest turns boring chores into quests:
Perfect for families who want to:
Main dashboard showing task overview, streaks, and quick stats
Room view with task health bars and completion tracking
Family competition with weekly/monthly rankings
Reward catalog and redemption system
Unlock badges for completing milestones
Choose your deployment method:
If you're running Unraid, TidyQuest is available directly from the Community Applications catalog:
JWT_SECRETFastest way to get started on any Linux server using the pre-built multi-platform image:
Create project directory
mkdir tidyquest && cd tidyquest
Create docker-compose.yml
services:
tidyquest:
image: mellowfox/tidyquest:latest
container_name: tidyquest
ports:
- "3020:3000"
environment:
- NODE_ENV=production
- JWT_SECRET=CHANGE_THIS_TO_SECURE_RANDOM_STRING_MIN_32_CHARS
- TZ=Europe/Paris # Your timezone ā used for day/week boundaries & notifications
volumes:
- ./data:/app/data
restart: unless-stopped
Generate secure JWT_SECRET
openssl rand -base64 32
# Copy output and replace JWT_SECRET in docker-compose.yml
Launch
docker compose up -d
Access at http://localhost:3020ā
For development or customization:
Clone the repository
git clone https://github.com/mellow-fox/TidyQuest.git
cd TidyQuest
Configure environment
cp .env.example .env
# Edit .env and set a secure JWT_SECRET
# Generate one: openssl rand -base64 32
Build and launch
docker compose up -d --build
Access at http://localhost:3020ā
On first launch, the database is empty. Create an admin account via the Register page.
| Layer | Technology |
|---|---|
| Frontend | React 19 + Vite + TypeScript |
| Backend | Node.js + Express + TypeScript |
| Database | SQLite3 (with WAL mode) |
| Auth | JWT + bcrypt |
| Deployment | Docker (single container, ~300MB) |
| Routing | React Router v7 |
| Styling | Custom design system with CSS custom properties |
Zero external dependencies for core functionality. Optional Telegram or ntfy integration for notifications.
TidyQuest/
āāā client/ # React frontend
ā āāā src/
ā ā āāā components/ # UI components
ā ā āāā hooks/ # useAuth, useApi, useTranslation
ā ā āāā i18n/ # Translation files (EN/FR/DE/ES/IT)
ā ā āāā App.tsx
ā āāā package.json
āāā server/ # Express backend
ā āāā src/
ā ā āāā routes/ # API endpoints
ā ā āāā middleware/ # JWT auth
ā ā āāā utils/ # Health calculation, notifications
ā ā āāā database.ts # SQLite setup
ā āāā package.json
āāā data/ # Persistent storage (Docker volume)
ā āāā tidyquest.db # SQLite database
ā āāā avatars/ # User-uploaded photos
āāā Dockerfile # Multi-stage build
āāā docker-compose.yml
āāā .env.example # Configuration template
āāā SECURITY.md # Security best practices
āāā API.md # API documentation
See .env.example for all options. Key variables:
| Variable | Required | Description |
|---|---|---|
JWT_SECRET | Yes (prod) | Secret for signing JWT tokens (min 32 chars) |
NODE_ENV | No | production or development |
TZ | Recommended | Timezone for day/week boundaries & notifications (e.g. Europe/Paris). Defaults to UTC |
PORT | No | Server port (default: 3000) |
ADMIN_RESET_PASSWORD | No | One-shot admin password recovery. Set, restart, then remove. |
TidyQuest supports two notification providers (configure in Settings, admin only):
Telegram
ntfy
Notification types:
Admin can enable vacation mode in Settings:
Vacation freezes task health and protects streaks while members are away.
If an admin forgets their password:
environment:
- ADMIN_RESET_PASSWORD=your-new-password
Before exposing publicly, review SECURITY.md for:
ā ļø Never expose TidyQuest directly to the internet over HTTP.
docker compose pull
docker compose up -d
cd TidyQuest
git pull
docker compose down
docker compose up -d --build
Your data persists in the ./data volume.
Admin ā Settings ā Export Data ā Download JSON
cp data/tidyquest.db backups/tidyquest-$(date +%Y%m%d).db
Admin ā Settings ā Import Data ā Upload JSON
See API.md for full endpoint documentation with examples.
Quick overview:
/api/auth/register, /api/auth/login/api/rooms (CRUD)/api/rooms/:id/tasks (CRUD + complete)/api/dashboard (aggregated view)/api/leaderboard?period=week|month|quarter|year/api/rewards (CRUD + redeem)/api/achievementsAll endpoints require Authorization: Bearer <token> (except auth routes).
TidyQuest includes a custom Home Assistant integration that exposes tasks as sensors and allows you to complete or manage them from dashboards and automations.
custom_components/tidyquest/ into your Home Assistant config/custom_components/ directoryEach task becomes a sensor whose state is the task's current health (0ā100). Attributes include room_name, effort, is_due, assigned_users, assignment_mode, and more.
| Service | Description |
|---|---|
tidyquest.complete_task | Mark a task as done. HA user is automatically matched to a TidyQuest user by display name |
tidyquest.reset_task | Reset a task to due/dirty (removes today's completion) |
tidyquest.create_task | Create a new task in a room |
tidyquest.update_task | Update task properties (frequency, effort, etc.) |
tidyquest.delete_task | Delete a task |
tidyquest.refresh | Force immediate sensor refresh |
service: tidyquest.complete_task
target:
entity_id: sensor.kitchen_wash_dishes_health
automation:
trigger:
platform: numeric_state
entity_id: sensor.kitchen_wash_dishes_health
below: 20
action:
service: notify.mobile_app
data:
message: "The dishes need doing!"
User matching: HA user names are automatically matched to TidyQuest
displayName(case-insensitive). Override withuser_nameortidyquest_user_idin service data.
See custom_components/tidyquest/README.md for full documentation.
Contributions are welcome! Please:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
What this means:
Why AGPL? To ensure TidyQuest remains free and open-source forever, preventing proprietary SaaS forks.
See the LICENSE file for full details.
SECURITY.md for responsible disclosureMade with ā¤ļø for families everywhere
Content type
Image
Digest
sha256:508baef8eā¦
Size
70.3 MB
Last updated
4 months ago
docker pull mellowfox/tidyquest