Skip to content

feat: full-data UX — complete records, card redesign, agenda navigation, legacy design DNA#20

Merged
ronaldtse merged 11 commits into
mainfrom
feat/full-data-ux
Jul 19, 2026
Merged

feat: full-data UX — complete records, card redesign, agenda navigation, legacy design DNA#20
ronaldtse merged 11 commits into
mainfrom
feat/full-data-ux

Conversation

@ronaldtse

Copy link
Copy Markdown
Contributor

Summary

Redesigns every page to surface the full data model with complete cross-navigation, and restores the legacy site's design DNA onto the token system. Backward compatible (additive payload contracts; consumer ejections like OIML's custom pages render unchanged).

Data surfaces

  • Decision card: identifier (mono), kind, action-type pills (36 humanized verbs), full labeled date, subject, 2-line snippet, meeting chip (only when a meeting page exists — no dead links)
  • Decision detail: reading-progress bar, breadcrumb, full badge row (acclamation, kind, status, all identifiers, labeled 'Adopted …' date, agenda chip → meeting agenda anchor, meeting badge with icon), serif title + subject standfirst, eng/fra LocaleTabs on every localized field, URN bar, DOI, full Actions (type pill + message + effective date) / Considerations / Approvals / Relations / Categories / Dates / Reference docs, prev/next, JSON-LD
  • Meeting card: date/range, city+country, committee chip (three-tier resolved), decision count
  • Meeting detail: committee code + resolved full name, venue cards (address/unlocode/country/map), officers (role, person, affiliation, contact methods), hosts, source PDFs (labeled by language), schedule (wall-offset-correct times), deadlines, note, agenda with per-row anchors + links to the decisions they produced (new decisionByAgendaItem map + agendaAnchor()), declarations, minutes
  • Home: eyebrow hero, data-driven stat strip (N decisions / M meetings / year span), browse-by-decade, recent 5+3 as full cards
  • Search island: rich result cards + action-type facet (top 12 verbs) + snippet search — /data/decisions.json extended additively (actionTypes, status, date, meetingUrn, snippet, facetActions/facetStatuses)

Design

