· showcase · web + native
Documentation that ships as a website and as in-app help. Same Markdown pipeline, same component library, two emitters — drift is a build error, not a ticket.
useFetch
cache — shared.
lucide-vesk
maps to Compose icons.
Next/Svelte/Astro all stop at the web. Vesk's native emitter is the moat.
component Callout(props: { type: "info"|"warn"; children: any }) {
<div class={`callout callout-${props.type}`}>
<span class="eyebrow">{props.type}</span>
{props.children}
</div>
}
// web: <div class="callout"> → DOM
// native: <Callout> → Surface + Text (Compose)
The compiler proves the callout is valid on both targets; if a prop can't be preserved, build fails — not a runtime surprise.