AaaS · Onboarding · code-true walkthrough

From first visit to activated Canvas.

Every entry channel, every email that fires (with its real subject and link), and every onboarding screen — in the order they actually happen. Read straight from the code, not the roadmap.

Sources · aaas.com/functions · apps/platform/select · AaaS-Love/canvas Verified 2026-07-16 Supersedes · /delivery-funnel (see the gap section)
The whole thing on one line

The path, end to end

A person lands, signs in, and — if they're new — walks a five-step wizard while a context pipeline runs in the background. Two transactional emails bracket that (welcome at sign-up, context-ready when the pipeline finishes), and a day-based cadence follows.

01
Landing
aaas.love · "I am a…"
02
Sign in
Google · Email · WorkOS SSO
03
Account seeded
status:created · step 1 · welcome email
04
5-step wizard
Context→Agents→Task→Vault→Welcome
05
Canvas
step ≥ done → dashboard + cadence emails
Stage 01–02

01Entry channels → what fires

There is one convergence point. Whether someone signs in with Google, email/password, or enterprise SSO, the very first server write is the same, and it's what kicks the whole funnel off.

aaas.love landing page with the radial 'I am a Wanderer / Start Wandering' hero and a live demo-agent chat panel
aaas.love — the public front door. "Tell us who you are", a live demo agent, and Login.
AaaS Canvas public showcase — a grid of dashboard cards (Member Home, Ops, Marketing Analytics, Content, Fleet, Soundboard)
aaas-canvas-live.web.app — the Canvas showcase (seed data). Signed-in users get the same shell with real data.

The convergence: one bridge, one write

Every new Firebase Auth user (Google, email/password, or a workos_<id> account minted by the SSO callback) fires functions/src/authOnboardingBridge.ts. It writes users/{uid} with status:"created", onboardingStep:1, creditBalance:50. That single create fans out to two triggers:

Trigger AonboardingInitializer.ts — seeds credits + a user_profiles/{uid} doc and creates context_pipelines/{uid} (status:"queued"). This is what the wizard's first step watches.
Trigger BonboardingSequencePersonalizer.ts — classifies intent (Vertex AI) and schedules the email cadence. Which ladder depends on whether signupChannel is set.
Channel attribution. WorkOS SSO stamps signupChannel from the entry domain (persistSignupMetadatadomainToChannelId); inbound-email first-touch stamps signupChannel:"direct_email". A plain Google/email sign-up has no channel — which routes it down the legacy 5-email ladder instead of the per-domain cadence (see below).
Stage 03 · the money question

02Which emails send — the real ladder

Two emails are triggered by status transitions on users/{uid} (emailTriggers.ts → emailOnUserUpdate). The rest are a day-based cadence scheduled at sign-up. Every subject and link below is verbatim from the template source. Brand base: platformUrl = https://aaas.love.

EmailFires whenSubject (verbatim)Primary linkTemplate
welcome status → created (no signupChannel) Welcome, ${firstName} — your agents are one email away “Open the dashboard” → aaas.love/dashboard welcome.ts
welcome_per_domain status → created (+ signupChannel) per-channel (12 aaas-* variants via routeWelcomeForChannel) per-channel builder welcome/channel-router.ts
context_ready status → context_ready Your context package for ${domain} is ready “Download Context Package” → packageUrl ?? /dashboard context-ready.ts
context_engine_explainer deep-context close-out Your context engine is online, ${firstName} “See all 12 surfaces →” → aaas.love/select context-engine-explainer.ts
first_task first agent_tasks write (day-0 cadence) Send your first prompt to ${agentName} “Send my prompt →” → mailto:${agentEmail} first-task.ts
three_new_agents cadence · day 2 Three new agents joined your supervisor “Browse the full catalog →” → catalogUrl three-new-agents.ts
new_agent_solutions cadence · day 5 New solution available — ${periodLabel} “See everything new →” → seeAllUrl new-agent-solutions.ts
architecture_brief cadence · day 7 (enterprise / sso only) ${industry} agent stack — briefed for ${companyName} “Get the full brief →” + “Book a 30-min call →” (calendar.app.google/…) architecture-brief.ts
legacy onboarding_sequence 1–5 no signupChannel days 0/2/4/7/14 e.g. “Welcome to AaaS — your AI workforce is being assembled” · “The one agent ${firstName} should try first” · … “Open Skill Vault” → aaas.love/vault onboarding-sequence.ts

