.agents/preparing-a-release.md
A release is not finished when the tag is pushed. The GitHub release, the blog post and the demo clips ship together, because the changelog says what moved and the post and the clips are what make anyone care.
RELEASE_NOTES_vX.Y.Z.md at the repository root, in the house style: what changed, why it matters, PR numbers so people can read the diffs.website/content/blog/. One post per release, front matter with title, date, author, category: "Release", tags, summary and extracss: ["blog.css"]. Cover the two or three changes that alter what a user does day to day, not the whole changelog, and link the PR numbers. See website/content/blog/what-landed-in-localai-4-8.md for the shape.website/static/media/, reference it from the blog post, and reuse it on the marketing pages where it fits.A release without a post and without clips is incomplete, in the same way a user-facing code change without a docs update is incomplete.
vllm-race.mp4, not v4-8-demo.mp4), so it stays reusable once the release is old.muted loop playsinline preload="none" and a data-lazy attribute, which the site's IntersectionObserver uses to play and pause them on scroll. Follow that pattern for anything you add.Label the PRs, generate and edit the release notes, cut the draft release, record the clips while the branch is still fresh in your head, then write the post against the notes and the clips. Publishing the release and merging the post should happen on the same day.
The creating-localai-releases skill drives steps 1 to 3 and captures the React UI screenshots that go into the notes.