Groom - AI-Powered In-App Onboarding SDK for SaaS
View completed workwww.usegroom.com

Groom
In-app onboarding SDK powered by AI 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 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.
How it works
Peek into a client dashboard, showing how Groom works.
A client dahsbord that has the groom SDK
What I built
A zero-dependency embeddable SDK (23 KB gzipped) injected via a single
<script> tag, running safely inside customer apps I don't control. Ships as a single IIFE via S3 + CloudFront with beta and stable channels.Live DOM perception: a budgeted depth-first walk that descends into open 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 so the backend never hard-rejects a snapshot.
Resilient element targeting: a five-tier selector resolution chain plus re-resolution on re-render, delegated capture-phase listeners that survive React reconciliation, and a token system that cancels superseded async steps. Every guard exists because a real customer app broke the naive version.
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. This keeps guidance accurate and cheap.
Full product surface: 24-route Next.js dashboard (analytics with 14 aggregated metrics, onboarding wizard, integrations, AI settings, subscriptions) with single-flight token refresh and persisted auth state.
Scale of the work
~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.
Groom Landing page
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.
0 likes · 2 views · Aug 22, 2026
Developed an AI-powered in-app onboarding SDK for SaaS applications.
Timeline
Nov 20, 2025 - Ongoing