Legacy DNA on tokens: dotted-grid radial motif (both themes, color-mix, print-safe), eyebrow/standfirst/stat-strip/breadcrumb/meta-row primitives, accent action pills, status pills, acclamation badge, meeting-link badge with fill hover, staggered entrances (capped, reduced-motion safe), reading-progress bar. --edoxen-font-serif now aliases --edoxen-font-display (tc184sc4's Fraunces override was silently dropped before).

Verification

  • 122/122 unit (11 new payload specs) · typecheck clean · 33/33 e2e (incl. both agenda-anchor directions, locale-tab switching, standalone CLI)
  • Real datasets: tc184sc4 1547 pages, OIML 2908 (en+fr), tc154 563 — all build clean
  • Playwright screenshot review in light+dark across all page types; iterated fixes (dead meeting chips, venue dedupe, officer labels, schedule offsets, dark contrast)

Changeset: minor (new surfaces, backward compatible).

ronaldtse added 11 commits July 20, 2026 00:12
…da links

DecisionListItem gains status, actionTypes, subject, snippet, date, year
and meetingPageUrn (resolved meeting-page link); facets gain actionTypes
and statuses. MeetingListItem gains committeeCode + decisionCount. New
decisionByAgendaItem map + agendaAnchor() helper power agenda-row ->
decision cross-links. /data/decisions.json and the search-filter island
core are extended (action facet, snippet search) without breaking the
existing SearchableItem contract.
base.css grows the legacy design DNA on the token system: dotted-grid
radial motif on the page canvas (both themes via color-mix on the ink
token), eyebrow/standfirst/stat-strip/breadcrumb/meta-row primitives,
accent action pills, status pills, meeting-link badge, shared card
surface, staggered entrance keyframes (reduced-motion safe), reading
progress bar, and rich search-island result cards (id/kind/action
pills/date/title/snippet/meeting chip) with an action-type facet row.

DecisionCard replaces the bare dl list item: mono identifier, kind,
humanized action pills, full formatted date, serif title link, subject
line, 2-line action snippet and a meeting chip deep-linking to the
meeting page. New UI strings (label.adopted/effective/meeting/
acclamation, section.*, home stats) in all six locales.
DecisionDetail.astro (shared by root + [lang] routes): reading-progress
bar, Home › Decisions › id breadcrumb, back link, metadata badge row
(kind, status pill, all identifiers, labeled adoption date, acclamation
marker, agenda-item chip to the meeting anchor, meeting-link badge with
calendar icon), serif display title with working LocaleTabs (now wired
to the section-tabs island via LocalizedValues per-spelling spans),
subject standfirst, URN bar with copy, DOI line, then headed sections
for Actions (accent-spined cards with verb pill, localized message with
tabs, effective date), Considerations, Approvals, Relations (resolved to
decision links), Categories, Dates and Reference documents, plus
prev/next navigation. JSON-LD preserved in the route wrappers; the
layout is now a thin shell.
MeetingCard: human date range, status pill, resolved committee code
chip, decision count, flag + city/country. MeetingDetail.astro (shared
by root + [lang]): breadcrumb, badge row (type, status, id, ordinal,
committee, date range, place), display title, general-area standfirst,
URN bar, then sections for When, Committee (resolved code + localized
name), Venue cards (kind, name, address, unlocode, country, map url),
Officers (role, person name/affiliation/contact methods), Hosts
(register-resolved labels), Schedule, Deadlines table, Agenda with
#agenda-item-{label} anchors that link rows to the decision they
produced (decisionByAgendaItem) and :target highlight, linked Decisions
list when no agenda exists, Declarations, Minutes, Source documents
(format + language), and Note. Meetings index groups meetings under
decade anchors so the decade timeline scrolls for real.
HomeContent.astro (shared by root + [lang]): eyebrow + display title +
lede hero, stat strip computed from the data (decisions on record,
meetings documented, year span), browse-by-decade linking into the
meetings archive anchors, and the five latest decisions + three recent
meetings rendered as the new full record cards, closing with an about
link.
…faces

fixtures: decision TEST-1 gains considerations, approvals, relations,
doi, agenda_item, categories, urls and a second action; meeting 2025
gains an agenda (item 2 cross-links TEST-1), officers with affiliation
+ contact methods, hosts, schedule components, deadlines, note, venue
address/unlocode/map url and a source PDF. Unit specs cover the new
payload surfaces (actionTypes/status/date/snippet facets, meetingPageUrn,
decisionByAgendaItem, committeeCode, decisionCount). e2e specs assert
the breadcrumb, badge row, agenda-anchor deep links both ways, locale
tab switching, action/consideration/approval/relation sections, venue
cards, officers/hosts/deadlines/note, home stat strip, decade anchors,
the action facet and the extended decisions.json payload. MeetingDetail
dedupes venues by resolved URN so local_ref aliases don't double-render.
…, stagger cap

- decisions.json: only emit meetingUrn when a meeting page exists, so
  unlinked decisions no longer render a chip pointing at a raw date key
- MeetingDetail: header place falls back to the resolved venue's
  city/country; source links render humanized kind + uppercase format
- OfficerList: linked contact methods show the value as link text
- ScheduleTable: render times in UTC (was the build server's zone) and
  label Z timestamps as 'UTC'
- base.css: cap the entrance stagger at 8 steps so late sections on
  long records appear promptly
- HomeContent: breathing room above the About link
Early consumers (tc184sc4) set --edoxen-font-serif in override.css for
Fraunces, but base.css only consumed --edoxen-font-display, silently
dropping their display font. The resolved stack now prefers
--edoxen-font-display and falls back to --edoxen-font-serif, then the
system serif stack.
09:00+08:00 now reads 09:00 (labeled 'UTC+08') instead of being shifted
into the build server's timezone; Z timestamps read UTC.
New UX surfaces across every page (rich cards, full decision/meeting
records, cross-navigation, agenda anchors, editorial home), restored
legacy design DNA on the token system; payload/endpoint shapes are
extended, not changed — backward compatible, no new dependencies.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant