Vibe-coded SaaS needs embeddable Onboard

If you are building a SaaS with Cursor, Claude Code, Codex, or similar tools, you can move very quickly.

That speed is real. So is the danger.

A vibe-coded product can quietly turn into a pile of locally rational subsystems: auth, onboarding, billing glue, import/export, notifications, a home-grown setup wizard, internal admin.

All of them looked "easy enough" when the agent generated version one.

First-run setup is exactly the kind of thing you should question

A checklist is seductive because the first pass looks small: a list, a progress bar, skip buttons.

A few real users later, it is no longer that simple:

  • who is the user when someone is signed in on two devices?
  • which steps are personal vs shared with the workspace?
  • how do facts mark billing connected without double-firing complete?
  • do admins see the same items as members?
  • where does progress live, your Postgres or a hosted store?
  • what happens when someone dismisses — did that look like 100%?

Now you own onboarding software. That may be fine. It may also be nonsense if your actual business is something else.

What a vibe-coded SaaS usually needs

Not "the most advanced digital adoption platform on earth." Usually: "My customers need to finish setup inside the product, and I need that to behave like a real feature."

That is Onboard's lane: embed-only, host-asserted user.id, free local adapter for demos, BYO ($9.99) or Hosted ($19.99) when you go live with publishable keys. Not a $500/mo DAP.

Keep the velocity, drop the accidental ownership

  1. Use AI tools to build the parts that are special to your SaaS.
  2. Buy the narrow boring parts once they become obviously recurring.
  3. Keep the integration simple: widget + session user + workspaceKey + adapter or Hosted keys.
  4. Keep your own backend in control of authz and (for BYO) storage.
<Onboard
  flowId="flw_..."
  publishableKey="bsw_live_pub_..."
  user={{ id: session.userId, name: session.name }}
  workspaceKey={workspace.id}
  authorToken={authorTokenFromBff}
/>

Hand your agent a bounded prompt from Agent prompt template or Give this to your coding agent. Never put host context through MCP.

Pitfalls

  • Generating a Userflow clone when a first-run checklist would ship faster.
  • Inventing user.id instead of the real session id.
  • Leaving secret keys in client env because the agent "just made it work."
  • Treating dismiss as completion.

Related: Onboard · AI coding agents · Embed checklist · vs Userflow · Cursor