Most to-do apps show you a list. TaskDial shows you your day as a clock: tasks are coloured arcs, so you can see at a glance whether your plan is realistic, where the gaps are, and where you're overloading yourself.
There's a built-in Pomodoro timer too, so focused work and planning live in the same place.
Try it at taskdial.dynamicskillset.com — invite-only while we're testing.
- Clock face — your day as a visual ring, not a list; tasks are arcs you can see and move
- Pomodoro timer — 25-minute focus sessions with short breaks and a longer break every four cycles; sounds and notifications when each phase ends
- Calendar feeds — connect up to three iCal feeds (Google Calendar, Proton Calendar, etc.) and see your meetings on the clock with a configurable gap before the next task
- Task management — add, edit, reorder by dragging, reschedule to another day, set a fixed start time, mark as important, add tags, set up repeating tasks
- Backlog — a place for tasks that don't belong to any particular day yet; move them to today when you're ready
- Undo/redo — change your mind freely; undo or redo any action
- Works offline — tasks save locally first and sync when you're back online; installable as a PWA
- Five colour schemes — Berry (default), Nord, Aurora, Frost, Evergreen
- Accessible — keyboard navigable and screen-reader friendly
TaskDial is currently in testing, so you'll need an invite code to sign up. Once you have one:
- Go to taskdial.dynamicskillset.com
- Click Create account and enter your email, a password (12 characters or more), and your invite code
- Install it for the best experience: on Android and iOS, add it to your home screen; on Mac and Linux, use Chrome or Edge and choose "Install app"
TaskDial encrypts your task content (titles, tags, and notes) on your device before it reaches the server. The encryption key is derived from your password and never leaves your browser. iCal calendar URLs are stored only in your browser and are never sent to the server. The server sees only ciphertext — not your actual task data. It uses no third-party trackers, shares no data, and does not use your data to train AI models. Full details are in the Privacy Policy.
TaskDial uses PrideVer: PROUD.DEFAULT.SHAME
- PROUD — bump when the release is something to be proud of
- DEFAULT — bump for routine, functional releases
- SHAME — bump when fixing embarrassing bugs
Pausing the Pomodoro timer now resets it — interrupting a Pomodoro voids it by design. A note below the timer explains this and links to the Pomodoro Technique website.
Auto-break scheduling: enable it in Settings → Schedule and TaskDial will automatically insert a break after a configurable stretch of work (default: 10-minute break every 90 minutes). Auto-breaks appear in the task list and on the clock but can't be edited. Any manual break you add resets the counter.
"Next work day" button in the reschedule popover when tomorrow is a non-working day. Batch "move unfinished" also targets the next work day when tomorrow is a weekend or day off. Passive hint and one-time nudge to help new users find advanced mode.
Light mode is much easier to read: labels, placeholders, toggles, and buttons that were too faint are now clearly visible. Pomodoro break colours look right in light mode too. Several buttons are easier to tap on mobile. The welcome tour highlight now glides between steps instead of jumping.
Enabling Advanced mode for the first time now turns on all its features in one go. Task menu hover states now visible.
The backlog no longer appears empty on mobile during a sync.
Task menu no longer hidden behind other items on break tasks. Duration presets moved to Settings → Schedule and redesigned as editable chips. Duplicate settings options removed.
Editing breaks now saves correctly. Task menu no longer cut off on mobile. Duration presets are now customisable. Task colours now match their tag consistently across the list and clock.
- Flash when time's up: overrunning task arcs pulse on the clock; a toast lets you extend by 15 minutes, mark done, or dismiss. Browser notification fires once per task.
- Onboarding walkthrough: five-step guided tour for new users, with a live demo clock. Replayable from Settings → Account.
See CHANGELOG.md for the full release history.
Self-hosting and development
TaskDial is designed to be self-hosted. You run one server for yourself and anyone you invite.
- Node.js 20+
- A server with a domain and HTTPS (Caddy works well)
1. Clone the repo
git clone https://github.com/dynamicskillset/TaskDial
cd TaskDial2. Configure the server
cd server
cp .env.example .envEdit .env:
JWT_SECRET= # generate: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
APP_ORIGIN= # your frontend URL, e.g. https://taskdial.example.com
OWNER_EMAIL= # your email address
PORT=3001
NODE_ENV=production
3. Build and start the server
npm install
npm run build
node dist/index.jsOn first run the server creates your owner account and prints a one-time password to the console. Save it — it won't be shown again.
4. Build the frontend
cd ../chronotasker-app
cp .env.production.example .env.production
# Edit VITE_API_URL if your API is on a different domain
npm install
npm run build
# Serve the dist/ folder with Caddy, nginx, or any static file server5. Caddy example
your-domain.com {
handle /api/* {
reverse_proxy localhost:3001
}
handle {
root * /path/to/chronotasker-app/dist
try_files {path} /index.html
file_server
}
encode gzip
header {
Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; font-src 'self' data:; frame-ancestors 'none'"
X-Content-Type-Options nosniff
X-Frame-Options DENY
}
}6. Inviting people
Log in with your owner account and go to /admin. From there you can generate invite codes to share.
# Backend
cd server && npm run dev
# Frontend (separate terminal)
cd chronotasker-app && npm run devThe frontend dev server runs on http://localhost:5173. The API runs on port 3001.
cd chronotasker-app && npm test| Layer | Technology |
|---|---|
| Frontend | Vite, React, TypeScript, PWA (Workbox) |
| Backend | Express, better-sqlite3, TypeScript |
| Auth | JWT (httpOnly cookies), bcrypt, rotating refresh tokens |
| Deploy | GitHub Actions → VPS, Caddy reverse proxy, pm2 |
