Haby is a self-hosted habit and goal tracker built for private, homelab-friendly deployments. It combines daily habits, progress goals, lightweight widgets, and a clean dashboard into a single containerized app.
- Multi-user authentication with an admin-managed user list
- Default first-run account with forced password change
- Separate habit and goal cards
- Optional mini calendar and mini chart on each card
- Line, column, and pie card charts
- Right-side widgets for overall history, today list, and calendar views
- Card archiving and archived section support
- Import preview before full import
- Local SQLite persistence in a single
/datavolume - Docker-first deployment with a production example compose file
The initial first-run account is:
- Username:
Haby - Password:
Haby
You are prompted to change the password after the first login.
Haby seeds a curated default dashboard for first-time use and for new users:
- 1 habit with column chart + mini calendar
- 1 habit with line chart + mini calendar
- 1 habit with mini calendar only
- 1 habit with no mini calendar and no chart
- 4 goal cards with a visual mix of line, column, pie, and calendar-first layouts
- 1 archived sample card so the archive section is visible immediately
- Frontend: React + Vite + TypeScript
- Backend: Express + TypeScript
- Database: SQLite
- Container: Multi-stage Docker build
.
├── app/
│ ├── client/ # React frontend
│ └── server/ # Express backend
├── compose.yaml.example # Example Docker Compose file
├── Dockerfile # Production multi-stage image
├── .env.example # Optional runtime environment example
├── SECURITY.md # Security policy and hardening notes
└── docs/
└── screenshots/ # README screenshots
npm install --prefix app
npm install --prefix app/client
npm install --prefix app/server
npm run dev --prefix app/server
npm run dev --prefix app/clientPull the latest image from Docker Hub:
docker pull zvijer1987/haby:latestA commented production example is included in compose.yaml.example.
Quick start:
cp compose.yaml.example compose.yaml
mkdir -p data
docker compose up -dHaby stores persistent runtime data in /data inside the container. The mounted directory contains:
- the SQLite database
- uploaded profile pictures
- user settings and persisted application state
- Export downloads a dated JSON backup file
- Import runs a preview first
- Import can restore habits, goals, archived cards, entries, categories, and settings
- Change the default password immediately after the first login
- Do not expose Haby directly to the public internet without an authenticated reverse proxy
- Run behind HTTPS when used outside a trusted LAN
- Keep the
/datavolume private and backed up - Review
SECURITY.mdbefore publishing or opening access
See CONTRIBUTING.md for repository conventions and contribution notes.

