MenuChevron Down
Architecture - Docs - Artefact

Architecture

This project is built on HonoX + @hono/vite-ssg (SSG, static site generation). Pages emit static HTML by default; only components that genuinely need client-side interactivity are "promoted" to islands (client JS snippets).

Every component's hydration behaviour funnels through the shouldHydrate predicate in app/components/ui/island-utils.ts. Any decision about when to render static HTML versus when to mount a client-side island is resolved here — see Hydration for the full tier model, decision rules, and per-component classification.

  1. Zero redundant JS — components with no interaction need never ship a hydration script.
  2. Zero silent breakage — components that do need interaction should hydrate automatically, even if the caller forgets to pass interactive.
  3. Single source of truth — every "should this hydrate?" decision goes through one shared shouldHydrate function, eliminating per-component ad-hoc if (interactive) branches.