Every send passes an opt-out check (email-preferences-guard.ts): global emailOptIn, then a per-category flag (defaults to send). Two examples below are rendered straight from the template code — this is exactly what lands in the inbox.

Rendered welcome email: 'Welcome, Jordan.' with a list of agent handles at aaas.name and a red 'Open the dashboard' button
welcome — fires at sign-up. Note the handle domain: @aaas.name.
Rendered first-task email prompting the user to send their first prompt to an agent
first_task — day-0 cadence, a ready-to-send prompt for the chosen agent.
Rendered three-new-agents email introducing three new agents with sample tasks
three_new_agents — the day-2 cadence nudge.
Gap noticed: the repo has no email preview/render mechanism — templates are only asserted as strings in tests. The three images above were produced by a one-off render of the real template functions. Worth adding a render → HTML script so emails are reviewable.
Stage 04 · the screens

03The onboarding wizard — five steps

Shown by AuthGate whenever onboardingStep < done. The steps are context → agents → first_task → vault → welcome; the parent persists the step index after each advance. Step 1 watches the context pipeline; steps 2–4 read what that pipeline produced.

Onboarding step 1 Context — a form for goal, company, mission, one-liner and ideal customer, with a 'What's next' checklist

Step 1 Context

Seed the business context every agent and dashboard reads. In the platform build this animates a live pipeline checklist; in the Canvas port it captures goal, company, mission, one-liner and ICP.

ReadsonSnapshot(context_pipelines/{uid}) — status + per-step status
Writesthe intake + context datapoints (goal / company / mission / one-liner / ICP)
Advanceauto when the pipeline completes (or “Continue anyway” after a stall)
Onboarding step 2 Agents — a picker of matched specialist agents with sample tasks

Step 2 Agents

Pick the specialist you'll hand your first task to. Cards come from the context pipeline's suggestions — with a static fallback when it hasn't produced any (which, today, it usually hasn't).

Readscontext_pipelines.suggestedAgents → fallback list
WritesfavoriteAgents on the star toggle; selection held client-side
Advancemanual — “Continue with this agent”
Onboarding step 3 First Task — a ready-to-send email brief for the chosen agent with copy and open-in-email buttons

Step 3 First Task

A pre-written brief for the chosen agent, with copy-to-clipboard and open-in-email.

Writesnothing server-side — purely a client mailto: / clipboard
Advancemanual — any of three buttons; sending is never verified
Truth & gap: the wizard's “first task” never creates an agent_tasks doc — so the day-0 first_task cadence email (which fires on the first real agent_tasks write) will not trigger from finishing this step alone.
Onboarding step 4 Vault — a skill vault tour and recommended-skill cards

Step 4 Vault

A short tour of the skill vault plus up to five recommended skills matched to context.

Readscontext_pipelines.recommendedSkills (this field is populated for business emails)
Advancemanual — “Start using AaaS”
Onboarding step 5 Welcome — a completion screen with 'You're all set', quick actions and stats

Step 5 Welcome

“You're all set” — a celebration with quick actions. Finishing writes the done step and reloads into the dashboard.

WritesonboardingStep = DONE · platform done = 5; the Canvas gate exits at < 6, so completion writes 6
Advance“Enter Dashboard” → finishOnboarding() → reload
The 5-vs-6 landmine. The platform's ONBOARDING_DONE_STEP is 5, but the vendored Canvas gate keeps the wizard open while onboardingStep < 6. Completion therefore writes 6 — the only value that satisfies both. Writing 5 would trap a Canvas user in the wizard forever.
Stage 05 · after the wizard

04Where they land, and what's waiting

Onboarding and the app share one route — /select, gated by AuthGate. Once onboardingStep clears the threshold, the same gate renders the Canvas shell instead of the wizard. These are the surfaces a member lands in.

Canvas Account surface with credits, projects, invoices and the 'Where should the canvas open?' preference
Account — plan, projects, invoices + the landing preference.
Canvas member Support surface with a request form and past tickets
Support — open a request, track past ones.
Brief composer modal — Submit a brief with an agent picker
Submit a brief — the task composer, on every member surface.
Ops Users admin table with per-user role selectors and deactivate buttons
Ops · Users — operator user management.
Foundry worker roster dashboard with maturity board and task queue
Foundry — the agent worker roster.
CRO Scores dashboard with an overall gauge and per-dimension breakdown
CRO Scores — conversion diagnostics.
The comparison you asked for

