Self-hosted · Twitch-native · Open source
Focus. Together.
Dirework is a self-hosted Pomodoro timer and shared task list for co-working and body-doubling streams. You run the timer, your Twitch chat runs the tasks, and OBS shows it all in real time.
Run it on your own box · One instance per streamer · No SaaS, no lock-in
Who it's for
One timer. A whole room.
Co-working streams turn a lonely grind into a shared one. Dirework gives the streamer, the viewers, and the self-hoster each what they need.
For streamers
Log in with Twitch, connect a bot account, drop two browser sources in OBS. Run focus sprints without touching alt-tab mid-stream.
Getting startedFor viewers
Add your own tasks straight from chat with !task, mark them !done, and watch your name show up on the shared overlay. Body-doubling that sticks.
Chat commandsFor self-hosters
One Docker image, one Postgres, one streamer per instance. Better Auth, tRPC, Drizzle. No accounts to manage but your own.
Deployment guideTwitch chat bot
Chat is the control panel.
Viewers run their own tasks with !task, !done, and !focus. Mods drive the timer with !timer start. Every command is aliasable, and replies are yours to reword.
OBS overlays
Transparent. Real-time. Zero refresh.
Two browser sources — a timer and a task list — with transparent backgrounds for OBS. Updates stream over Server-Sent Events, so a !done in chat lands on screen instantly. Pick a circle or macOS-style squircle ring.
Theme Center
Eleven themes. Every pixel yours.
Start from a preset, then tune every color, font, size, and corner radius in a live editor. Or build the look of your whole channel from scratch.
What's in the box
Everything a focus stream needs.
Pomodoro timer
Configurable work, break, and long-break durations with automatic phase transitions and cycle tracking.
Twitch chat bot
Viewers manage tasks and mods drive the timer through chat — !task, !done, !timer, and friends.
OBS overlays
Transparent browser sources with real-time SSE updates. Circle or squircle progress rings.
Theme Center
Visual style editor with 11 presets. Customize every color, font, size, and spacing for both overlays.
Honest comparison
Why self-host Dirework?
Hosted task widgets are convenient until they're not. Dirework trades a one-time setup for full ownership.
| Feature | Dirework | Hosted task widgets | Generic timer bots |
|---|---|---|---|
| Pomodoro timer + overlay | |||
| Per-viewer task list | |||
| Real-time (no polling) | |||
| Self-hosted / own your data | |||
| Fully themeable overlays | |||
| Open source |
Partial means "depends on the tool or your plan." See the full feature breakdown.
For self-hosters & devs
One image. One database.
Yours to fork.
A Next.js app, a tRPC API, and Drizzle on Postgres. Deploy with the Dockerfile, set six env vars, and you're live.
QUICK START
git clone https://github.com/mrdemonwolf/dirework.git cd dirework bun install bun run db:start && bun run db:push bun run dev # web on :3001, docs on :4000
THE STACK
- Next.js 16 (App Router, React 19, React Compiler)
- tRPC v11 with SSE subscriptions for overlays
- Better Auth — Twitch OAuth, 30-day sessions
- Drizzle ORM on PostgreSQL 17
- Docker + Coolify, output: standalone
Questions, answered
Anything else?
Short answers here. Longer ones live in the docs.
Do I need to host it myself?
Does it work with anything other than Twitch?
Can viewers really edit the task list?
How do the overlays update so fast?
Is it really free?
More questions? Ask in Discord.
Start the timer.
Bring the whole chat.
Self-hosted · Open source · Built for co-working streams