Skip to content

Repository files navigation

Hestia

Hestia

A self-hosted household chore chart for families. Add your chores, assign them (or let anyone claim them), check them off, and earn points — no subscription, no cloud account, your data stays on your own server.

Hestia exists because most task trackers you'll find are built for software teams, not families. It's meant to be free, simple, and something a non-technical family member can actually use from a tablet on the fridge.

Status

Early days — this is a fresh scaffold, not yet a usable app. See CLAUDE.md for the project's conventions and current architecture decisions.

Planned features (v1)

  • Household accounts with a shared login, and a tap-your-avatar picker for whoever's actually using the screen (kid-friendly, no passwords required for kids)
  • Optional PIN per person for restricted actions
  • Recurring chores (daily / weekly / custom schedule)
  • Points and streaks per person
  • Works well on a phone, a wall-mounted tablet, or a Raspberry Pi-hosted browser

Tech stack

  • Go with Gin and GORM for the backend API
  • React 19 + Vite + TypeScript for the frontend
  • Tailwind CSS
  • SQLite via GORM's glebarez/sqlite driver (pure Go, no cgo) — one file, no separate database server to run
  • Docker, built for both amd64 and arm64 (Raspberry Pi / ARM NAS friendly)

Running it (Docker)

git clone https://github.com/Wikid82/hestia.git
cd hestia
cp .env.example .env   # set AUTH_SECRET, and TZ to your household's timezone
docker compose up -d

The app will be available at http://localhost:8080. The SQLite database lives in ./data/hestia.db on the host, via a bind-mounted volume — back up that one file to back up your whole household's data.

Set TZ to your household's IANA timezone (e.g. America/New_York) — chore due-dates are computed from the container's local clock, so without it everything runs on UTC regardless of where you actually are, and chores flip to the next day at UTC midnight instead of local midnight.

Running behind a reverse proxy

Hestia works out of the box behind Caddy, Traefik, Nginx Proxy Manager, or similar, as long as the proxy forwards the original Host header (all three do this by default). Serving from a domain or subdomain root (e.g. https://hestia.example.com) needs no extra configuration — just proxy to the container's port 8080.

Serving Hestia from a reverse-proxy subpath (e.g. https://home.example.com/hestia/) isn't supported yet — proxy from a dedicated (sub)domain instead.

Developing locally

Run the backend and frontend as two separate processes:

cd backend && cp ../.env.example ../.env  # or export AUTH_SECRET/DB_PATH/TZ directly
go run ./cmd/api
cd frontend
npm install
npm run dev

The Vite dev server proxies /api requests to the Go backend (see frontend/vite.config.ts), so open the frontend's dev URL (typically http://localhost:5173) rather than the backend's port directly.

Database migrations run automatically on startup via GORM's AutoMigrate. After changing backend/internal/models/models.go, just restart the backend — no separate migration-generation step needed.

License

MIT — free for anyone to use, fork, or self-host.

Releases

Sponsor this project

Packages

Contributors

Languages