levineuwirth.org/templates/partials
Levi Neuwirth 29c4b80a2a
vita: generate /about from the CV data instead of hand-copying it
The vita page carried a hand-typed duplicate of education, publications,
presentations, and experience, and had drifted from the PDFs in about
fifteen places — Shu Lab still one entry titled "Undergraduate
Researcher" three months after the degree, Weenix at ~7,000 lines, CHASE
still "accepted" after being presented, a preprint missing entirely, and
two different code URLs for the same paper.

build/Vita.hs reads yaml-source/data/*.yml — the same files the PDF
pipeline builds from — and renders education, experience (keeping the
CV's research/industry split), publications, presentations, and contact.
Drift is now structurally impossible rather than merely discouraged.

Notes on the implementation:

- The YAML is LaTeX-flavoured because xelatex is its first consumer, so
  values pass through a small closed converter (\textbf, \textit,
  \texttt, \href, $\times$, $\delta$, \#, {,}, ~, --, ---). Escaping
  happens before conversion; unhandled commands pass through visibly
  rather than silently dropping their argument.
- Scalars are parsed loosely: the same logical field is sometimes a YAML
  number and sometimes a string (`year: 2026` vs `year: "2026--2027"`),
  and the PDF pipeline does not care, so this does not force it to.
- personal.yml's phone number is deliberately not read. It is printed on
  the CV, which is handed to a chosen reader; this page is crawled.
- Contact chips carry labels (ORCID, Forgejo, GitHub) rather than the
  CV's full display values, which exist because paper cannot be clicked.

The page keeps only what nothing else on the site owns: the pointers and
the four research threads. In-progress work belongs to /current, the
engineering index to /cv/projects/, and the narrative to /me/ — whose
abstract already described this page as the formal record.

vita.css composes on item-card.css and mirrors now.css's headings and
chip geometry, so /about and /current read as one system. Link chips get
the only interaction polish on the page, being the one affordance a
printed CV cannot offer.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SUGesXiMmACsLBTGG1xuEU
2026-08-11 08:40:33 +02:00
..
archive-banner.html Add link archive system: snapshots, backlinks, link-rot 2026-05-23 10:06:33 -04:00
archive-removal-notice.html Add link archive system: snapshots, backlinks, link-rot 2026-05-23 10:06:33 -04:00
footer.html Stamp the site-wide build time post-render 2026-05-23 12:05:28 -04:00
head.html vita: generate /about from the CV data instead of hand-copying it 2026-08-11 08:40:33 +02:00
item-card.html Marks II: broader monogram coverage + audit-marks tool 2026-05-23 12:05:08 -04:00
list-controls.html Navigation refactor 2026-04-19 14:35:41 -04:00
metadata-header.html Marks I 2026-05-07 23:51:14 -04:00
metadata-tail.html Marks I 2026-05-07 23:51:14 -04:00
nav.html Branding diet: logo sprite via <use>, lean favicon.ico, simple mask icon 2026-06-10 10:43:06 -04:00
page-footer.html more prominent related pages 2026-05-03 14:01:14 -04:00
paginate-nav.html initial deploy! whoop 2026-03-17 21:56:14 -04:00
photo-card.html Spec dilemma 2026-05-01 21:22:01 -04:00