diff --git a/.github/workflows/hugo.yml b/.github/workflows/hugo.yml
index 55f7260..817cf6e 100644
--- a/.github/workflows/hugo.yml
+++ b/.github/workflows/hugo.yml
@@ -49,6 +49,12 @@ jobs:
with:
submodules: recursive
+ # Hugo resolves the landingkit module (hugo.toml [module]) with the go
+ # command, at the version go.mod pins.
+ - uses: actions/setup-go@v7
+ with:
+ go-version-file: go.mod
+ cache: false
- name: Setup Pages
id: pages
uses: actions/configure-pages@v6
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..0611cb8
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,5 @@
+module github.com/go-ruby-parser/go-ruby-parser.github.io
+
+go 1.27.3
+
+require github.com/go-fleettools/landingkit v0.7.1
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..c31b985
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,2 @@
+github.com/go-fleettools/landingkit v0.7.1 h1:Fw8Chr7QZ5+Y5KjEyPDlfMjficF4rH/f2dDMu1l5QT4=
+github.com/go-fleettools/landingkit v0.7.1/go.mod h1:gBpbziqFcmcjtNknPjy5+AAzGZ5L+pPr9mIJZHpDlZc=
diff --git a/hugo.toml b/hugo.toml
index 87ea77c..1c46619 100644
--- a/hugo.toml
+++ b/hugo.toml
@@ -2,6 +2,11 @@ baseURL = "https://go-ruby-parser.github.io/"
title = "go-ruby-parser"
disableKinds = ["taxonomy", "term", "RSS", "sitemap", "404"]
+# The design comes from the landing kit, a Hugo module pinned in go.mod.
+[module]
+ [[module.imports]]
+ path = "github.com/go-fleettools/landingkit"
+
[markup.goldmark.renderer]
unsafe = true
@@ -10,3 +15,24 @@ disableKinds = ["taxonomy", "term", "RSS", "sitemap", "404"]
url = "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/go-ruby-parser/parser"
status = "ready"
blurb = "The front-end: `parser.Parse(src) (*ast.Program, error)`, with sub-packages `token`, `ast` and `lexer`. A stateful lexer (MRI `spaceSeen` semantics), a recursive-descent + Pratt expression parser with a scope stack, and a typed AST for a broad, practical subset of **Ruby 4.0** — literals, operators, control flow, `case`/`in` **pattern matching**, methods/blocks, classes/modules/metaprogramming. 100% covered (the gate runs on all three OS lanes; the suite also runs on all six 64-bit targets and on js/wasm and wasip1/wasm), differential-tested against MRI Ruby 4.0.5. Current release **v0.4.0** (2026-09-26): all 80 `_spec.rb` files in the pinned ruby/spec `language/` corpus parse, and the three limitations the docs used to list — paren-less command calls with keyword/splat/block args, default block parameters, and the positional `Class(a)` find-pattern — all parse now. `BEGIN { }` / `END { }` remain the one refusal."
+
+[params.brand]
+# Generated by go-fleettools/landingkit from static/img/logo.svg: the colours are
+# READ from the logo's gradient, never chosen. Do not add other keys:
+# neutrals (backgrounds, surfaces, greys) belong to the shared sheet.
+# Contrast: base on white 10.02:1, bright on the dark background 4.00:1.
+ base = "#7f1d1d"
+ deep = "#4d1212"
+ bright = "#dc2626"
+ shadow = "rgba(127,29,29,.7)"
+ glow = "rgba(127,29,29,.6)"
+ wash = "rgba(127,29,29,.10)"
+ washDeep = "rgba(77,18,18,.06)"
+ chipBg = "#fbe5e5"
+ chipBorder = "#f4bebe"
+ chipFg = "#4d1212"
+ chipBgDark = "rgba(220,38,38,.14)"
+ chipBorderDark = "rgba(220,38,38,.32)"
+ chipFgDark = "#ec8888"
+ statsEnd = "#f7cbcb"
+ bandText = "#f9dcdc"
diff --git a/kit.go b/kit.go
new file mode 100644
index 0000000..72ac4fb
--- /dev/null
+++ b/kit.go
@@ -0,0 +1,9 @@
+//go:build tools
+
+// This file never builds. A Hugo site has no Go code, so `go mod tidy` --
+// which Renovate runs after every bump -- would find nothing that uses
+// github.com/go-fleettools/landingkit and delete its requirement from go.mod.
+// Importing it here keeps it. See the landingkit README.
+package site
+
+import _ "github.com/go-fleettools/landingkit"
diff --git a/layouts/index.html b/layouts/index.html
index 899c258..21904a9 100644
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -3,115 +3,65 @@
-{{/* Dark Reader repaints pages that already draw their own dark theme, as this one does: ask it to stand aside. */}}
-
{{ .Site.Title }} — a Ruby front-end in pure Go: lexer, parser, AST, no cgo
+
+{{ partial "styles.html" . }}
+{{/* The template's own rules for what holds, kept for it alone (class legacy),
+ its colours read from the kit's tokens. Written by landingmigrate. */}}
-
-
-
-
-
-
-
go-ruby-parser
-
A Ruby front-end in pure Go — lexer, parser, AST. No cgo, no Prism.
go-ruby-parser turns Ruby source into a syntax tree: a stateful lexer,
a recursive-descent parser with a Pratt expression core, and a typed AST —
all in pure Go, with cgo disabled. No cgo, no Prism, no
@@ -148,20 +98,8 @@
{{ with .Site.Params.repos }}{{ range first 6 . }}{{ with or .pkg (strings.TrimPrefix "https://" (.url | default "")) (printf "github.com/go-ruby-parser/%s" .name) }}$ go get {{ . }}@latest
+{{ end }}{{ end }}{{ else }}$ go get github.com/go-ruby-parser/parser@latest
+{{ end }}
+
\ No newline at end of file
diff --git a/layouts/partials/icons/OCTICONS-LICENSE b/layouts/partials/icons/OCTICONS-LICENSE
deleted file mode 100644
index aa1fa80..0000000
--- a/layouts/partials/icons/OCTICONS-LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2026 GitHub Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/layouts/partials/icons/book.html b/layouts/partials/icons/book.html
deleted file mode 100644
index cf1e882..0000000
--- a/layouts/partials/icons/book.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{{- /* Octicons "book" (16 px), primer/octicons @primer/octicons-react@19.40.0, copied verbatim, MIT,
- (c) GitHub Inc.: the licence is OCTICONS-LICENSE beside this file.
- currentColor follows the button in light and dark; aria-hidden, since
- the button's text already says where it leads. */ -}}
-
\ No newline at end of file
diff --git a/layouts/partials/icons/mark-github.html b/layouts/partials/icons/mark-github.html
deleted file mode 100644
index 17fc355..0000000
--- a/layouts/partials/icons/mark-github.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{{- /* Octicons "mark-github" (16 px), primer/octicons @primer/octicons-react@19.40.0, copied verbatim, MIT,
- (c) GitHub Inc.: the licence is OCTICONS-LICENSE beside this file.
- currentColor follows the button in light and dark; aria-hidden, since
- the button's text already says where it leads. */ -}}
-
\ No newline at end of file