Skip to content

Commit 09928cf

Browse files
Merge pull request #34 from CodeWithJuber/codex/review-repository-for-updates-and-improvements
Add generated GitLab Pages landing page
2 parents 50bba59 + 8fec2dd commit 09928cf

7 files changed

Lines changed: 223 additions & 2 deletions

File tree

.gitlab-ci.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# GitLab Pages pipeline for the generated Forgekit landing page.
2+
# Set BUILD_PAGES_LIVE=1 in CI variables to include no-auth GitHub API counters.
3+
image: node:20
4+
5+
stages:
6+
- test
7+
- deploy
8+
9+
cache:
10+
key: "$CI_COMMIT_REF_SLUG"
11+
paths:
12+
- .npm/
13+
- .cache/pages/
14+
15+
before_script:
16+
- npm ci --cache .npm --prefer-offline
17+
18+
pages:
19+
stage: deploy
20+
script:
21+
- npm run pages:build
22+
artifacts:
23+
paths:
24+
- public
25+
rules:
26+
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,18 @@ into that shape; they have to be supplied from outside. The full argument, with
181181
load-bearing statistic re-graded against primary sources, is the
182182
[cognitive-substrate white paper](docs/cognitive-substrate/).
183183

184+
185+
## GitLab Pages landing page
186+
187+
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).
188+
189+
```bash
190+
npm run pages:build # offline, deterministic repo-data build
191+
BUILD_PAGES_LIVE=1 npm run pages:build # also refresh public GitHub counters
192+
```
193+
194+
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).
195+
184196
## Documentation
185197

186198
| Doc | What's in it |

docs/REPO_REVIEW.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Repository review notes
2+
3+
Date: 2026-07-07
4+
5+
## What is aligned
6+
7+
- Runtime dependency policy is consistent: `package.json` has no production dependencies and the docs describe a zero-runtime-dependency Node CLI.
8+
- Core user docs are present: README, onboarding, architecture, guide, changelog, governance, support, security, releasing, and accessibility files exist.
9+
- Benchmark claims in the README point readers to `reports/benchmarks.md`, which is the right direction for avoiding stale marketing numbers.
10+
11+
## Outdated or misalignment risks to monitor
12+
13+
- README benchmark excerpts are hand-copied from `reports/benchmarks.md`; rerun `npm run bench` before changing release claims.
14+
- 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.
15+
- `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.
16+
- Generated assets such as `public/index.html` should be regenerated with `npm run pages:build` whenever package metadata, benchmark summaries, or changelog content changes.
17+
18+
## Suggestions
19+
20+
- Add a CI job that runs `npm run pages:build` and fails if `public/index.html` is stale compared with committed sources.
21+
- Consider publishing the GitLab Pages URL in `package.json.homepage` and the README once the project namespace is final.
22+
- Add a small screenshot or preview image for the landing page after the first GitLab Pages deployment.
23+
- Keep live public counters optional (`BUILD_PAGES_LIVE=1`) so forks and offline CI remain deterministic and rate-limit friendly.

package.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@
4848
"ARCHITECTURE.md",
4949
"ONBOARDING.md",
5050
"CHANGELOG.md",
51-
"LICENSE"
51+
"LICENSE",
52+
"public",
53+
"scripts"
5254
],
5355
"scripts": {
5456
"test": "node --test test/*.test.js",
@@ -60,7 +62,9 @@
6062
"typecheck": "tsc -p tsconfig.json",
6163
"coverage": "node --test --experimental-test-coverage test/*.test.js",
6264
"bump": "node scripts/bump.mjs",
63-
"forge": "node src/cli.js"
65+
"forge": "node src/cli.js",
66+
"pages:build": "node scripts/build-pages.mjs",
67+
"pages:build:live": "BUILD_PAGES_LIVE=1 node scripts/build-pages.mjs"
6468
},
6569
"keywords": [
6670
"ai-agents",

public/index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<!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
2+
forge init
3+
forge doctor
4+
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>

0 commit comments

Comments
 (0)