Add ASSERT website + Primer-style docs subsite - #144
Conversation
- Move assert-landing Next.js (static export) source into website/ - Update basePath from /sooyeonhwang-assert-landing to /ASSERT - Add .github/workflows/deploy-pages.yml to build and deploy to GitHub Pages on pushes to main that touch website/
…, brand context in nav
…M stat, refactor logo loop, update Systematization copy
- Bump next 14.2.17 -> 15.5.18 and eslint-config-next to match - Add npm overrides for postcss ^8.5.10 and brace-expansion ^2.0.2 - npm audit now reports 0 vulnerabilities (was 6: 1 critical, 3 high, 2 moderate) - Update docs/[...slug]/page.tsx params to Promise per Next 15 breaking change - Fix typo: Antropic -> Anthropic in shieldResources
|
Thanks for the review! Addressed in bb4b632: 1. Vulnerable deps (npm audit)
2. Typo
3. Pages deploy failure
The repo's |
jakepresent
left a comment
There was a problem hiding this comment.
Approved after the follow-up fixes.
Verified locally on the latest head:
npm cinpm audit --audit-level=moderate --jsonreports 0 vulnerabilitiesnpm run buildsucceeds on Next 15.5.18- scanned website source for stale
Adaptive Eval,adaptive-eval,Antropic, andP2Mreferences; only remaining old terms were generated/local artifacts before cleanup, not tracked source
I pushed one tiny follow-up to remove a stale P2M CSS comment. The remaining deploy check failure matches Sue's explanation: the Pages build/artifact step is green, and the deploy job is blocked because the github-pages environment only allows deploys from main. I do not see that as a website build blocker for merging this PR.
There was a problem hiding this comment.
Pull request overview
Adds a Next.js 14 static-export landing site and a Primer-inspired docs subsite under website/, sourcing Markdown from the repo-root docs/ directory, plus a GitHub Pages deploy workflow that builds and publishes from main.
Changes:
- New
website/Next.js app (landing page, components, Tailwind/PostCSS, public assets) withbasePath: "/ASSERT"and static export. - New
/docssubsite that walks repo-rootdocs/, renders Markdown withreact-markdown+rehype-slug/rehype-highlight, and provides a Primer-style sidebar, breadcrumbs, and "On this page" TOC. - New
.github/workflows/deploy-pages.ymlworkflow that buildswebsite/on Node 20 and deployswebsite/outto GitHub Pages.
Reviewed changes
Copilot reviewed 37 out of 65 changed files in this pull request and generated 12 comments.
Show a summary per file
| File | Description |
|---|---|
| .github/workflows/deploy-pages.yml | Pages build/deploy job; missing docs/** path trigger and includes feature branch. |
| website/_deploy.json | Deploy metadata stub. |
| website/.eslintrc.json | ESLint config with override for nonexistent agent-shield directory. |
| website/.gitignore, website/.vscode/settings.json, website/index.html | Tooling files (empty index.html is unused for Next.js). |
| website/package.json, package-lock implied, postcss.config.mjs, next.config.mjs, next-env.d.ts, tsconfig.json | Next.js 15/React 18 setup with Tailwind v4; tsconfig path aliases point at nonexistent agent-shield paths. |
| website/app/layout.js, page.tsx, TopNav.tsx, OnThisPageNav.tsx | Landing layout, hero, sections, terminal demo (CLI command uses assert_eval instead of assert-eval); large blocks of unused shield* data. |
| website/app/Terminal.tsx, Systematizer.tsx ("Systemization" typo), SystematizationExample.tsx, HowItWorks.tsx, CodeSnippets.tsx, MagicCard.tsx, Lens.tsx, Plasma.tsx, AnimatedBeam.tsx, BorderBeam.tsx, HeroGrid.tsx, GridBeam.tsx, FlickeringGrid.tsx, ScrollReveal.tsx, TrueFocus.tsx | Animated/visual components used by the landing page. |
| website/app/docs/layout.tsx, page.tsx, [...slug]/page.tsx | Docs shell, index, and dynamic doc page with breadcrumbs and TOC. |
| website/app/docs/_lib/docs.ts | Filesystem-based docs loader; README.md files yield awkward /readme slugs. |
| website/app/docs/_components/{DocsSidebar,DocsSidebarClient,MarkdownContent,OnThisPage}.tsx | Sidebar (with local search), Markdown renderer (no link rewriting for cross-repo relative links), and on-this-page TOC. |
| website/docs/design-migration.md | Internal design brief referencing the unrelated "Agent Shield" product. |
| website/public/icons/*.svg | New SVG icons used by the landing/docs UI. |
| </div> | ||
| <div className="run-eval-terminal"> | ||
| <Terminal title="Terminal"> | ||
| <TypingAnimation>assert_eval run --config eval_config.yaml</TypingAnimation> |
| paths: | ||
| - "website/**" | ||
| - ".github/workflows/deploy-pages.yml" |
| function fileToSlug(relativePath: string): DocSlug { | ||
| // "targets/callable.md" -> ["targets", "callable"] | ||
| // "README.md" -> ["readme"] (skip; index lives at /docs) | ||
| const noExt = relativePath.replace(/\.(md|mdx)$/i, ""); | ||
| return noExt.split(path.sep).map((segment) => segment.toLowerCase()); | ||
| } |
| "paths": { | ||
| "@/components/*": ["app/agent-shield/_components/*"], | ||
| "@/lib/*": ["app/agent-shield/_lib/*"] | ||
| }, |
| "overrides": [ | ||
| { | ||
| "files": ["app/agent-shield/**/*.{ts,tsx}"], | ||
| "rules": { | ||
| "react/no-unescaped-entities": "off", | ||
| "@typescript-eslint/no-unused-vars": "off", | ||
| "@next/next/no-img-element": "off", | ||
| "react-hooks/exhaustive-deps": "off" | ||
| } | ||
| } | ||
| ] |
| <a href={`${BASE_PATH}/`} className="brand-mark" aria-label="Assert home"> | ||
| <Image | ||
| src={`${BASE_PATH}/icons/Logo.svg`} | ||
| alt="" | ||
| width={18} | ||
| height={18} | ||
| className="brand-logo" | ||
| /> | ||
| <span className="brand-word">ASSERT.</span> | ||
| </a> | ||
| {inDocs && ( | ||
| <> | ||
| <span className="brand-sep" aria-hidden="true">/</span> | ||
| <a href={`${BASE_PATH}/docs`} className="brand-context">Documentation</a> | ||
| </> |
| Acceptance check: open any Agent Shield docs page next to the Primer reference | ||
| above. The breadcrumb, sidebar groups/rows, and right TOC should be visually | ||
| indistinguishable in structure, density, and active-state treatment — only the | ||
| content and accent color should differ. | ||
|
|
||
| ### Section bar (top) | ||
| - Sits directly under the top nav, sticky | ||
| - One row of primary area tabs (e.g. `Getting started`, `Using Agent Shield`) |
| The systematizer produces this in three steps that mirror the approach of Agarwal et al. (2026) | ||
| </p> | ||
| <a | ||
| href="https://arxiv.org/abs/2605.26001" | ||
| target="_blank" | ||
| rel="noreferrer" | ||
| className="nav-btn nav-btn-secondary product-learn-more" | ||
| > | ||
| Read the paper | ||
| <span className="learn-more-chevron" aria-hidden="true">›</span> | ||
| </a> |
| return ( | ||
| <div className="systematizer-diagram" ref={containerRef}> | ||
| <div className="systematizer-process-title" aria-hidden="true"> | ||
| Systemization Process |
|
|
||
| on: | ||
| push: | ||
| branches: [main, assert-gh-page] |
Summary
Adds the Next.js landing page and Primer-style documentation subsite under
website/, plus markdown source underdocs/. Deploys to GitHub Pages via the existing.github/workflows/deploy-pages.ymlworkflow on push tomain.What's included
website/— Next.js 14 app with static export (output: "export",basePath: "/ASSERT")/docsrendered from markdown indocs/(Primer-inspired sidebar, breadcrumbs, on-this-page TOC, search)docs/— markdown source (quickstart, concepts, writing-eval-specs, reading-results, targets/*, reference/cli, status-and-roadmap, travel-planner-agent-flow).github/workflows/deploy-pages.yml— build + deploy to GitHub PagesDeployment
main.Verification
npm run buildsucceeds locally (static export, 13 routes)npm run devat http://localhost:3000/ASSERT/