Repository navigation
feat(frontend): static project site β real evidence data, new design and logo #265
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
0c66357
e486160
7aa6771
ae24e7b
76373dd
51406b1
77bb27a
63bb71c
73ef3a2
ffe1866
d0565bc
2b8de22
02d73a2
9aeb08f
9d756b7
c739d76
fe8a711
10e7f46
395a945
32939d8
916cca2
c4862b4
1ded4c9
85696a6
3d6c619
cdb83f2
8ddc8b2
d7b42a5
ae5e041
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| name: Frontend CI | ||
|
|
||
| on: | ||
| push: | ||
| branches: [main] | ||
| pull_request: | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| frontend-test: | ||
| name: Frontend Tests & Verification | ||
| runs-on: ubuntu-latest | ||
| defaults: | ||
| run: | ||
| working-directory: frontend | ||
| steps: | ||
| - name: Checkout repository | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| persist-credentials: false | ||
|
|
||
| - name: Setup Node.js | ||
| uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: 22 | ||
| cache: npm | ||
| cache-dependency-path: frontend/package-lock.json | ||
|
|
||
| - name: Install dependencies | ||
| run: npm ci | ||
|
|
||
| - name: Typecheck | ||
| run: npm run typecheck | ||
|
|
||
| - name: Unit and validator tests | ||
| run: npm test | ||
|
|
||
| - name: Build static site | ||
| run: npm run build | ||
|
|
||
| - name: Install Playwright Chromium | ||
| run: npx playwright install --with-deps chromium | ||
|
|
||
| - name: Playwright E2E and A11y tests | ||
| run: npx playwright test | ||
| env: | ||
| CI: "true" | ||
|
|
||
| - name: Upload Playwright report on failure | ||
| uses: actions/upload-artifact@v4 | ||
| if: failure() | ||
| with: | ||
| name: playwright-report | ||
| path: frontend/playwright-report/ | ||
| retention-days: 7 | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| node_modules | ||
| dist | ||
| .vite | ||
| *.local | ||
| .DS_Store | ||
| test-results | ||
| playwright-report | ||
| blob-report | ||
| playwright/.cache |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,45 @@ | ||
| # OpenVerifiableLLM Frontend (Site v3) | ||
|
|
||
| Static single-page project site for OpenVerifiableLLM, presenting real bit-for-bit training verification evidence from Hugging Face revision `96dc282a`. | ||
|
|
||
| ## Overview | ||
|
|
||
| - **Single-page navigation**: Evidence-first landing page with section anchors (`#check`, `#verification`, `#timeline`, `#exclusion`, `#downloads`). | ||
| - **Real evidence data**: Pinned Hugging Face dataset `AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence` at revision `96dc282a`. | ||
| - **Prebuild validation**: `npm run build` runs `prebuild` (`npm run validate`), failing closed if any data contract or hash link is violated. | ||
| - **Accessible design**: WCAG 2.2 AA compliant, zero axe violations across themes (dark default, light opt-in) and viewports. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Correct the documented default theme. The README says dark is the default.
|
||
| - **Offline bundle**: System fonts only (no web fonts), embedded SVG brand assets, and zero runtime external CDN dependencies. | ||
|
|
||
| ## Commands | ||
|
|
||
| ```bash | ||
| cd frontend | ||
| npm ci | ||
| npm run dev # start local development server at http://127.0.0.1:5173 | ||
| npm run typecheck # verify TypeScript types (tsc -b --noEmit) | ||
| npm test # run Vitest suite (validation, copy lint, components) | ||
| npm run build # validate evidence and build static output to dist/ | ||
| npm run preview # preview production build locally | ||
| ``` | ||
|
|
||
| ## Structure | ||
|
|
||
| ``` | ||
| frontend/ | ||
| βββ public/ | ||
| β βββ brand/ # Segment check SVGs (logo-dark, logo-light, favicon, app-icon, aossie-logo) | ||
| β βββ data/ # evidence.json (pinned data committed for offline validation) | ||
| βββ scripts/ | ||
| β βββ fetch-evidence.mjs # Manual script to fetch and assemble snapshot from Hugging Face | ||
| βββ src/ | ||
| β βββ components/ # React components (Hero, Overview, CheckLadder, Verification, TrainingTimeline, etc.) | ||
| β βββ content/ # copy.ts (single source of truth for text and copy linting) | ||
| β βββ data/ # contracts.ts and validate.ts (strict schemas, invariant validator) | ||
| β βββ styles/ # tokens.css (color tokens and ratios) and base.css (typography and layouts) | ||
| βββ tests/ | ||
| βββ browser/ # Playwright + axe-core accessibility and interaction test suite | ||
| βββ fixtures/ # Corrupted evidence fixtures for fail-closed validation tests | ||
| βββ components.test.tsx | ||
| βββ copy-lint.test.ts | ||
| βββ validate.test.ts | ||
| ``` | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| <!doctype html> | ||
| <html lang="en"> | ||
| <head> | ||
| <meta charset="UTF-8" /> | ||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
| <title>OpenVerifiableLLM</title> | ||
| <meta | ||
| name="description" | ||
| content="A language model whose training anyone can recompute. A 23M-parameter model trained on English Wikipedia. Each of its 37 training segments reproduces bit for bit on the same GPU type." | ||
| /> | ||
| <link rel="icon" href="brand/favicon.svg" type="image/svg+xml" /> | ||
| <link rel="apple-touch-icon" href="brand/app-icon.svg" /> | ||
| </head> | ||
| <body> | ||
| <div id="root"></div> | ||
| <script type="module" src="/src/main.tsx"></script> | ||
| </body> | ||
| </html> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pin all three actions to full commit SHAs.
These mutable tags can resolve to different action code on a later PR run. Pin each action to a verified, full-length commit SHA. GitHub identifies full-length SHA pinning as the immutable action reference. (docs.github.com)
Based on learnings: βreference third-party actions by pinning to a full commit SHA β¦ rather than a mutable tag or branch.β
Also applies to: 25-25, 52-52
zizmor (1.30.1)
[error] 20-20: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)
(unpinned-uses)
Sources: Learnings, Linters/SAST tools