* docs(blog): add the 4.9 release post and its demo clips The 4.9 cycle changed how you authenticate, how chat handles a history that no longer fits, and where models and backends live in the UI. The release notes list every pull request; this post covers the three changes that alter day-to-day use, and leads with the auth one because it needs an action before upgrading. Two clips are recorded from a real session against a local-ai built from master with the live gallery loaded: model-lifecycle.mp4 walks the unified models and backends pages, import-model.mp4 shows the rebuilt import form. Both follow the clip conventions in .agents/preparing-a-release.md: h264, no audio track, 1000x562, under 30 seconds, and named after the feature so they stay reusable. Assisted-by: Claude Code:claude-opus-5 [Bash] [Playwright] Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * docs(blog): anti-slop pass over the 4.9 post Ran the post through the humanizer and no-ai-slop rules, calibrated against what-landed-in-localai-4-8.md. That post is the one #11324 left unchanged, so it sets the rate for this series. The draft ran denser than it on two constructions: "rather than" at 5.1 per thousand words against 3.5, and "instead of" at 3.1 against 1.6. Both are now at or below the 4.8 rate, 2.7 and 1.5, by rewriting seven of them as plain statements. Also cut: "keeping both cost a mode switch", a ledger metaphor for something that is not money, which is the tell #11324 removed eight times from the APEX post. "A follow-up fixed the thing that made that awkward", an unearned framing plus a colon reveal. "This release adds a different one: compress them", a second colon reveal. And "byte-structurally identical", a second exactness idiom in a post that already uses "byte-identical" where the precision carries weight. Five paragraphs opened with "Two things" or "Two details", so three of them start differently now. The summary listed three items, which is the rule of three; it lists four, like the 4.8 summary. Every figure, PR number, link and media reference is unchanged, checked by diffing them out of both revisions. Hugo builds clean and the rendered HTML has no em dashes. Assisted-by: Claude Code:claude-opus-5 [Bash] Signed-off-by: Ettore Di Giacinto <mudler@localai.io> --------- Signed-off-by: Ettore Di Giacinto <mudler@localai.io> Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
localai.io
The Hugo site served at the root of localai.io. The documentation is a separate
Hugo site in ../docs and is served under /docs/. CI builds both
and uploads them as a single GitHub Pages artifact
(see .github/workflows/gh-pages.yml).
Running locally
From the repository root:
make website # this site only, http://localhost:1313/
make docs # documentation only, http://localhost:1313/docs/
make site # build both, merged into website/public, exactly as CI does
make site-serve # the same merged build, served on http://localhost:8000
make website and make docs run hugo serve, so they pick up edits live but
only cover one site at a time. Use make site-serve when you need the cross
links between the two sites, or the redirects from the pre-split URLs, to work.
make site also runs .github/ci/gen-redirects.sh, which leaves a meta-refresh
page at every URL the documentation used to occupy before it moved under
/docs/. GitHub Pages has no server-side redirects, so those files are the only
thing keeping the old links alive.
Set SITE_BASE_URL to change the base URL the merged build is generated for
(default http://localhost:8000).