Habits Widget
Shows the habits you have scheduled for today from a Habits instance, and lets you tick them off without leaving the homepage.
Requirements
- A running Habits instance reachable from the homepage server (not just your browser — the homepage proxies the API)
- A Habits account
Configuration
| Key | Type | Default | Description |
|---|---|---|---|
habitsUrl | string | — | Base URL, e.g. https://habits.example.com |
email | string | — | The email you sign in to Habits with |
password | string | — | That account's password |
hideCompleted | boolean | false | Drop habits already done, leaving only what's outstanding |
About the password
It is stored in this homepage's database and sent to the homepage server, which signs in on your behalf. That is the same arrangement the FreshRSS, Navidrome and Umami widgets use, but Habits holds a personal record — consider a dedicated account if the dashboard is shared.
Features
- Lists only the habits scheduled today, so a weekday habit is absent at the weekend
- Click the circle to complete a habit; click again to clear it
- Multi-target habits (8 glasses of water) advance one at a time, and the circle fills as a wedge showing how far round you are
- Timed habits fill straight to their target in one click — the tick means "I did this", and the app's own timer is the other way in
- "N times a week/month" habits show progress against the period (
2/3) rather than a daily target, because no single day is required - Current streak beside each habit, and
done/totalin the header - Refreshes every 60 seconds, and immediately after you tick something
How it works
The browser never talks to Habits directly. Your configuration is posted to the homepage server, which signs in, caches the 15-minute access token in memory, and proxies the request. When the token expires the next call gets a 401 and the server signs in again — you never see it.
Habits also issues refresh tokens, which this widget deliberately ignores. They are single-use and rotate, so two widget calls arriving together would each spend the same one and whichever lost would be signed out.
Notes
- Completing a habit sends no date. Habits records it against today in the timezone configured on your Habits account, which is more reliable than anything the homepage could work out.
- The widget decides what is "scheduled today" itself, mirroring Habits' own rule. A schedule type added to Habits in future would need adding here too.