05Gaps vs the current /delivery-funnel page

The live aaas-design.web.app/delivery-funnel page describes a 10-stage pipeline — but much of it predates the current onboarding and has drifted from the code. These are the substantive gaps to close before that page is overwritten with this one.

delivery-funnel says

Agents are emailed at {agent-id}@aaas.select; a “Challenge Invite” template, no sign-up.

code today

Handles are <handle>@aaas.name; the real first email is welcome.ts (“your agents are one email away”). No “ChallengeInviteTemplate” exists.

delivery-funnel says

Execution runs on Agent Zero dispatched to GCE VMs (A0 → VM → callback).

code today

Agent Zero LLM-routing was retired 2026-05-21; AI is direct gemini-2.5-flash. The A0/VM stages are legacy.

delivery-funnel says

Delivery lives at aaas-canvas.web.app/#/portal/{id} and /#/zui/{id}.

code today

The one Canvas is aaas-canvas-live.web.app (+ the platform /select Canvas 2.0). ZUI is a dashboard kind inside the Canvas, not a separate portal route.

delivery-funnel says

Nothing about a step-by-step onboarding wizard, the status-transition emails, the cadence ladder, context_pipelines, or onboardingStep.

code today

The entire current onboarding — the 5-step wizard + the email ladder documented above — is missing from that page. This is the biggest gap.

delivery-funnel says

Five fixed personas (developer / researcher / executive / agent-builder / enterprise) drive all comms.

code today

Email routing keys off signupChannel + Vertex intent classification, not those five persona labels. The persona idea survives only loosely.

For a person

06Human test plan

A quick end-to-end pass. Tick each; if the “expect” doesn't happen, that's the bug.

  1. Open aaas.love.the “I am a …” radial hero and a Login button are visible.
  2. Click Login and sign in (Google or WorkOS).you land on /select — either the wizard (new user) or the Canvas (returning).
  3. As a new user, walk the wizard: Context → Agents → First Task → Vault → Welcome.the step counter climbs “1 of 5” → “5 of 5”; Back/Continue work.
  4. On Agents, pick an agent; on First Task, click “Copy”/“Open in email”.the brief copies / your mail client opens — no error.
  5. Finish (“Enter Dashboard”).the wizard closes and the Canvas dashboard renders; refreshing does not re-open the wizard.
  6. Check your inbox.the welcome email arrived — subject “Welcome, … — your agents are one email away”, agent handles at @aaas.name, a working “Open the dashboard” link.
  7. Open Account → Support → Submit a brief.each surface renders; the brief modal opens and accepts a submission.
For the Claude Code Chrome plugin

07Handover — a click-only walkthrough

Front-end smoke test only. The agent just clicks and checks what appears — no login, no typing beyond the wizard fields, no back-end. Use the public Canvas showcase so nothing is gated.

Start URL: https://aaas-canvas-live.web.app  ·  Goal: confirm the onboarding wizard and the main dashboards render and advance. Report pass/fail per step.
  1. Go to https://aaas-canvas-live.web.app.a page titled “Fleet — public showcase” with a grid of dashboard cards.
  2. Click the “Member Home” card.the Canvas shell opens with a left rail and a home dashboard.
  3. In the address bar, add #personal/onboarding and press Enter.the onboarding wizard appears, showing “Step 1 of 5 · Context”.
  4. Click the primary “Continue” button (bottom-right).it advances to “Step 2 of 5 · Agents” and shows agent cards.
  5. Click an agent card, then “Continue”.“Step 3 of 5 · First Task” with a Copy / Open-in-email pair.
  6. Click “Continue” twice more.“Step 4 · Vault”, then “Step 5 · Welcome — You're all set”.
  7. Click “Enter dashboard”.the wizard closes; a dashboard renders (no error overlay).
  8. Back on the showcase, click each remaining card (Ops, Marketing Analytics, Content, Fleet, Soundboard).each opens its dashboard without a blank screen or console-blocking error.
Keep it dumb-simple: if a button isn't where the step says, that step fails — don't improvise a workaround. One line per step: step N — PASS/FAIL — what you saw.