Tokens, atoms, and widgets — all in one place.
Every component on every Bob surface — marketing, dashboard, portal — composes from the same tokens. This page lists them. Engineers building integrations or extensions should start here.
Nine atoms compose everything else.
Mono · Pill · Dot · AIBlock · BobBtn · BobInput · HR · I (icon) · BobMark. All atoms read live from useBob(), so palette + density tweaks propagate everywhere.
Form, KV, Avatar, ThemeToggle, EmptyState.
Three palettes, three type pairings, three densities.
Every token lives in src/design-system/tokens.ts. To change a palette everywhere, edit one record.
Eight global components for the marketing site.
These live under src/features/marketing/ and are imported by every marketing page. None of them should be copied; if a page needs a variant, extend the component.
Seven conventions every marketing page follows.
When a new page is needed, start from these — they keep the whole site coherent and hand-off ready without a design review.
One breakpoint. Eleven utility classes.
Shipped inline in the SSR’d <head>so mobile’s first paint already has the right layout. Breakpoint is max-width: 768px. No JS hook, no hydration mismatch.
Source: src/app/layout.tsx → RESPONSIVE_CSS. Edit there to add a class or shift the breakpoint.
Every marketing route is indexable, cited, and NZ-geo-targeted.
Adding a new public route? Drop an adjacent layout.tsx next to your page.tsx and call pageMeta(). Sitemap + robots regenerate automatically.
The next twenty insurance brokerages will not be built on spreadsheets.
We’re onboarding ten design-partner brokerages this quarter. If your book is between 1,000 and 12,000 policies, we should talk.