Hello, world — how this blog gets published
Welcome! This first post doubles as documentation: it explains how every article on this site goes from an idea to a live page. There is no admin panel and no database. Every post is a Markdown file in a Git repository, and the repository is the only way anything changes.
To start a new post, run npm run new-post "My Post Title". The script creates src/content/posts/my-post-title.md with the front matter already filled in: a title, a placeholder description, today’s date, an empty list of tags and draft: true. Drafts are visible when you run npm run dev but are never included in a production build, so you can commit work in progress safely.
When the post is ready, edit the description, add a few tags, set draft: false and open a pull request. Continuous integration checks the front matter against a schema, builds the whole site, checks internal links and runs Lighthouse. If anything is wrong, the pull request turns red and nothing is deployed.
Merging the pull request triggers the deploy workflow. It builds the site, uploads it to a private S3 bucket and invalidates the CloudFront cache. A few minutes later the article is live, listed on the home page and its tags, and included in the RSS feed and the sitemap.
Want to schedule a post? Set pubDate to a future date and merge it as normal. Future-dated posts are excluded from the build until their date arrives (dates are interpreted as midnight UTC), and a daily scheduled deploy publishes them automatically.
Made a mistake? Revert the pull request. Because content, configuration and infrastructure all live in Git, reverting the commit and letting the pipeline run again is the rollback plan.