Manifest placeholders until signed upload; printable VM A/B/C sheet.
4.2 KiB
CERT self-host fonts (printit.verae.ai)
Placeholder directory for self-hosted woff2 used by the CERT-01 web
viewer (../certificate.html). Binaries are not committed yet — only
.gitkeep keeps the path in git.
Current state
| Surface | Fonts today | Offline fallback |
|---|---|---|
certificate.html title |
Fraunces 600/700 via Google Fonts CDN | Georgia / Times New Roman / serif |
| Mono digests | JetBrains Mono 500 via same CDN | ui-monospace / SF Mono / Menlo |
UI kit (verae-ui-kit.css) |
Inter + Material Symbols Rounded CDN | system stacks in brand/tokens.css |
Issued PDF (internal/pdfcert) |
System / library serif — not Fraunces embed | N/A (separate from web) |
Design source of truth: verae-2026-design/ui-designs/src/html/CERT-01.html
(tokens --font-serif: 'Fraunces'; design-kit src/fonts/ currently ships
Cantarell + Material Symbols TTF only — no Fraunces binary in-repo yet).
Not claimed: full CERT-01.html pixel match, PDF Fraunces embed, or self-hosted production fonts.
Goal
Serve brand serif (and optional mono) from this origin so the certificate
viewer works without fonts.googleapis.com / fonts.gstatic.com, and
print/PDF-from-browser paths stay consistent offline.
Planned files (when licensed binaries land)
fonts/
README.md (this file)
.gitkeep
fetch-fonts.example.sh # curl placeholders; no download until uncommented
fraunces-opsz-wght-600.woff2 # variable or static; opsz + weight 600
fraunces-opsz-wght-700.woff2 # weight 700 (title)
jetbrains-mono-500.woff2 # optional; digests already have mono stack
OFL.txt / LICENSE # required license text beside binaries
Fetch scaffold (TODO-7 A7)
fetch-fonts.example.sh — example only. Comment-only
upstream URLs (google/fonts OFL trees, gstatic discovery). Does not curl until
an operator uncomments a pinned-commit block after license review. Smoke:
./fetch-fonts.example.sh # prints instructions; no network
./fetch-fonts.example.sh --check # exit 1 until woff2 + OFL.txt present
Exact filenames may follow upstream release naming; keep them stable once wired so deploys and cache busting stay simple.
How to wire (later — do not claim done until files exist)
-
Obtain OFL-licensed Fraunces (and optional JetBrains Mono) woff2 from the upstream release or a subsetted build (title glyphs only is enough for CERT).
-
Drop files into this directory; commit license text next to them.
-
Add local
@font-faceincertificate.html(or a smallfonts/cert-fonts.css):@font-face { font-family: 'Fraunces'; src: url('/fonts/fraunces-opsz-wght-700.woff2') format('woff2'); font-weight: 700; font-style: normal; font-display: swap; } -
Remove the three Google Fonts
<link>tags fromcertificate.htmlhead once local faces load cleanly. -
Keep the Georgia/serif stack as final fallback.
-
Deploy with the rest of the static site (
rsyncto/var/www/printit.verae.ai/— see parentREADME.md). -
Smoke: open
/certificate.htmlwith network blocked; title must still render serif (local woff2 or Georgia).
Out of scope here
| Item | Owner / later |
|---|---|
| PDF CERT Fraunces embed | I7 done: pdfcert/build.mjs note + test — Times/Helvetica only until embed lands |
| Inter / Material Symbols self-host for whole site | optional; CERT title is the residual gap called out in OPEN-ISSUES #7 |
| Cantarell from design-kit TTFs | GNOME mock only; not required for CERT-01 web title |
| Pixel-perfect CERT-01.html match | Still later (OPEN-ISSUES Advanced) |
Status
| Step | State |
|---|---|
| Placeholder dir + this plan | Done (L7) |
fetch-fonts.example.sh placeholders |
Done (TODO-7 A7) — no binaries fetched |
| Web cert spacing toward CERT-01 | Closer (title-block 26/18, pad 56×64, rule 2×120, mh 2×6, verify center) — not full pixel |
| woff2 binaries + LICENSE | Not started |
@font-face + drop CDN links |
Not started |
| Pixel match / PDF embed claim | Not started — do not claim |