Shipping is the easy part

You shipped it.
Nobody noticed.

Your git log is a receipt. Your users wanted an announcement. Changefeed turns a week of commits into release notes a human would finish reading — then sends them out to a public board, a feed, and an inbox, all from one publish.

Markdown in, markdown out · no lock-in, no pixel

What changes

The only diff you will
enjoy reviewing.

--- a/every-release-so-far+++ b/every-release-after-this
  • -a doc called "release notes v2.4 FINAL (2)"
  • -forty minutes on whether "performance improvements" is an entry
  • -a CHANGELOG.md that stops at 0.4.2, March 2023
  • -"wait, did that ship?" in #eng, every Tuesday
  • -users who find out from the migration guide
  • +four categories, one screen, publish
  • +a public board that is never out of date
  • +RSS and JSON, for people who will not give you their email
  • +a digest that goes out because you published, not because a cron fired
  • +users who already knew

By route

Six URLs.
That is the whole product.

No REST layer to learn, no client data library, no second way in. Every screen is a page you can bookmark and every change is a form you submit.

/projects/[slug]/releases/new

The editor

Added, Changed, Fixed, Removed. Type the line, pick the category, reorder it. The next version number is suggested from what you wrote. It stays a draft until you say otherwise.

/board/[slug]

The public board

Your release history at an address you can link from anywhere. Fast, searchable, readable on a phone, and carries no analytics pixel.

/projects/[slug]/import

Bring the old one

Paste a CHANGELOG.md and preview what it parsed before anything is written. Keep a Changelog headings, folded categories, nested bullets. Export hands it back.

/board/[slug]/feed.xml

Feeds, both flavours

RSS at feed.xml and JSON Feed at feed.json, generated from the same releases. Point a Slack integration or a reader at them and stop thinking about it.

/projects/[slug]/subscribers

The email digest

People subscribe from your board, confirm by email, and get the release when you hit publish. Unsubscribe is one link, no account, no funnel.

/projects/[slug]/settings

The rest of your team

Invite by email address — they don't need an account first. Owners and members, one live invitation per address, and a project always keeps at least one owner.

Objections

Yeah, but—

We already have a CHANGELOG.md.

Good, that is the hard part. Paste it into /import, check the preview, and it becomes your history here. Export gives the file back, so leaving costs nothing.

Nobody reads changelogs.

Nobody reads changelogs assembled from commit messages. That is a writing problem wearing a tooling costume, and this is the tool that makes the writing take nine minutes.

Another dashboard to keep up with?

No. You publish once and it leaves on its own — board, RSS, JSON, inbox. There is nothing here to check on a Monday.

How many projects do I get?

Three, on a new account — enough for most teams, and enough that the limit is never the reason a changelog goes unwritten. Need more? There is a box on your projects screen; tell us what you are shipping and we raise it by hand.

Who can see my projects?

Only the people you invite. A project you are not a member of does not show up, does not resolve, and cannot be confirmed to exist from the outside.

## [Unreleased]

Nothing under it yet. That is your next release, and it is about nine minutes of writing away from being something your users read on purpose.