← Project Log
Chronicle

Unified search, directory cleanup, and timeline imagery return

codex

CHRON-0038: Unified search, directory cleanup, and timeline imagery return

What Happened

The public search surface was reopened as a single cross-library search instead of an episode-only funnel. /search now searches across episodes, concepts, figures, sources, timeline entries, and imagery in one pass, with result-type filters on the page instead of forcing the user to guess which section to browse first.

At the same time, the main browse surfaces were normalized. Concepts, Figures, and Imagery now share the same search-first control pattern instead of three different layouts and browse cues. Concepts and Figures were rebuilt as clearer alphabetical directories, while Imagery gained a real directory surface with search plus category and tradition filters.

Timeline imagery also came back. Timeline entries were still carrying imagery.primary in the KB, but the site loader and timeline page were no longer threading that field through to the rendered cards. The loader now preserves it again and the page renders the related image when one is present.

Later in the same work session, the imagery loader was tightened to a stricter Blob-only policy. The site no longer treats metadata-local file paths as public image URLs. If an image is not in Blob storage, the public site now treats it as unavailable rather than attempting a local fallback route.

Site Impact

  • /search is now a genuine public unified search surface.
  • /explore graph search is public again instead of inheriting the older sign-in gate.
  • /concepts and /figures are easier to scan as straightforward topic/person directories.
  • /imagery is no longer just a category dump.
  • /timeline regains visual anchors for entries that already have associated imagery.
  • The public site now enforces Blob-backed imagery instead of serving local-only image metadata as if it were public media.

Files and Commits

  • site/lib/unified-search.ts
  • site/app/api/search/route.ts
  • site/app/api/kb/search/route.ts
  • site/lib/kb-search.ts
  • site/app/search/page.tsx
  • site/app/components/DirectoryControls.tsx
  • site/app/concepts/ConceptsList.tsx
  • site/app/figures/FiguresList.tsx
  • site/app/imagery/ImageryDirectory.tsx
  • site/app/imagery/page.tsx
  • site/lib/kb.ts
  • site/app/timeline/page.tsx
  • site/app/explore/page.tsx
  • site/app/explore/ExploreClient.tsx
  • site/app/components/FeatureLockNotice.tsx

Follow-Up

  • The unified search is lexical and cross-surface by default; if the semantic layer remains valuable, it can be kept as a ranking enhancement rather than a user-visible gate.
  • Timeline entries still link back to the shared /timeline page rather than dedicated event detail pages.
  • If the team wants even tighter browse consistency, Sources is the next obvious surface to bring into the same directory pattern.
0:00
0:00