Guarded extensibility
Custom should mean site-owned—not undocumented.
A real site sometimes needs a pattern the shared catalog should not own. Sights lets trusted code add that capability while preserving the same validation, documentation, review, accessibility, and runtime boundaries.
Same quality contract
A custom component must bring its paperwork.
Registration happens in trusted TypeScript configuration. Declarative page content can select the component by name and supply validated props, but cannot define its code or runtime.
Implemented proof
The mortgage calculator is a first-class catalog component.
This consumer registers a branded educational calculator with a TypeBox schema, Astro renderer, component manifest, generated schema and docs, catalog thumbnail, browser coverage, and one isolated client module.
The server-rendered estimate remains useful before JavaScript loads. Changes are announced through a polite live region, assumptions stay visible, and no visitor data leaves the browser.
- Loads the custom runtime
- 1 route
- Load it accidentally
- 0 routes
- Total catalog entries with the proof
- 25
Trusted implementation
Add the smallest complete capability.
Extension questions
Where custom behavior belongs.
Can a custom component accept raw HTML or class names?
It should not. Site-owned components use the same content safety policy as built-ins. Differences become typed semantic fields; implementation details stay in trusted code.
Does every custom component need JavaScript?
No. Static Astro renderers are preferred. A client module is appropriate only when browser state or interaction materially improves the outcome.
Can a site use React?
The architecture allows framework components as trusted implementation details. Static components should render without hydration; interactive islands should hydrate only the owning component.
When should a custom component move into Sights?
After more than one real consumer proves the same responsibility, prop vocabulary, responsive behavior, accessibility contract, and review need.
See the boundary working
Use the custom calculator, then inspect an ordinary page.
The calculator route loads its declared module. The rest of the product site does not. That small fact is the static-first architecture made visible.