Skip to content

First-login quickstart spotlight tour#6

Merged
thomastschinkel merged 8 commits into
masterfrom
feat/quickstart-guide
Jun 14, 2026
Merged

First-login quickstart spotlight tour#6
thomastschinkel merged 8 commits into
masterfrom
feat/quickstart-guide

Conversation

@thomastschinkel

Copy link
Copy Markdown
Collaborator

Summary

  • Show a one-time spotlight tour (driver.js, ~5 KB, MIT, lazy-loaded on the dashboard) to brand-new users on their first dashboard visit, instead of a full-screen modal.
  • Steps anchor small popovers to the real Providers and Templates sidebar items and the prompt box (data-tour attributes), with a dimmed page + cutout around each element.
  • Gated by a new profiles.has_seen_quickstart flag (existing users backfilled to true); finishing or skipping the tour persists true.
  • Popover is dark-themed on-brand via design tokens (.openthorn-tour in index.css). Steps whose target isn't in the DOM (e.g. collapsed sidebar on mobile) are skipped.

Deploy step

The migration supabase/migrations/20260614010000_add_quickstart_flag.sql must be applied (supabase db push). It has already been applied to the live bloom project.

Test Plan

  • npm run test — 224 passing (incl. new quickstart.test.ts)
  • npm run build — succeeds; driver.js confirmed in the lazy DashboardPage chunk, not the main bundle
  • npm run lint — 0 errors
  • Manual: with has_seen_quickstart = false, load /dashboard → tour spotlights Providers → Templates → prompt box; reload → does not reappear

Copilot AI review requested due to automatic review settings June 14, 2026 15:22
@vercel

vercel Bot commented Jun 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
openthorn Ready Ready Preview, Comment Jun 14, 2026 3:22pm

@thomastschinkel thomastschinkel merged commit bc96107 into master Jun 14, 2026
3 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a one-time, first-login onboarding experience on the Dashboard using a driver.js “spotlight tour”, gated by a new profiles.has_seen_quickstart flag persisted in Supabase.

Changes:

  • Adds has_seen_quickstart to public.profiles and backfills existing users to “seen”.
  • Wires a 3-step driver.js tour into DashboardPage and adds data-tour anchors to the sidebar + prompt area.
  • Adds driver.js theming styles, a small unit test suite for the step config/predicate, and documentation describing the feature.

Reviewed changes

Copilot reviewed 10 out of 11 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
supabase/migrations/20260614010000_add_quickstart_flag.sql Adds has_seen_quickstart column + backfills existing rows to true.
src/pages/DashboardPage.tsx Fetches flag, launches tour once, and persists dismissal. Adds data-tour="prompt".
src/lib/quickstart.ts Defines tour step config and shouldShowQuickstart predicate.
src/lib/dashboard-tour.ts Implements driver.js tour runner and “skip missing targets” behavior.
src/lib/tests/quickstart.test.ts Unit tests for quickstart predicate and step selectors.
src/index.css Adds dark theme styles for driver.js popovers.
src/components/DashboardSidebar/DashboardSidebar.tsx Adds data-tour anchors to Providers/Templates nav items.
package.json Adds driver.js dependency.
package-lock.json Locks driver.js@1.4.0.
docs/superpowers/specs/2026-06-14-quickstart-guide-design.md New design doc (currently describes a modal flow rather than the implemented spotlight tour).
docs/superpowers/plans/2026-06-14-quickstart-guide.md New implementation plan doc (currently describes a modal + Templates deep-linking rather than the implemented spotlight tour).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/index.css
Comment on lines +149 to +168
.driver-popover.openthorn-tour .driver-popover-navigation-btns button {
background: var(--color-accent);
color: #fff;
text-shadow: none;
border: none;
border-radius: 8px;
padding: 0.45rem 0.9rem;
font-weight: 600;
}
.driver-popover.openthorn-tour .driver-popover-navigation-btns button:hover {
background: var(--color-accent-glow);
}
.driver-popover.openthorn-tour .driver-popover-prev-btn {
background: transparent;
color: var(--color-text-secondary);
border: 1px solid var(--color-border-visible);
}
.driver-popover.openthorn-tour .driver-popover-prev-btn:hover {
background: rgba(255, 255, 255, 0.06);
}
Comment on lines +8 to +14
A one-time welcome modal that appears the first time a user lands on the
Dashboard after signing up. It walks through a short sequence of slides covering
what OpenThorn is, where to connect a provider, where Templates live, how to open
the Restaurant Landing template, and the core build/deploy flow. Each feature
slide carries an **action button** that closes the modal and navigates the user
to the relevant place. The guide is shown once per account, tracked via a flag on
the `profiles` table.
Comment on lines +5 to +9
**Goal:** Show a one-time, 5-slide welcome modal to brand-new users on their first Dashboard visit, pointing them to Providers, Templates, the Restaurant Landing template, and the build/deploy flow.

**Architecture:** A DB flag `profiles.has_seen_quickstart` gates the modal (existing users backfilled to `true`). DashboardPage fetches the flag, renders a new `QuickstartGuide` component when it is `false`, and flips it to `true` on dismiss. Pure slide config + show-once predicate live in a testable `src/lib/quickstart.ts` module. A small deep-link addition to TemplatesPage lets the Restaurant slide open that template's preview directly.

**Tech Stack:** React 19 + TypeScript, React Router v7, Supabase (Postgres + RLS), CSS Modules, Vitest (node env).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants