feat: add highlights with home strip, list, detail, and sort/grid views

Stacked on !8

Summary

Highlights feature end to end - home strip, list screen with sort/grid, and a detail view, backed by /highlights.json

Changes

Data layer

  • fetchHighlights maps the postings shape to a camelCase Highlight type; useHighlights (list) + useHighlight (single lookup), one query shared across screens
  • Image URL built from artifact.artifact_assets[0].path + CDLI_BASE -> the endpoint returns relative paths (dl/photo/P273210.jpg), not absolute ones
  • publishedAt and imageUrl are optional by design; 2 of 6 entries have no publish_start

Screens

  • Home: horizontal Highlights strip + View All
  • Highlights (View All): full list with sort menu (A–Z, Z–A, Newest, Oldest) and list/grid toggle, responsive columns, loading + NoConnection states
  • Highlight detail: image, date, HTML body, zoom viewer, "View on CDLI" -> /postings/{id} (the highlight article itself)

Notes

  • Blocked on the Highlights JSON MR. GET /highlights.json returns 500 on production for now
  • Sort is included in the FlashList key so rows are re-measured on reorder; highlight rows vary in height (1 vs 2 line titles, date present or absent) and recycled cells were dropping rows
  • Reuses the existing HtmlContent renderer and ZoomViewer; no new dependencies

Screenshots

Screenshot_2026-08-24_at_1.22.45_PM Screenshot_2026-08-24_at_1.22.32_PM Screenshot_2026-08-24_at_1.22.07_PM

Merge request reports

Loading
Loading