Features
Everything Dirework can do for your co-working stream
Dirework is a self-hosted Pomodoro timer and task list built specifically for Twitch co-working and body-doubling streams. Here's everything it includes.
Pomodoro timer
A full-featured Pomodoro timer with automatic phase transitions.
- Configurable durations — Set Focus, Break, and Long break durations (in minutes) from the dashboard
- Long break intervals — Automatically triggers a long break every N cycles (configurable)
- Cycle tracking — Set the number of pomos per session (1-99)
- Automatic phase transitions — The timer moves through Starting, Focus, Break, and Long break on its own, ending in Done
- Pause and resume — Pause mid-session and resume exactly where you left off (remembers which phase you were in)
- Skip phase — Skip the current phase to advance to the next one
- 5-second starting countdown — Brief countdown before work begins so you can get ready
- Real-time OBS overlay — Circular or rounded-rectangle progress ring with countdown, phase label, and cycle count
Task list
A viewer-interactive task list managed through Twitch chat.
- Chat commands — Viewers add, edit, complete, and remove tasks with commands like
!task,!done,!edit,!remove - Multiple tasks per viewer — Each viewer can have multiple tasks, numbered for easy reference
- Task priority — Broadcaster tasks are pinned to the top, viewer tasks below in order
- Broadcaster controls — Clear all tasks, clear completed tasks, or remove a specific user's tasks
- Author grouping — Tasks are grouped by author, each with a styled card container showing the author's name and done/total count
- Real-time OBS overlay — Task list with usernames in Twitch chat colors, checkboxes, and strikethrough for completed tasks
- Auto-scroll — Toggleable infinite scroll animation when the list overflows the display area
Theme Center
A visual editor for customizing your overlays, available at /dashboard/styles.
- 6 built-in theme presets — Default, Ocean Depths, Liquid Glass Dark, Cozy Cottage, Minimal Light, Twitch Purple
- Timer overlay editor — Customize dimensions, background (color, opacity, border radius), progress ring (track/fill colors, width, gap), text (color, outline, font family), font sizes (label, time, cycle), and phase labels
- Task list overlay editor — Customize header, body, task items, done state, checkboxes, bullets, fonts, scroll toggle/speed, and more
- Live preview — See changes instantly in the preview panel with an animated timer countdown toggle
- Progress ring shapes — Choose between circle and rounded rectangle (squircle) ring styles
- Per-property control — Every color, size, opacity, font, and spacing value is individually configurable
Twitch chat bot
Connect a separate Twitch bot account to handle chat commands.
- Task commands —
!task,!done,!edit,!remove,!focus,!check,!next,!helpfor all viewers - Timer commands —
!timer start,!timer pause,!timer resume,!timer skip,!timer reset,!timer eta(mods only) - Moderator commands —
!clear all,!clear done,!clear @user(mods only) to clear all tasks, only completed tasks, or one viewer's tasks - Customizable bot messages — Configure response templates for every command
- Command aliases — Create custom aliases for any command
- Separate bot account — Uses its own Twitch account so messages come from the bot, not you
- Runs in your browser — The bot lives in a private browser page you add to OBS (or keep in a pinned tab); no always-on bot server to run
OBS overlays
Two transparent browser source overlays designed for OBS and streaming software.
- Timer overlay — Shows phase label, countdown, and cycle count with a configurable progress ring
- Auto-scaling timer — The timer overlay auto-scales to fill its OBS browser source while preserving aspect ratio, and while idle it shows a full preview (your configured work length and a full ring) instead of appearing blank, so you can position it during setup
- Task list overlay — Shows task list with viewer usernames, checkboxes, and auto-scroll
- Transparent backgrounds — Overlays render with no background, layering cleanly over your stream
- Private overlay URLs — Each overlay has its own private overlay URL; reset it if it ever leaks
- Fast updates — Overlays pick up changes within a few seconds, and the timer countdown ticks smoothly on the overlay itself
- Toggle previews — Dashboard previews can be toggled on/off to avoid slow page loads
Dashboard
A single-page control center for your stream.
- Timer controls — Start, pause, resume, skip, and stop the timer with inline duration settings and info tooltips
- Task manager — Add, complete, edit, and remove tasks directly from the dashboard
- Overlay previews — Live iframe previews of both overlays (toggleable)
- Overlay URLs — Copy overlay URLs for OBS with one click; regenerate tokens if needed. The app shows the recommended OBS browser-source dimensions: 320×320 for the timer and 360×720 for the task list
- Bot management — Connect, view status, and disconnect your bot account
- Time-of-day greetings — Personalized greetings based on the time of day
UI and design
- Focus Console design — a dark-first instrument-panel look: midnight-navy base, cerulean accent, and LED-style status chips
- Cerulean accent — a bright cyan-blue accent used sparingly on buttons, links, and active states
- Dark and light mode — Toggle between themes with a switch in the header
- Responsive layout — Works on desktop and mobile
- Glass-effect header — Frosted glass navbar with backdrop blur and saturation
Self-hosted and single-user
- Single-user per instance — Each streamer runs their own Dirework instance
- Full data ownership — Your data lives in your own Cloudflare account
- Serverless database — Cloudflare D1 (SQLite) — no database server to install or babysit
- Free to run — Deploys as two Cloudflare Workers on the free plan; no servers, no Docker
- Static docs site — Documentation builds as a static site, deployable separately
Tech stack
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router, React 19, React Compiler) |
| Styling | Tailwind CSS v4, shadcn/ui components |
| API | Hono + tRPC v11 with TanStack React Query |
| Auth | Better Auth with Twitch OAuth |
| Database | Cloudflare D1 (SQLite) with Drizzle ORM |
| Chat Bot | IRC-over-WebSocket in a token-gated browser page |
| Runtime | Cloudflare Workers (web via OpenNext) |
| Deploy | Alchemy (infrastructure-as-code) + GitHub Actions |
| Fonts | Montserrat (headings/timer) + IBM Plex Sans (body) + IBM Plex Mono (labels) |
| Docs | Fumadocs with Orama search |
| Build | Turborepo + Bun workspaces |