ToDoz User Guide & Self-Hosting Manual
Everything you need to master ToDoz: deterministic natural-language parsing, Boolean filter queries, deploying your own sovereign sync server, and connecting Google Calendar.
Quick Add Syntax
Type natural one-line commands. ToDoz deterministically tokenizes recognized keywords in under 5ms, highlights them in real-time, and strips them cleanly from the final title.
| Keyword / Pattern | Parsed Meaning | Example |
|---|---|---|
| tomorrow, next week | Relative calendar date target | Submit report tomorrow |
| mon, next fri | Closest target weekday or next week's weekday | Team sync next fri |
| at 4pm, 16:30, noon | Exact schedule time of day | Doctor appointment at 16:30 |
| 45m, 1.5h, 2h | Task duration (drawn as a block in time-grid) | Deep work 2h at 9am |
| p1, p2, p3, p4 | Priority level (p1 is urgent / red) | Fix database leak p1 |
| #Project, #"Two words" | Destination project folder | Grade thesis #Teaching |
| /Section | Specific section inside the project | Update notes #AI /Paper |
| %label or @label | Attach one or multiple tags/labels | Review pull request %Code |
| {oct 25} | Hard deadline (independent of planned due date) | Grant application {nov 15} |
| !30m before, !14:00 | Exact notification reminder | Catch flight !2h before |
Mathematical Recurrence Engine
ToDoz supports standard schedules, multi-day recurring intervals, and completion-based rolling cycles.
| Recurrence Command | Behavior & Scheduling Rule |
|---|---|
| every day, every weekday | Scheduled daily or Monday through Friday. |
| every other week | Interval repetition (also: every 3 days, every quarter). |
| every mon, wed, fri at 9am | Multi-day repeating time slots. |
| every 1st wed, every last fri | Nth weekday of each month. |
| every last workday | Smart business-day calendar scheduling (excludes weekends). |
| every! 3 days or after 10 days | Completion-Relative Recurrence: Next due date is calculated strictly from the day you complete it, never piling up overdue backlog. |
| every day until dec 31 | Bounded recurrence with fixed expiration date. |
Boolean Filters & Smart Views
Create high-powered custom views using Boolean operators: & (AND), | (OR), ! (NOT), and parentheses.
# Priority Work for Today or Overdue
(today | overdue) & #Research & p1
# High Priority Tasks Not in Inbox
!#inbox & (p1 | p2) & !subtask
# Multi-List Split View (Comma separated)
p1 & overdue, p4 & today, #Personal & 7 days
| Filter Term | Description | Example |
|---|---|---|
| today, overdue | Tasks due today or past their scheduled time | today & p1 |
| 7 days | Tasks scheduled in the next 7 days + overdue | 7 days & #Teaching |
| ##Project | Matches project AND all its nested sub-projects | ##SmartGate & overdue |
| %label* | Wildcard tag search | %dev* & !completed |
| due before: fri | Date range boundaries (also due after:) |
due before: next monday |
| search: keyword | Full-text search in title, notes, and labels | search: dataset & p1 |
Calendar Views & Time-Grid
ToDoz features a responsive Google Calendar–style time grid rendered in four intuitive modes: Day, 3 Days, Week, and Month.
🖱️ Drag & Drop Scheduling
Drag any task block to another hour or another day. On touch screens, long-press to pick up and drop.
↔️ Bottom-Edge Duration
Grab the bottom border of any task block and drag downward to expand duration in 15-minute increments.
⌨️ Hotkey Navigation
Press D for Day, 3 for 3 Days, W for Week, M for Month, and G then C to open Calendar.
Self-Hosting Your Sync Server
Deploy your private ToDoz sync hub in minutes. Self-healing with Docker Compose, automated TLS certificates via Caddy, and zero data telemetry.
The easiest production setup. Caddy reverse-proxies the backend, terminates SSL, serves the web app at /app, and serves binary downloads.
todoz.yourdomain.com) to your server's IP address.git clone https://github.com/polla-fattah/ToDoz.git /opt/todoz
cd /opt/todoz/server/deploy
# Create your environment file
cat << 'EOF' > .env
TASKFLOW_DOMAIN=todoz.yourdomain.com
TASKFLOW_PUBLIC_URL=https://todoz.yourdomain.com
EOF
docker compose --profile public up -d --build
# Add your username
docker compose exec taskflow taskflow_server user add "YourName"
# Generate a 10-minute pairing code for your phone, PC, or browser
docker compose exec taskflow taskflow_server invite "YourName"
For servers running Debian or Ubuntu with native systemd:
# Run automated installer
sudo TASKFLOW_DOMAIN=todoz.yourdomain.com bash server/deploy/install.sh
# Add user and invite
TF="sudo -u taskflow TASKFLOW_DB=/var/lib/taskflow/taskflow.sqlite /opt/taskflow/bin/taskflow_server"
$TF user add "YourName"
$TF invite "YourName"
Connecting Apps to Your Server
Pair Windows Desktop, Android, and Web Browser clients with zero password leakage.
2. Go to Settings $\rightarrow$ Sync.
3. Enter your server URL (e.g.
https://todoz.example.com or your own self-hosted domain).4. Enter the one-time code (e.g.
ABCD-2345) generated by invite <name>.5. Enter a device name (e.g. "Laptop" or "Pixel Phone").
6. Tap Connect. The server returns a cryptographic token and syncs all tasks immediately.
https://todoz.example.com/app in your web browser.2. Enter the one-time code from the server admin or generated in your ToDoz app under Settings $\rightarrow$ Sync.
3. The web app instantly signs in and caches nothing locally for maximum privacy.
Google Calendar Sync Guide
Keep your schedule synchronized with Google Calendar across all your personal devices.
/app), open Settings $\rightarrow$ Calendar and integrations $\rightarrow$ Calendar feed (iCal). Turn it on and copy your unique address:
https://todoz.example.com/ical/<your-private-token>.ics
2. In the left sidebar, click the $+$ sign next to "Other calendars".
3. Select "From URL".
4. Paste your
https://todoz.example.com/ical/...ics URL and click Add calendar.5. Google will now automatically display all your ToDoz tasks with dates and durations.
Enables two-way synchronization: tasks added in ToDoz appear in a dedicated "ToDoz" calendar in Google, and events modified in Google update your tasks.
2. Navigate to APIs & Services $\rightarrow$ Library, search for Google Calendar API and click Enable.
3. Under OAuth consent screen, select External, set app name to
ToDoz, and add your Google account under Test Users.4. Go to Credentials $\rightarrow$ Create Credentials $\rightarrow$ OAuth client ID.
5. Select Web application.
6. Under Authorized redirect URIs, add your server's callback address:
https://todoz.example.com/google/callback
/opt/todoz/server/deploy/.env:TASKFLOW_PUBLIC_URL=https://todoz.example.com
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret
cd /opt/todoz/server/deploy && docker compose up -d
Sign in with your Google account. A dedicated ToDoz calendar will be created automatically in your Google account!
REST API & Inbound Webhooks
Integrate ToDoz with external automation tools (cURL, Python scripts, Raycast, GitHub Actions, Home Assistant).
Generate an API token in Settings $\rightarrow$ Calendar and integrations $\rightarrow$ API access, then send authenticated REST requests:
# Create a task via Quick Add syntax over REST API
curl -X POST https://todoz.example.com/api/quick-add \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"line": "Submit publication revisions tomorrow 4pm p1 #Research"}'