Build Headway
YESreplaces $29/mosaves $348/yrback to the verdict
A changelog page and a what's-new widget: Markdown entries rendered to a static page and RSS, a badge that knows the last entry a visitor saw, and a script that posts new entries to Slack. One of the smallest real products on the list and a good first build.
Before step 1
Everything below is assumed from the first step. Tick each one when you actually have it, not when you plan to.
- installfree
Why Everything in this build runs on it: the server, the scripts, the tests.
Get it Download the LTS installer from nodejs.org, or install with your package manager (brew install node, or nvm install 22). Restart the terminal afterwards. open ↗
Verify
node --version prints v22 or higher - installfree
Why Every step below is a command you type or a file you edit.
Get it VS Code (code.visualstudio.com), Cursor or Zed. Open a folder for the project and use the editor's built-in terminal. open ↗
Verify
You can open a folder and run a command in its terminal - installfree
Why History for your code, and the way most hosts deploy.
Get it Install from git-scm.com or with your package manager, then run git init in the project folder once it exists. open ↗
Verify
git --version prints a version - accountfree
Why The changelog is static files.
Get it Cloudflare Pages, Netlify, or a folder in your current site. open ↗
- API keyfree
Why Phase 4 posts new entries.
Get it api.slack.com/apps > Incoming Webhooks. open ↗
Data model
Create these before the first phase that stores anything. Changing a table later is the expensive kind of change.
changelog/YYYY-MM-DD-slug.md with frontmatter: title, date, category (new | improved | fixed), and the body.
Environment variables
These go in a .env file the app reads at startup. The pack's .env.example is this table as a file · copy it, never commit the filled-in version.
| Variable | Needed | Example | Where the value comes from |
|---|---|---|---|
SITE_URL | required | https://yourdomain.com/changelog | Public base of the changelog. |
SLACK_WEBHOOK_URLsecret | optional | https://hooks.slack.com/services/... | For the publish script. Empty disables it. |
The build, in order
The page
Entries rendered newest first with categories; a validating build; RSS.
- terminal
mkdir changelog && cd changelog && git init && npm init -y && npm pkg set type=module && npm install markdown-it@14 gray-matter@4 mkdir -p changelog public && cp .env.example .env
done when · tick each as it passesThe widget
Design
A timeline, category colours, dark mode, no style leaks.
done when · tick each as it passesDistribution
Deploy
One command from Markdown to live; README.
Files
README.md
done when · tick each as it passesPrivate changelogproduct builder
A customer-only changelog behind your app's login.
done when · tick each as it passes
That is the whole plan for Headway. What it deliberately does not cover is below · check the gaps before you call it a replacement.
- The hosted editor and reaction analytics.
- the hosted editor
- Slack and Twitter auto-posting
- reaction analytics
- private changelogs behind their auth
- Email digests of entries
- Reactions stored in a tiny endpoint
Need the files? The project pack on the verdict page hands your agent the whole brief · more dev tools.