Postbox: Filing Stories From Anywhere
Lately, I’ve been building a lot of small things. Experiments, tools, half-ideas—most of them start and live in the terminal.
When I figure something out, or stumble into a new workflow, or have a thought I don’t want to lose, my instinct is to open a Markdown file and start writing. Not a polished blog post. Just… writing it down while it’s still fresh.
In journalistic terms, I think of this as filing a story.
I don’t want to decide where it lives, when it gets published, or how polished it is. I just want it out of my head and somewhere safe so I can come back to it later.
That’s where Postbox came from.
Postbox is a very small system that sits quietly behind my workflow. When I “file a story,” it takes a Markdown file and does a few boring but useful things:
- It creates a pull request in a private articles repo on GitHub
- That draft then shows up in a tiny, no-frills app built with Flask that just lists everything I’ve written but haven’t published yeormatting decisions. Just a queue of drafts waiting patiently.
The important part is that all of this starts from places I’m already working in — my editor, my IDE, or the terminal. There’s no separate “writing mode.”
Two Small Flows
To keep this frictionless, I ended up with two simple flows.
1. Filing the story
When I say “file story” and point it at a Markdown file, the draft gets filed. Under the hood, this uses the GitHub MCP server to create the pull request.
I could turn this into a standalone skill as well, but for now the MCP server does exactly what I need. It’s reliable, already wired into my workflow, and removes a whole category of glue code I don’t want to maintain.
2. Uploading screenshots without breaking flow
This was the missing piece.
When I’m writing, I often want to include screenshots. Traditionally, that means context switching: open a browser, upload an image, copy a URL, come back to the editor.
I wanted to stay in the same flow.
So now Ihis story"
- and also “upload this image”
That second command uploads the image to a bucket on DigitalOcean Spaces and immediately gives me back a public URL that I can drop straight into Markdown.
No browser. No UI. No interruption.
What This Is (and Isn’t)
This isn’t about publishing faster.
It’s about capturing things while they’re still alive — ideas, workflows, half-formed thoughts — and filing them somewhere reliable with as little ceremony as possible.
Postbox gives me a way to move from thinking → writing → filed draft without leaving the tools I already live in. Everything else — editing, polishing, deciding what’s worth sharing — can happen later.
If you’re interested in how the image upload part works — the Spaces setup, the command, and the bits that make it click — I’ve written that up separately here: → Setup Guide: Upload to Spaces Skill
For the technical details on how Postbox is built, see → Building Postbox: GitHub Issues, Flask, and Git