Amit Jotwani

Amit Jotwani

Thoughts on code, workflows, and developer experience

January 21, 2026

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