diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..668d87f
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,26 @@
+# GitLab Pages pipeline for the generated Forgekit landing page.
+# Set BUILD_PAGES_LIVE=1 in CI variables to include no-auth GitHub API counters.
+image: node:20
+
+stages:
+ - test
+ - deploy
+
+cache:
+ key: "$CI_COMMIT_REF_SLUG"
+ paths:
+ - .npm/
+ - .cache/pages/
+
+before_script:
+ - npm ci --cache .npm --prefer-offline
+
+pages:
+ stage: deploy
+ script:
+ - npm run pages:build
+ artifacts:
+ paths:
+ - public
+ rules:
+ - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
diff --git a/README.md b/README.md
index 7ee6b08..689f36c 100644
--- a/README.md
+++ b/README.md
@@ -181,6 +181,18 @@ into that shape; they have to be supplied from outside. The full argument, with
load-bearing statistic re-graded against primary sources, is the
[cognitive-substrate white paper](docs/cognitive-substrate/).
+
+## GitLab Pages landing page
+
+Forgekit includes a generated, professional GitLab Pages landing page in [`public/index.html`](public/index.html). It is intentionally static and auto-updated from real repository data (`package.json`, `README.md`, `CHANGELOG.md`, and `reports/benchmarks.md`) by the generator in [`scripts/build-pages.mjs`](scripts/build-pages.mjs).
+
+```bash
+npm run pages:build # offline, deterministic repo-data build
+BUILD_PAGES_LIVE=1 npm run pages:build # also refresh public GitHub counters
+```
+
+The optional live mode uses the no-auth GitHub repository API with timeouts, retries, jitter, and ETag/Last-Modified caching. GitLab Pages deployment is defined in [`.gitlab-ci.yml`](.gitlab-ci.yml).
+
## Documentation
| Doc | What's in it |
diff --git a/docs/REPO_REVIEW.md b/docs/REPO_REVIEW.md
new file mode 100644
index 0000000..0ff324b
--- /dev/null
+++ b/docs/REPO_REVIEW.md
@@ -0,0 +1,23 @@
+# Repository review notes
+
+Date: 2026-07-07
+
+## What is aligned
+
+- Runtime dependency policy is consistent: `package.json` has no production dependencies and the docs describe a zero-runtime-dependency Node CLI.
+- Core user docs are present: README, onboarding, architecture, guide, changelog, governance, support, security, releasing, and accessibility files exist.
+- Benchmark claims in the README point readers to `reports/benchmarks.md`, which is the right direction for avoiding stale marketing numbers.
+
+## Outdated or misalignment risks to monitor
+
+- README benchmark excerpts are hand-copied from `reports/benchmarks.md`; rerun `npm run bench` before changing release claims.
+- The GitHub `homepage` field still points at the README. If GitLab Pages becomes the primary marketing surface, update `package.json` after the Pages URL is known.
+- `CHANGELOG.md` contains same-day `0.5.0` and `0.6.0` releases. That is valid, but release notes should stay explicit about sequencing to avoid reader confusion.
+- Generated assets such as `public/index.html` should be regenerated with `npm run pages:build` whenever package metadata, benchmark summaries, or changelog content changes.
+
+## Suggestions
+
+- Add a CI job that runs `npm run pages:build` and fails if `public/index.html` is stale compared with committed sources.
+- Consider publishing the GitLab Pages URL in `package.json.homepage` and the README once the project namespace is final.
+- Add a small screenshot or preview image for the landing page after the first GitLab Pages deployment.
+- Keep live public counters optional (`BUILD_PAGES_LIVE=1`) so forks and offline CI remain deterministic and rate-limit friendly.
diff --git a/package.json b/package.json
index a366d4c..7d40612 100644
--- a/package.json
+++ b/package.json
@@ -48,7 +48,9 @@
"ARCHITECTURE.md",
"ONBOARDING.md",
"CHANGELOG.md",
- "LICENSE"
+ "LICENSE",
+ "public",
+ "scripts"
],
"scripts": {
"test": "node --test test/*.test.js",
@@ -60,7 +62,9 @@
"typecheck": "tsc -p tsconfig.json",
"coverage": "node --test --experimental-test-coverage test/*.test.js",
"bump": "node scripts/bump.mjs",
- "forge": "node src/cli.js"
+ "forge": "node src/cli.js",
+ "pages:build": "node scripts/build-pages.mjs",
+ "pages:build:live": "BUILD_PAGES_LIVE=1 node scripts/build-pages.mjs"
},
"keywords": [
"ai-agents",
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..be26568
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,4 @@
+
One professional config layer for every AI coding agent.
One config for every AI coding agent — a cross-tool config layer plus a cognitive substrate (memory, blast-radius, guardrails) for Claude Code, Codex, Cursor, Gemini, Aider, and more.
MIT license0 runtime dependencieswork @ 0bb9ab8Live GitHub stats disabled
0.43 ms
blast-radius lookup
Measured from this repo's benchmark report, not a marketing placeholder.
118 ms
pre-action gate
Assumptions, routing, reuse, context, impact, scope, and anchoring.
62.1% cost saved vs always-premium
routing signal
Documented from the white-paper prototype and exposed by Forge cost reports.
What it does
Emits native rules for Claude Code, Codex, Cursor, Gemini, Aider, Copilot, Windsurf, Zed, Continue, and MCP clients.
Keeps proof-carrying memory in git-native files that can merge across teammates.
Runs deterministic guardrails before agent edits and independent verification after.
Quickstart
npm install -g @codewithjuber/forgekit
+forge init
+forge doctor
+forge substrate "Change auth validation and update tests"
Auto-updated
This GitLab Pages landing page is generated from repository files during CI. Enable BUILD_PAGES_LIVE=1 to refresh public GitHub counters with ETag/Last-Modified caching.
Measured from this repo's benchmark report, not a marketing placeholder.
${esc(d.speed)}
pre-action gate
Assumptions, routing, reuse, context, impact, scope, and anchoring.
${esc(d.saved)}
routing signal
Documented from the white-paper prototype and exposed by Forge cost reports.
What it does
Emits native rules for Claude Code, Codex, Cursor, Gemini, Aider, Copilot, Windsurf, Zed, Continue, and MCP clients.
Keeps proof-carrying memory in git-native files that can merge across teammates.
Runs deterministic guardrails before agent edits and independent verification after.
Quickstart
npm install -g @codewithjuber/forgekit
+forge init
+forge doctor
+forge substrate "Change auth validation and update tests"
Auto-updated
This GitLab Pages landing page is generated from repository files during CI. Enable BUILD_PAGES_LIVE=1 to refresh public GitHub counters with ETag/Last-Modified caching.
Generated ${esc(d.generated)} from ${esc(d.commit)}.