Projects > Scheduler
Scheduler: Group availability coordinator with voice and natural language time entry.

Scheduler

Group availability coordinator with voice and natural language time entry.

Year
Apr 2026–Jun 2026
Status
Live
Platforms
Web · Cloudflare · PWA
Type
Web, AI/ML
Role
Sole developer

I got annoyed with Doodle one night, so I built my own. Drag or speak availability, and overlaps present themselves.

Scheduler is a group availability tool for finding a time that works for everyone. Create a project, share a link, and each person drags across a weekly grid to mark when they are free. The overlap, the times that work for the whole group, updates on its own as people fill in their availability. There are no accounts: you join by name into a project protected by a shared password.

Two features make entering your availability faster. You can type when you are free in plain words, like "weekday mornings next week," and it fills in the grid for you. You can also just say it out loud and have your speech turned into the same result. Either way you get a chance to check what it understood before it lands on the grid.

Scheduler runs entirely online, installs to a phone home screen like an app, and has a light and dark theme.

Features

  • Mark when you are free by dragging across a weekly grid, on desktop or phone
  • The times that work for the whole group appear on their own as people fill in their availability
  • Type your availability in plain words, like "Tuesday afternoons," and the grid fills itself in
  • Or just say it out loud: your speech becomes grid entries, with a chance to confirm before anything lands
  • One tap copies a tidy summary of the group's overlap, ready to paste into a chat
  • No accounts and no sign-ups: join by name, protected by a shared project password
  • A separate admin area handles creating and managing projects
  • Installs to a phone home screen like an app, with light and dark themes that follow your device

Under the hood

50Files
5,597Lines of code
70Commits
Apr 2026–Jun 2026Dev window
StackTypeScript · React 19 · React Router 7 · Tailwind CSS 4 · Hono · Cloudflare Workers · Cloudflare D1 (SQLite) · Anthropic Claude API · Cloudflare Workers AI (Whisper) · Vite 6
InfraCloudflare Pages + Workers (single wrangler deployment); D1 database; deployed at scheduler.echeng.com
Notable
  • One hook handles both mouse and touch drag-select: mouse starts on pointerdown, touch waits on a 300 ms long-press that cancels if the finger moves, so marking time never fights with normal page scrolling
  • Voice entry chains two models at the edge: Whisper on Workers AI transcribes the recording, Claude parses the transcript into structured time blocks, and the user confirms the result before it touches the grid
  • The language parser gets today's date and weekday injected into its prompt, so relative phrases like "next Tuesday" resolve to the correct calendar dates
  • Availability saves are diff-based: only dates changed since the last server state are written, so a big grid edits cheaply over a small payload
  • Overlap is computed by discretizing each day into 30-minute slots and merging contiguous runs with identical attendee sets, which keeps group views fast at any project size
  • The group view refreshes by lightweight 5-second polling that pauses whenever the tab is hidden, so near-live updates cost almost nothing in requests