Why this exists
My tasks lived in five places: a notes app, chat messages to myself, two abandoned to-do apps, & whatever paper was on the desk. Every tool I tried wanted an account, a sync service, or a subscription before it would let me type a first task. Then it wanted me to stay, so getting my own lists back out came down to whatever its exporter felt like giving me.
So I set one rule for this build: the whole app has to fit in a single file you can open from disk. No database, no server, no framework, no npm install. Today's build is v1.5.61, 481,969 bytes of native HTML, CSS & JavaScript.
Your data never leaves the browser. Tasks persist in local storage, export losslessly to JSON, & copy out as indented Markdown that pastes clean into Obsidian, Notion, or any text editor. There's no telemetry to switch off because the file doesn't contain any.
The name is a construction term. When a building is nearly done, the contractor walks the site & writes the punch list: every unfinished fix, one line each, worked down to zero before handover. I came across the format on a project in that world & liked what it does to scope: the job isn't done until the list is empty. Same idea here, minus the drywall.
What the file does
Nested outline
Enter adds a task, Tab indents, Alt+arrows move anything anywhere. Undo holds your last 40 board actions.
Markdown clipboard
Ctrl+C turns any selection into indented Markdown. Collapsed groups copy in full, children included. Pasting Markdown creates tasks.
- [ ] Ship the invoice - [x] Attach June hours
Linked copies
One task, two places. Edit or complete either copy & both update. A shortcut jumps to the original instead.
Completed & Trash
Done tasks hide on your schedule: immediately, after a period, or never. Deletes land in a restorable Trash by default.
Day timeline
Optional day view from 06:00 to midnight with a current-time line. Drag to reschedule in 15-minute steps.
Focus mode
One task full-screen with a running timer. Time accumulates per task & reads out against your plan.
Works on your phone
Drawer sidebar, 44 px touch targets, long-press drag. Light & dark themes with per-group color tints in both.
Your data, portable
Lossless JSON export & import. Features you don't enable render zero buttons; the default screen stays clean.
What's planned
Offline stays the default. The file makes zero requests until you switch something on. Three opt-in features have shipped since launch: GitHub sync, which points your phone & laptop at one private repo so every change lands as a commit; signed exports, so a board you hand to someone proves who sent it; & an assets store that keeps pasted images out of the main file & slim in sync. It still can't remind you of anything while it's closed. What I want next, in rough order:
- Sync for people who don't want a GitHub account or a token.
- Sharing a section of your board with someone else, linked so both sides stay current, unlinkable at any time.
- Identity without accounts: hashed usernames that are unique without a signup form.
- Optional encryption for anything that ever leaves your machine.
- Deeper reminders, scheduling & time tracking, kept invisible until you switch them on.
No dates. It ships when it works. Every build is logged in the build notes, newest first, with what changed & how to use it. If you want one of these first, or you want something that isn't on the list, write me:
Get the file & the next build
I'm Evren. I built Punchlist for myself because my tasks were spread across five apps & every one of them wanted an account before it would let me type. It's free & it stays free. If it earns a place in your day, share the file with a friend; that's the whole ask.
This page sets no cookies & loads nothing from third parties. Your address lands in my own personal inbox & nowhere else.