Amit Jotwani

Amit Jotwani

Thoughts on code, workflows, and developer experience

January 13, 2026

Building Postbox: GitHub Issues, Flask, and Git

I wanted a simple way to publish to this blog. Not a CMS. Not a hosted platform. Just something small that fits how I already work.

So I built Postbox.


The Setup

Drafts are GitHub Issues in a private repo. That’s it.

I went with Issues because I didn’t want a database. Issues give me a title, Markdown body, labels — and an API I can hit from anywhere. They’re versioned, searchable, and free. Good enough.

On top of that, a small Flask app lets me edit drafts in a simple Markdown editor with live preview. It talks to the GitHub API, pulls the issue, lets me write, saves it back. Runs on DigitalOcean.

When something’s ready, I hit publish. That opens a PR against my Hugo site. Merge the PR, post goes live. Git is the source of truth.

No magic. Just pieces I understand.


What’s Working

Filing drafts from the terminal while I’m in the middle of something else — that’s the best part. No browser, no login, no context switch. Just file it and keep going.

The editing UI turned out nice. Live preview helps more than I expected. I can see what I’m writing without rebuilding the site locally.

And the publish flow is fast. Hit publish, PR opens, quick review, merge, done. Maybe thirty seconds. That speed makes me want to publish.


What’s Next

Image uploads work now. I can drop a screenshot into DigitalOcean Spaces from the terminal and get back a URL. No browser needed. That was missing before — glad it’s done.

Still want to add:

  • Email capture — send myself a draft when I’m away from the terminal
  • Managing published posts — right now Postbox only sees drafts

Not urgent. The core loop works.


The Goal

Publish more. Think about tooling less.

This post went through Postbox. So far, so good.

For more on the thinking behind all this, see Postbox: Filing Stories From Anywhere