An Akiflow-inspired, local-first time-blocking planner built for ADHD brains.
Plan your day by dragging tasks into your calendar — no backend, no account required. Your data lives on your device.
- Local-first — data stored in local SQLite, never sent to a server; works fully offline
- Device sync — opt-in, end-to-end encrypted sync across devices via Evolu relay
- Drag & drop — drag tasks from inbox onto the calendar, resize blocks, drag back to unschedule
- Time-blocking calendar — week view and 2-day (today/tomorrow) dashboard view
- Inbox — capture tasks and quick notes (
//prefix) in under 3 seconds - Transition buffers — configurable breathing room between blocks
- Keyboard navigation — operate the full UI without a mouse
- Dark mode — warm paper-industrial aesthetic, light and dark
- Notifications — optional reminders before blocks end
- Priority system — color-coded none / low / medium / high
Dashboard view — today and tomorrow side by side
Week view — full 7-day calendar
| Layer | Technology |
|---|---|
| UI | React + TypeScript |
| Build | Vite |
| Local DB + sync | Evolu (SQLite + CRDT, E2E encrypted) |
| Styling | Tailwind CSS |
No backend is required. Everything runs in the browser.
- Node.js 18+
- npm, yarn, or pnpm
git clone https://github.com/nktrjsk/flowblock.git
cd flowblock
npm install
npm run devOpen https://localhost:5173.
The app requires a secure context (HTTPS or localhost). Serving over plain HTTP will break local storage and calendar sync features.
npm run buildOutput goes to dist/. Deploy to any static host — GitHub Pages, Netlify, Vercel, etc.
npm run build
# push dist/ to gh-pages branch, or use a GitHub Actions workflowLive demo: https://nktrjsk.github.io/flowblock
| Action | Shortcut |
|---|---|
| Save time block | Ctrl+Enter |
| Delete time block | Del |
| Close popover / cancel | Escape |
FlowBlock uses Evolu for optional device sync. Sync is:
- End-to-end encrypted — the relay server sees only ciphertext
- CRDT-based — conflicts resolve automatically, no merge dialogs
- Opt-in — if you never set up sync, your data never leaves your device
To sync, open Settings → Identity and copy your owner key to the second device.
Note: This is an experimental, unreliable feature. Both ICS and CalDAV require a CORS proxy to work in the browser — direct fetches are blocked by browser security policy. Set up a proxy in Settings → Advanced.
You can overlay read-only events from external calendars:
- Open Settings → Calendars
- Add an ICS feed URL or a CalDAV server
- Events appear in the calendar as dashed blocks beneath your time blocks
- CalDAV write — sync time blocks back to CalDAV
- Projects — group tasks by project with rotational weight
- Energy capacity bar — plan by energy, not just time
- Routines — recurring time block templates
- Review mode — weekly retrospective view
- Smart suggestions — AI-assisted scheduling
WTFPL — do what the fuck you want.