diff --git a/.github/workflows/deploy-pages.yml b/.github/workflows/deploy-pages.yml
index 27aa13f..8d03d4d 100644
--- a/.github/workflows/deploy-pages.yml
+++ b/.github/workflows/deploy-pages.yml
@@ -29,6 +29,12 @@ jobs:
- name: Checkout
uses: actions/checkout@v7
+ # 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: Set up Hugo
uses: peaceiris/actions-hugo@v3
with:
diff --git a/README.md b/README.md
index a4bee53..ffb7978 100644
--- a/README.md
+++ b/README.md
@@ -19,3 +19,12 @@ to GitHub Pages on every push to `main`.
```bash
hugo server # http://localhost:1313
```
+
+## The design is not here
+
+It comes from the shared Hugo module
+[`go-fleettools/landingkit`](https://github.com/go-fleettools/landingkit),
+pinned in `go.mod` (Renovate bumps it); `kit.go` keeps `go mod tidy` from
+deleting that requirement. `[params.brand]` in `hugo.toml` is read from the logo by
+`landingkit brand`. A file under `layouts/partials/` with the name of one of the
+kit's would silently override it.
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..3cbe7f1
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,5 @@
+module github.com/go-ruby-json/go-ruby-json.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 a897aad..7526591 100644
--- a/hugo.toml
+++ b/hugo.toml
@@ -2,6 +2,11 @@ baseURL = "https://go-ruby-json.github.io/"
title = "go-ruby-json"
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
@@ -29,3 +34,24 @@ disableKinds = ["taxonomy", "term", "RSS", "sitemap", "404"]
name = "Differential oracle & coverage"
status = "ready"
blurb = "A wide corpus round-tripped here and by the system `ruby`/`json`, compared byte-for-byte; 100% coverage, gofmt + go vet clean, green across all six 64-bit Go arches and three OSes."
+
+[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 ca2e406..4eba880 100644
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -3,116 +3,66 @@
-{{/* Dark Reader repaints pages that already draw their own dark theme, as this one does: ask it to stand aside. */}}
-
{{ .Site.Title }} โ a pure-Go reimplementation of Ruby's MRI-compatible JSON parser and generator, 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-json
-
Ruby's JSON parser & generator in pure Go โ MRI-compatible, no cgo.
-
- pure Go ยท zero cgo
- MRI-compatible
- JSON.parse
- JSON.generate
- pretty_generate
- symbolize_names
- ParserError
- NestingError
- MRI byte-exact
- 100% coverage
- 6 arches
-
{{ if not (partial "mantra-on.html" $) }}pure Go ยท zero cgo{{ end }}MRI-compatibleJSON.parseJSON.generatepretty_generatesymbolize_namesParserErrorNestingErrorMRI byte-exact100% coverage6 arches
+
-
+ {{ if not (partial "mantra-on.html" $) }}{{ end }}
+
go-ruby-json is a pure-Go (no cgo) reimplementation of Ruby's JSON library โ a JSON.parse parser and a JSON.generate / JSON.pretty_generate generator that match reference Ruby's parsing and serialization byte-for-byte. It round-trips Ruby values through JSON the way MRI does: the full value graph (Hash/Array/String/Integer/Float/true/false/nil), symbolize_names, depth-limited nesting, and the complete JSON::ParserError / JSON::NestingError / JSON::GeneratorError taxonomy. It was extracted from rbgo's prelude/internals into a reusable standalone library: no dependency on the Ruby runtime, the dependency runs the other way. It is the JSON backend for go-embedded-ruby, bound by rbgo as a native module just like go-ruby-regexp and go-ruby-erb โ differential-tested against MRI, 100% coverage, CI green across 6 arches and 3 OSes.
@@ -129,20 +79,8 @@
{{ .name }} {{ .status }}
planned not started yet (or downstream by design)
A faithful port of Ruby's JSON parser and generator in pure Go, cgo disabled, so it cross-compiles and embeds anywhere. It parses JSON into the Ruby value graph with symbolize_names, emits compact and pretty_generate forms, tracks nesting depth, and raises the JSON::ParserError / JSON::NestingError / JSON::GeneratorError taxonomy. Validated differentially against the system ruby binary โ parsed and generated values compared against MRI's json. It is a standalone, reusable module extracted from rbgo's internals, and the JSON backend for the sibling org github.com/go-embedded-ruby.
{{ with .Site.Params.repos }}{{ range first 6 . }}{{ with or .pkg (strings.TrimPrefix "https://" (.url | default "")) (printf "github.com/go-ruby-json/%s" .name) }}$ go get {{ . }}@latest
+{{ end }}{{ end }}{{ else }}$ go get github.com/go-ruby-json/json@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