Track daily habits with a GitHub-style heatmap rendered directly on your desktop wallpaper.
Because you'll ignore every other habit tracker. This one lives on your desktop and emails you daily. You can't hide.
A daily email sends you a link. Click it, check off your habits, and your wallpaper updates with a heatmap overlay showing your progress.
Getting Started
1. Sign up
Head to habits.timfarrelly.com/signup and enter your email and the habits you want to track.
You'll get a token on the welcome page (don't worry about saving it, your daily email contains it too).
Note: This is a hobby project running on a personal server. Don't use sensitive information as habit names. The server operator can see all data. See Self-Hosting if you'd prefer to run your own.
2. Log your habits
You'll receive a daily email with a link. Click it, check off what you did, done. You can also log directly at any time via the link.
3. View your dashboard
Visit your dashboard at habits.timfarrelly.com/dashboard?token=YOUR_TOKEN to see GitHub-style heatmaps and current streaks for each habit. You can add, remove, or reorder habits from Settings.
4. (Optional) Desktop wallpaper
Want the heatmap rendered directly on your desktop? Set up the local client:
git clone https://github.com/timf34/habit-wallpaper.git
cd habit-wallpaper
uv sync --extra clientPrerequisite: uv package manager. Install with
curl -LsSf https://astral.sh/uv/install.sh | sh(macOS/Linux) orpowershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"(Windows).
Create ~/.habit-wallpaper/config.json:
{
"server_url": "https://habits.timfarrelly.com",
"auth_token": "your-token-from-signup",
"background_image": "/path/to/your/photo.jpg",
"panel_position": "top-right",
"panel_margin": 40
}Test it:
uv run python -m client.main
Your wallpaper should update with the heatmap overlay. Now set up automatic updates:
Windows (Task Scheduler)
schtasks /create /tn "HabitWallpaper" /tr "cmd /c cd /d C:\path\to\habit-wallpaper && .venv\Scripts\python.exe -m client.main" /sc minute /mo 30 /f
macOS (launchd)
Create ~/Library/LaunchAgents/com.habit-wallpaper.plist:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.habit-wallpaper</string> <key>ProgramArguments</key> <array> <string>/bin/bash</string> <string>-c</string> <string>cd /path/to/habit-wallpaper && .venv/bin/python -m client.main</string> </array> <key>StartInterval</key> <integer>1800</integer> <key>RunAtLoad</key> <true/> </dict> </plist>
Then: launchctl load ~/Library/LaunchAgents/com.habit-wallpaper.plist
Linux (cron)
crontab -e
# Add: */30 * * * * cd /path/to/habit-wallpaper && .venv/bin/python -m client.mainClient Config Reference
| Field | Description |
|---|---|
server_url |
Server URL (default: https://habits.timfarrelly.com) |
auth_token |
Your personal token from signup |
background_image |
Path to your wallpaper background photo |
panel_position |
top-right, top-left, bottom-right, or bottom-left |
panel_margin |
Pixels from screen edge (default: 40) |
Self-Hosting
Want to run your own server? You'll need:
- Python 3.12+ and uv
- A VPS (e.g., DigitalOcean droplet)
- A domain name pointed at your VPS
- A Resend account with a verified domain
Server Setup
-
Clone and install:
git clone https://github.com/timf34/habit-wallpaper.git cd habit-wallpaper uv sync --extra server -
Create
config.json:cp config.example.json config.json
Field Description server_urlYour server's URL (e.g., https://habits.yourdomain.com)resend_api_keyYour Resend API key email_fromSender email on your verified domain email_send_hourHour (0-23, UTC) to send daily emails -
Set up nginx + HTTPS:
sudo cp deploy/nginx-habits /etc/nginx/sites-available/habits sudo ln -s /etc/nginx/sites-available/habits /etc/nginx/sites-enabled/ # Edit /etc/nginx/sites-available/habits - set your domain sudo nginx -t && sudo systemctl reload nginx sudo certbot --nginx -d habits.yourdomain.com
-
Set up the systemd service:
sudo cp deploy/habit-wallpaper.service /etc/systemd/system/ # Edit the service file - set the correct paths sudo systemctl enable --now habit-wallpaper
-
Visit
https://habits.yourdomain.com/signupto create your account.
