Groom - AI-powered in-app onboarding SDK for SaaS The problem New users land in a SaaS product wi...Groom - AI-powered in-app onboarding SDK for SaaS The problem New users land in a SaaS product wi...
The network for creativity
Join 1.25M professional creatives like you
Connect with clients, get discovered, and run your business 100% commission-free
Creatives on Contra have earned over $150M and we are just getting started
Groom - AI-powered in-app onboarding SDK for SaaS The problem New users land in a SaaS product with no guide and quietly leave. Existing onboarding tools need engineers to hand-build tours for every flow, and those tours break the moment the UI changes. We set out to build a layer that drops into any web app with one script tag, understands the live page, and walks users through multi-step tasks on demand.
What I built
Zero-dependency SDK, 23 KB gzipped. Injected with a single script tag and running inside customer apps we don't control. Ships as one IIFE via S3 and CloudFront with beta and stable channels.
Live DOM perception. A budgeted depth-first walk that descends into shadow roots and same-origin iframes, measures geometry against each element's own frame, hit-tests for occlusion, and degrades gracefully under a 180 KB payload budget.
Resilient element targeting. A five-tier selector resolution chain, re-resolution on re-render, delegated capture-phase listeners that survive React reconciliation, and a token system that cancels superseded async steps.
Cross-page guided flows. A state machine persisted across full page loads with a split plan/progress store, 30-minute TTL, resume-at-destination detection, and cross-page back navigation.
Constrained AI design. The LLM only resolves which element matches the user's intent; the step sequence is built deterministically by BFS over recorded navigation edges and verified before display. Accurate and cheap.
Full product dashboard. 24-route Next.js app with analytics across 14 aggregated metrics, an onboarding wizard, integrations, AI settings, and subscriptions, with single-flight token refresh and persisted auth state.
Scale
Around 44,000 lines of TypeScript across three repos, 66 API endpoints, 23 data models, 900+ commits over roughly eight months. Shipped to production infrastructure and accepted into the NVIDIA Inception program.
Stack
Next.js 15, React 19, Tailwind v4, TanStack Query, NestJS 11, PostgreSQL, Gemini 2.5 Flash, TypeScript, Vercel, AWS.
What I learned
Running code inside someone else's app teaches you that the DOM you measured a second ago no longer exists. Most of the engineering value in Groom is in the recovery paths, not the happy path.
Back to feed
The network for creativity
Join 1.25M professional creatives like you
Connect with clients, get discovered, and run your business 100% commission-free
Creatives on Contra have earned over $150M and we are just getting started