A personal desktop dashboard that pulls your daily workflow into one native window -- ClickUp tasks, Google Calendar, ambient sounds, an embedded terminal, and a Claude-powered focus picker that tells you what to work on next. Built with Tauri 2 + SvelteKit.
The brain is the Now / Next widget (the task paralysis killer): it reads your tasks, looks at today's calendar, and picks the single most important thing to do right now. Re-picks automatically as you complete tasks.
Designed to be personalized -- plug in your own ClickUp, calendar, and Claude account. Expect a few rough edges around setup. PRs welcome, and open to suggestions since this will be a ongoing project!
The
claude -psubprocess this dashboard uses stops being covered by Pro / Max subscriptions on June 15th 2026. After that date you'll need an Anthropic API key (setANTHROPIC_API_KEY). See AI cost below for ways to reduce or disable it.
- Now / Next -- Claude picks 1 "Now" + up to 2 "Next" tasks from your daily list. Calendar-aware
- Today Tasks -- Live ClickUp daily list. Check off, edit, delete, open in ClickUp
- Calendar -- Day / Week / Month / List views via
gcalcli. Logical day rolls over at 4 am - Start Day -- AI-driven morning routine: refreshes stats, considers calendar, moves area-list tasks into Daily To-Do
- TaskStats -- 14-day completion chart + today's done list for motivation
- Ambience -- 4 ambient sound loops, Spotify playback, animated canvas FX, and an embedded PTY terminal
- Notepad -- Auto-saving scratchpad
- Quick Capture (Ctrl+N) -- Add a ClickUp task without leaving the dashboard
- Action logging -- Configurable destination: ClickUp doc, local Markdown file, or disabled
- 8 themes -- light, dark, space, nord, forest, vintage, slate, cloudy. SVG-animated backgrounds for space / forest / cloudy
| Tool | Why | Setup |
|---|---|---|
| Rust + Tauri | Desktop shell | Install Rust toolchain + WebView2 (Windows) |
| Node.js 18+ | Frontend | node -v reports 18.x or newer |
| Python 3.10+ | Helper scripts | On PATH |
| Claude Code | Now/Next + Start Day | claude on PATH, logged in. After June 15 2026: also set ANTHROPIC_API_KEY |
| gcalcli | Calendar | pip install gcalcli && gcalcli init |
| ClickUp account | Tasks | Generate a personal API token (Settings → Apps) |
| ffmpeg | Sound downloads | On PATH (winget / brew / distro package) |
| Spotify Developer app (optional) | Spotify in Ambience | Redirect URI: http://127.0.0.1:8888/callback |
git clone https://github.com/pycoder49/deskflow.git
cd deskflow
npm install
pip install -r requirements.txt
gcalcli init # OAuth your Google account
claude # log in to Claude Code if you haven't
cp .env.example .env # then fill in CLICKUP_TOKEN (Spotify keys optional)
python scripts/setup.py # interactive wizard
npm run tauri devThe wizard discovers your ClickUp workspace, asks which lists are your "daily truth" and "area" lists, picks a logging destination, finds your personal calendar via gcalcli list, and downloads the ambient sound clips. Re-run anytime your setup changes.
Spotify: after first launch, click Connect Spotify inside the Ambience widget to grant your account access.
Written by the setup wizard. Gitignored. Hand-editable.
{
"clickup": {
"workspace_id": "...",
"daily_list_id": "...",
"areas": [{ "list_id": "...", "label": "School", "slug": "school" }]
},
"calendar": { "personal_email": "you@example.com" },
"commands": { "start_day_skill": "start-day" },
"logging": {
"mode": "local_file",
"clickup_logs_folder_id": "",
"local_file_path": "logs/actions.md"
},
"ambience": {
"sounds": {
"cafe": "https://www.youtube.com/watch?v=...",
"rain": "https://www.youtube.com/watch?v=...",
"medieval": "https://www.youtube.com/watch?v=...",
"cyberpunk": "https://www.youtube.com/watch?v=..."
}
}
}commands.start_day_skill-- Claude Code skill the Start Day button runs. Defaultstart-dayships with the repo. Set to a custom skill name to override.logging.mode--clickup_doc,local_file, ornone. Completion counts for the chart record separately via Start Day and always work.
Two paths invoke Claude:
- Now / Next auto-fires on dashboard open and when an in-focus task changes. ~5-10 calls / day (number of tasks you complete), ~500 input tokens each.
- Start Day runs once per logical day when clicked. (state is stored, so subsequent clicks will not trigger the workflow).
If you wish to remove the AI aspect of planning, you can:
- Set
commands.start_day_skillto a no-AI custom skill that just runspython scripts/start_day.py→ Start Day costs zero tokens. - Comment out the
NowNextmount insrc/routes/+page.svelteto disable the focus picker entirely.
Track spending at console.anthropic.com.
src/
routes/ SvelteKit pages
lib/widgets/ Per-widget .svelte files
lib/services/ TypeScript invoke() wrappers
lib/stores/ Svelte stores (theme, refresh, ambience, config)
src-tauri/src/ Rust backend modules
scripts/ Setup wizard, action logger, sound downloader
.claude/skills/ Shipped Claude Code skills (e.g. start-day)
INDEX.md has a one-liner for every source file.
Calendar shows nothing. Run gcalcli agenda in your terminal. If that works, make sure calendar.personal_email in os-config.json exactly matches an entry from gcalcli list.
Now / Next won't load. Run claude -p "hi". If that fails, log into Claude Code (claude interactively first).
Calendar crashes on emoji (Windows). Upgrade gcalcli: pip install --upgrade gcalcli.
Spotify auth fails. Redirect URI must be exactly http://127.0.0.1:8888/callback — no trailing slash, no localhost.
Start Day button does nothing. Verify commands.start_day_skill in os-config.json and that claude -p "/<that-skill>" works when run from the project root.
TaskStats chart frozen on demo data. The chart populates from Start Day clicks (the Rust spawn runs scripts/start_day.py --bootstrap first, which records yesterday + backfills any missing days in the last 14 via direct ClickUp queries). Click Start Day each morning.
Things I want to build next — contributions welcome.
Machine learning & behavioral modeling
- Task completion time prediction — track how long tasks actually take vs. estimates per category; surface daily capacity warnings before you overcommit
- Behavioral pattern learning — learn when you complete certain types of tasks (time of day, day of week, energy state); let the AI picker factor this into its recommendations
- Smart deferrals — instead of bulk-moving every area task at Start Day, predict which ones you'll realistically touch based on historical completion patterns
Workflow features
- Focus session tracking — automatic Pomodoro-style sessions tied to the Now task; break suggestions based on actual session length; logged to stats
- Weekly AI retrospective — end-of-week summary of what got done, what kept getting deferred and why, and a suggested focus for next week
- Natural language task capture — parse "remind me to do X after my 3pm" and schedule it without opening ClickUp
- Cross-device sync — lightweight mobile companion app for capturing tasks on the go
Integrations
- GitHub (open PRs, review requests surfaced as tasks)
- Notion / Linear as alternative task backends
- More calendar providers (Outlook, CalDAV)
AGPL-3.0 — free to use, modify, and share. If you distribute a modified version or build a product on top of this, you must open-source your changes under the same license.