← showcase

· showcase · web + native

Signal Docs

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.

2 targets
1 model
web + android help
0 drift
same commit
tokens → theme
1 Markdown
pipeline
unified MD → HTML/Compose

The sharing that matters

  • Design: Tailwind tokens → Compose Material 3 theme (one source, not two).
  • Content: Unified Markdown → HTML on web, Text composables on Android.
  • Logic: Validation, routing groups, useFetch cache — shared.
  • Icons: lucide-vesk maps to Compose icons.

Next/Svelte/Astro all stop at the web. Vesk's native emitter is the moat.

Vs status quo

  • Docs in Notion + native help in Figma: 2 systems, constant drift.
  • Docs in Next + help in React Native: 2 codebases, 2 designs, 2 bugs.
  • Vesk: 1 lib, 2 emitters — change once, ships twice, build fails if semantics diverge.

Library excerpt — same file, two outputs

				
					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.