Skip to content

feat(website): split the site, move docs to /docs, add a landing page - #11243

Merged
mudler merged 2 commits into
masterfrom
feat/website-split-docs
Jul 31, 2026
Merged

feat(website): split the site, move docs to /docs, add a landing page#11243
mudler merged 2 commits into
masterfrom
feat/website-split-docs

Conversation

@localai-bot

Copy link
Copy Markdown
Collaborator

What this does

Splits localai.io into two sites: a marketing site at the root, and the documentation moved under /docs/.

The Hugo docs site has always been localai.io, which left nowhere to explain what LocalAI is or to show what the team builds. This adds that page, and gives the native engines, the APEX quantization work and a blog somewhere to live.

Docs move to /docs/

docs/ keeps its content tree and its Relearn theme and now builds with baseURL <root>/docs/. Its _index.md, which held a hand written marketing landing page, becomes a real documentation home.

Every previously published URL keeps working. GitHub Pages has no server side rewrites, so .github/ci/gen-redirects.sh walks the built docs output and leaves a meta refresh, a canonical link and a noindex at each old root path. 214 redirect stubs are generated. Two details that matter:

  • It covers bare .html files, not only directory indexes, which is what keeps /gallery.html working.
  • It never overwrites a path the marketing site already owns, so /, /engines/ and /blog/ survive.

docs/static/css/custom.css is deleted along with the old landing CSS. Relearn auto loads custom.css on every page and its only content was landing page styling plus a rule hiding the home h1, which would have hidden the new docs home title.

New site under website/

A second Hugo site with its own layouts and no external theme, so the marketing side does not have to fight Relearn's home rooted menu and asset pipeline. CI builds both and merges them into a single Pages artifact.

The design comes from the project logo rather than from nowhere: the navy of the triangle, the cyan of the llama, the purple of the speed bars, the off white of the wordmark. Those offset speed bars became the page's motion signature, used for the scroll progress bar, the nav underlines and every section head. Sora for display, Geist Mono for data, both self hosted.

The background renders a real depth-anything.cpp depth map as marching squares contour lines, and switches to a locate-anything.cpp style detection overlay while the engines section holds the viewport, with a scan line wiping between the two. Clicking deforms the depth field with a travelling wave, or runs a detection acquire sequence. Everything collapses to one static frame under prefers-reduced-motion.

Page order: hero, what LocalAI is, mission, senses, made with LocalAI, engines, APEX, cluster, models, nib, traction, blog, install.

Also included

  • /engines/, driven entirely by website/data/engines.yaml, so adding an engine is one YAML edit rather than hand written HTML in two places
  • /blog/ with five posts written from RELEASE_NOTES_v4.8.0.md, the APEX technical report, the parakeet.cpp benchmark suite and the engine READMEs
  • website/static/install.sh, a real POSIX installer, since the site advertises it. Asset names were matched against actual releases with gh release view, and it was test run end to end
  • website/static/install/kubernetes.yaml, with probes on the real /readyz and /healthz endpoints from core/http/routes/health.go
  • A rule in .agents/preparing-a-release.md that release preparation now includes a blog post and demo clips

Sourcing

Every figure is derived from the repository or the GitHub API, none from memory: 48,042 stars, 4,314 forks, 224 contributors, 133 releases, 73 backend families, 1,585 gallery entries, 18 native engines, 201 APEX builds. The APEX table is the one from the technical report. Engine claims come from each engine's own README and benchmark suite. Community posts are real and linked, spanning 2023 to 2026.

Demo clips are re-encoded from the benchmark suites that run in CI on each engine. Twelve clips plus the presenter video, 2.1 MB of media in total.

Checking those figures against their sources turned up one error in the repo: README.md described voxtral-tts.c as speech to text. Its own README says Mistral Voxtral-4B-TTS, 20 preset voices, 24 kHz output. Corrected here, in the same place it appeared on the site.

Verification

Built with Hugo 0.146.3 extended, the version CI pins.

