Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -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'
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Expand Down
23 changes: 23 additions & 0 deletions docs/REPO_REVIEW.md
Original file line number Diff line number Diff line change
@@ -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.
8 changes: 6 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@
"ARCHITECTURE.md",
"ONBOARDING.md",
"CHANGELOG.md",
"LICENSE"
"LICENSE",
"public",
"scripts"
],
"scripts": {
"test": "node --test test/*.test.js",
Expand All @@ -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",
Expand Down
4 changes: 4 additions & 0 deletions public/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Forgekit — AI agent substrate</title><meta name="description" content="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."><style>:root{color-scheme:light dark;--bg:#171310;--fg:#f7efe7;--muted:#b5a99b;--panel:#211a15;--line:#3b2f26;--accent:#f26430;--wash:rgba(242,100,48,.14)}@media(prefers-color-scheme:light){:root{--bg:#fffaf5;--fg:#1d1712;--muted:#65594e;--panel:#fff;--line:#eaded2;--wash:#fff0e9}}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 80% 0,var(--wash),transparent 34rem),var(--bg);color:var(--fg);font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif}a{color:inherit}a:focus-visible,button:focus-visible{outline:3px solid var(--accent);outline-offset:3px}.wrap{width:min(1120px,calc(100% - 32px));margin:auto}.nav{display:flex;gap:16px;align-items:center;justify-content:space-between;padding:20px 0}.brand{font:700 18px ui-monospace,SFMono-Regular,Menlo,monospace}.brand b,.accent{color:var(--accent)}.links{display:flex;gap:14px;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:12px;padding:10px 14px;text-decoration:none;background:var(--panel)}.btn.primary{background:var(--accent);color:#1b100b;border-color:var(--accent);font-weight:700}.hero{padding:64px 0 36px}.eyebrow{color:var(--accent);font:700 13px ui-monospace,monospace;text-transform:uppercase;letter-spacing:.12em}h1{font-size:clamp(40px,8vw,88px);line-height:.95;margin:14px 0 20px;max-width:920px}p.lead{font-size:clamp(18px,2vw,24px);max-width:760px;color:var(--muted)}.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:32px 0}.card{background:color-mix(in srgb,var(--panel) 92%,transparent);border:1px solid var(--line);border-radius:20px;padding:22px;box-shadow:0 20px 60px rgba(0,0,0,.08)}.metric{font:800 34px ui-monospace,monospace;color:var(--accent)}.muted{color:var(--muted)}code{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:2px 6px}.terminal{font:14px ui-monospace,monospace;overflow:auto;white-space:pre;background:#110d0a;color:#f7efe7;border-radius:18px;padding:20px;border:1px solid var(--line)}section{padding:34px 0}h2{font-size:30px;margin:0 0 14px}.list{display:grid;gap:10px;padding:0;list-style:none}.list li{border-left:3px solid var(--accent);padding-left:12px}.meta{display:flex;gap:10px;flex-wrap:wrap}.meta span{border:1px solid var(--line);border-radius:999px;padding:6px 10px;color:var(--muted);font:13px ui-monospace,monospace}footer{border-top:1px solid var(--line);margin-top:40px;padding:28px 0;color:var(--muted)}@media(max-width:800px){.grid{grid-template-columns:1fr}.nav{align-items:flex-start;flex-direction:column}.hero{padding-top:36px}}@media(prefers-reduced-motion:no-preference){.btn{transition:transform .15s}.btn:hover{transform:translateY(-2px)}}</style></head><body><header class="wrap nav"><a class="brand" href="#top"><b>forge</b>kit</a><nav class="links" aria-label="Primary"><a href="#quickstart">Quickstart</a><a href="#changes">Latest</a><a href="#sources">Data sources</a><a href="https://github.com/CodeWithJuber/forgekit">GitHub</a></nav></header><main id="top"><section class="wrap hero"><div class="eyebrow">@codewithjuber/forgekit · v0.6.0 · Node &gt;=20</div><h1>One professional config layer for every AI coding agent.</h1><p class="lead">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.</p><p><a class="btn primary" href="#quickstart">Install in 60 seconds</a> <a class="btn" href="https://github.com/CodeWithJuber/forgekit#readme">Read the docs</a></p><div class="meta"><span>MIT license</span><span>0 runtime dependencies</span><span>work @ 0bb9ab8</span><span>Live GitHub stats disabled</span></div></section><section class="wrap grid" aria-label="Measured outcomes"><article class="card"><div class="metric">0.43 ms</div><strong>blast-radius lookup</strong><p class="muted">Measured from this repo's benchmark report, not a marketing placeholder.</p></article><article class="card"><div class="metric">118 ms</div><strong>pre-action gate</strong><p class="muted">Assumptions, routing, reuse, context, impact, scope, and anchoring.</p></article><article class="card"><div class="metric">62.1% cost saved vs always-premium</div><strong>routing signal</strong><p class="muted">Documented from the white-paper prototype and exposed by Forge cost reports.</p></article></section><section class="wrap grid"><article class="card"><h2>What it does</h2><ul class="list"><li>Emits native rules for Claude Code, Codex, Cursor, Gemini, Aider, Copilot, Windsurf, Zed, Continue, and MCP clients.</li><li>Keeps proof-carrying memory in git-native files that can merge across teammates.</li><li>Runs deterministic guardrails before agent edits and independent verification after.</li></ul></article><article class="card" id="quickstart"><h2>Quickstart</h2><div class="terminal">npm install -g @codewithjuber/forgekit
forge init
forge doctor
forge substrate "Change auth validation and update tests"</div></article><article class="card"><h2>Auto-updated</h2><p class="muted">This GitLab Pages landing page is generated from repository files during CI. Enable <code>BUILD_PAGES_LIVE=1</code> to refresh public GitHub counters with ETag/Last-Modified caching.</p><p class="muted">Generated 2026-07-07T20:42:20.317Z from 0bb9ab8.</p></article></section><section class="wrap" id="changes"><h2>Latest repo changes</h2><div class="card"><ul class="list"></ul><p class="muted">Benchmark sections indexed: 3 · benchmarks file updated 2026-07-07.</p></div></section><section class="wrap" id="sources"><h2>Data Sources</h2><div class="card"><p class="muted">No mock data is used. The page is generated from these sources:</p><ul><li>package.json</li><li>README.md</li><li>CHANGELOG.md</li><li>reports/benchmarks.md</li><li>https://api.github.com/repos/CodeWithJuber/forgekit (optional, no auth, only when BUILD_PAGES_LIVE=1)</li></ul></div></section></main><footer class="wrap">WCAG-minded semantic HTML, keyboard focus, responsive 320px–1920px+, light/dark mode, and reduced-motion-safe interactions.</footer></body></html>
Loading
Loading