Building the onboarding tour, and the trap we almost fell into
New users landing in CreatorOS for the first time see an empty dashboard and, right alongside it, a short guided tour — narrated by Nova, our onboarding mascot — that walks through navigation, the dashboard, and the core pages in under a minute. It's skippable at any point, and each step is data-driven: a route, a target element to spotlight, and the copy to show next to it.
The tricky part was Analytics and Growth Coach. Both pages are gated behind connecting a YouTube channel — a brand-new user hasn't done that yet, so the real UI the tour would normally point at (a chart, an insight card) simply doesn't exist in the DOM. The easy option was to just skip those steps entirely for a fresh signup. It would have worked, technically.
Why skipping felt wrong
Skipping a step silently teaches a new user nothing about a feature that's actually core to the product — they'd finish the tour never having heard the words "Growth Coach" at all, just because of timing. So instead, each of those steps got a fallback: when the real target isn't available yet, the tour points at the "Connect YouTube" prompt instead, with different copy explaining what they'll see once they connect. The step still happens. It just tells the truth about what's actually on screen right now, instead of pretending the gated feature doesn't exist or pointing at nothing.
Completion is tracked with a single nullable timestamp on the user record, set whether the tour is finished or explicitly skipped — null just means "hasn't seen it yet," which is what actually drives whether the tour auto-launches. Small detail, but it's the kind of thing that's easy to get backwards (tracking "has seen" as a boolean that silently means two different things) and mildly annoying to fix later once real users have inconsistent states saved.
Want to see what we’ve actually built?
Try CreatorOS free