🔍

Onboarding & First-Use Flow (with diagrams)

Date: July 19, 2026 · Companion to doc 22 (getting-started use cases) and doc 05 (PRD). This is the step-by-step path a new customer actually walks — from buying Trackmint to their team’s first task moving across the board — with flow diagrams, not just prose, per the request to make this visual.


1. The whole journey, end to end

flowchart TD
    A["Purchase / choose a plan"] --> B["First login — create account"]
    B --> C{"First person on this workspace?"}
    C -- Yes --> D["Auto-promoted to Administrator"]
    C -- No, invited --> E["Joins with role set by Admin"]
    D --> F["Setup Wizard — Step 1: Confirm Admin"]
    F --> G["Step 2: Company name"]
    G --> H["Step 3: Business type / profession pack"]
    H --> I["Step 4: Team & roles"]
    I --> J["Step 5: Projects / clients"]
    J --> K["Finish setup — clean, empty workspace"]
    E --> K
    K --> L["Board screen — 0 tasks, ready to go"]
    L --> M["Admin/Manager creates first task, assigns a teammate"]
    M --> N["Assignee: Accept assignment"]
    N --> O["Assignee: ▸ Start job"]
    O --> P["Task auto-moves to In Progress column"]
    P --> Q["Time tracked via one-tap timer on the card"]
    Q --> R["Hours flow to Time & Billing → Invoices"]

Every wizard step (F–J) has a Skip link, and a “Just exploring? Load the demo workspace” link that bypasses the whole flow with sample data — so a curious user is never blocked.


2. Step 1 — Purchase → first login → auto-admin

sequenceDiagram
    participant U as New user
    participant App as Trackmint app
    participant FB as Firebase Auth/Firestore

    U->>App: Signs up with email + password
    App->>FB: createUserWithEmailAndPassword()
    FB-->>App: New uid issued
    App->>FB: Load workspaces/{uid} document
    FB-->>App: Not found (first time)
    App->>App: setup.done = false → show Setup Wizard
    Note over App: The person who completes account creation<br/>for a brand-new workspace becomes Administrator —<br/>no separate "claim admin" step needed.

Why this matters: there’s no separate admin-claiming step to forget. The instant a workspace document doesn’t exist yet, the person creating the account IS the admin — the wizard formalizes that by adding them to the roster with role: 'admin' the moment they move past step 1.


3. Steps 2–5 — the setup wizard

flowchart LR
    S1["① You are the Admin<br/>confirm your display name<br/>+ set your hourly rate (default $100)"] --> S2["② Company<br/>company / firm name"]
    S2 --> S3["③ Business type<br/>Software · Law · Contractor · General<br/>(sets the profession pack)"]
    S3 --> S4["④ Team & roles<br/>add teammates: Worker / Manager / Admin"]
    S4 --> S5["⑤ Projects<br/>add your first clients/projects<br/>(full details later in Setup → Projects)"]
    S5 --> Done["Finish setup"]

    style S1 fill:#FCA311,color:#14213D
    style Done fill:#008300,color:#fff

Each step writes into one Firestore-backed document (workspaces/{uid}) — nothing is submitted until “Finish setup,” and Skip just leaves that field at its default (empty roster/company name), never blocking progress.


4. Team roles — who sees what

flowchart TD
    Admin["Administrator<br/>full access — company, team, billing, everything"]
    Manager["Manager<br/>manages workers, sees billing/invoices"]
    Worker["Worker<br/>sees & works ONLY assigned tasks — no billing"]

    Admin -->|manages| Manager
    Manager -->|assigns tasks to| Worker

This is the Housecall-Pro-style 3-tier model (doc 13): the 2-tier Admin/Member default still works for small teams that don’t need the split — Manager is simply a role option a workspace can start using the moment a team needs it.


5. Assign → accept → start (no new columns)

stateDiagram-v2
    [*] --> Assigned: Manager/Admin creates & assigns task
    Assigned --> Accepted: Assignee taps "Accept"
    Accepted --> InProgress: Assignee taps "▸ Start job"
    InProgress --> Done: Task worked & moved through existing columns

This status sits on top of the existing Kanban columns (Backlog/In Progress/Review/Done, or the legal-pack equivalents) — starting a job simply moves the card into whichever column is already labeled “In Progress.” No new column was added, per the explicit decision to keep the board simple across every profession pack for now.


6. Known limit — today’s model is single-login-per-workspace

Interim mitigation shipped in v4: Setup → Viewing as lets the person holding the device pick which roster member they are — Workers/Members then see time only (no $ figures, no Billing/Invoices tabs), while Admins/Managers see everything. It is an honest stand-in, not security: anyone can switch the viewer back.

Right now every person in members[] is a roster/assignment entry under one shared Firebase Auth login — true multi-person login (each teammate signing in with their own account into the same shared company workspace) is not built yet. That means the “assignee gets notified” step is an in-app status badge visible to whoever has the app open today, not a push notification to a specific person’s phone. This is tracked as the next infrastructure piece before the assign/accept/start flow is fully real for a distributed team — see the backlog doc for sequencing.