All work

Strive Labs · 2024 → now

Strive — generative UI chat

A marketing OS that answers in live interfaces, not paragraphs. I own the frontend infrastructure behind it — streaming engine, block vocabulary, design system, the lot.

Role
Design engineer, frontend owner
Scope
~85% of commits on the module
Status
In production, still shipping
Link
strivelabs.ai

The short version

The vocabulary I designed

Worth calling out

The rebuild that fixed reliability

The first design asked the model for one big JSON payload holding every block. It worked until answers got complex — several charts, tables, interactive elements — and then it didn't: malformed JSON, truncated responses, silent retry loops.

Where it shows up

Mounted at the product's home route, embedded as a side panel in agent workspaces, and shipped as a sheet inside individual agent screens. Routines get created in it, reports get built in it, agent output gets reviewed and acted on in it.

Under the hood

Core
React 19, TypeScript, Vite 6
State
Zustand, TanStack Query, Context for live sessions
Streaming
Fetch + SSE, custom incremental JSON parser
UI
Tailwind, Radix, in-house ui-core / ui-blocks, Storybook
Rendering
streamdown + react-markdown, Recharts, TanStack Table
Validation
Zod schemas on every streamed block
Models
Claude and OpenAI, configurable per deployment
Backend
Fastify (Node)
Platform
Clerk auth, PostHog analytics
Testing
Vitest, Testing Library, MSW, Playwright E2E
Design system
Storybook, an internal doc site, and Figma, kept in sync
Chat is the easy part. The contract underneath it is the product.

Back to all work