$ make site
gen-redirects: 214 redirect(s) written, 2 path(s) left to the marketing site
  • /, /engines/, /blog/, all five posts, /docs/, /docs/features/text-generation/ all render
  • /features/text-generation/ redirects to /docs/features/text-generation/
  • / was not overwritten by the redirect generator
  • Every asset reference on the landing and engines pages resolves
  • install.sh passes sh -n and dash -n, and a real run installed, verified the checksum, then reported "nothing to do" on a second run
  • kubernetes.yaml parses as five documents
  • No em dashes anywhere in the new files

Notes for review

  • vllm.cpp appears in a low key block marked as not yet announced. Merging this announces it regardless of the label. Say the word and it comes out.
  • The italian-asr gallery card is a placeholder pending a repo or Hugging Face link.
  • rf-detr.cpp has no clip because the repo was not available locally.
  • Quotes from other people were trimmed for length. Worth a second read before this is public.
  • kubectl apply --dry-run=client could not be run here, no reachable cluster.

mudler added 2 commits July 31, 2026 00:17
The Hugo docs site has always been localai.io itself, which left nowhere to
explain what LocalAI is or show what the team builds. This adds a separate
marketing site at the root and moves the documentation under /docs/.

Docs:
  The existing site keeps its content tree and its Relearn theme, and now
  builds with baseURL <root>/docs/. Its _index.md, which held a hand written
  landing page, becomes a real documentation home.

  Every previously published URL keeps working. GitHub Pages has no server
  side rewrites, so .github/ci/gen-redirects.sh walks the built docs output
  and leaves a meta refresh plus a canonical link at each old root path. It
  covers bare .html files too, which is what keeps /gallery.html alive, and
  it never overwrites a path the marketing site already owns.

Website:
  A second Hugo site under website/ with its own layouts and no external
  theme, so the marketing side does not have to fight Relearn's home rooted
  menu and asset pipeline. CI builds both and merges them into one Pages
  artifact.

  The design is derived from the project logo rather than invented: the navy
  of the triangle, the cyan of the llama, the purple of the speed bars. Those
  offset bars became the motion signature. The background renders a real
  depth-anything.cpp depth map as contour lines and switches to a
  locate-anything.cpp style detection overlay over the engines section.

  Also included: an /engines/ index driven entirely by data/engines.yaml, a
  /blog/ section with five posts written from the release notes and the
  engine benchmark suites, install.sh and a Kubernetes manifest since the
  site advertises both, and a rule in .agents/ that release preparation now
  includes a blog post and demo clips.

Every figure on the site is derived from the repository or the GitHub API,
not from memory. Correcting them against their sources found one error in
README.md: voxtral-tts.c is text to speech, not speech to text.

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Assisted-by: Claude Code:claude-opus-5 [Bash] [Edit] [Write] [Agent]
…first person

The history post read like a changelog written by a committee. It is now in
Ettore's voice, first person, with the admissions left in.

The numbers paragraph in particular read like a directory listing. It now says
what the figures mean rather than which file they came from.

Adds an interactive star history chart, built from the GitHub stargazers API
rather than embedded from a third party, so the page makes no external request
and cannot break when someone else's service is down. The four releases the
post is organised around are marked on the curve, and the labels stack into
rows because three of them land within two months of each other.

The API stops paginating at 40,000 items, so the curve is measured up to
December 2025 and the segment from there to today's total is drawn dashed,
labelled as an estimate in the caption and in the tooltip. It is a straight
line between two known points, and the chart says so rather than implying it
is data.

Also drops "marketing site" from the README heading and everywhere else it
appeared, and calls it the main site instead.

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Assisted-by: Claude Code:claude-opus-5 [Bash] [Edit] [Write]
@mudler
mudler merged commit 94d5aff into master Jul 31, 2026
1 of 23 checks passed
@mudler
mudler deleted the feat/website-split-docs branch July 31, 2026 07:00
@localai-bot localai-bot added the kind/documentation Improvements or additions to documentation label Aug 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind/documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants