Skip to content

Onboarding app#2350

Open
lkostrowski wants to merge 12 commits into
mainfrom
lkostrowski/onboarding-app
Open

Onboarding app#2350
lkostrowski wants to merge 12 commits into
mainfrom
lkostrowski/onboarding-app

Conversation

@lkostrowski

@lkostrowski lkostrowski commented May 7, 2026

Copy link
Copy Markdown
Member

Takes Onboarding screen from the Dashboard and makes it an app. Together with a new API, app mounts itself as a fullscreen page under /home path

This allows

  1. Onboarding to be uninstalled
  2. Home page screen (which will be eventually default screen) to be customized fully with apps/widgets
CleanShot 2026-06-10 at 15 27 44

Copilot AI review requested due to automatic review settings May 7, 2026 10:58
@changeset-bot

changeset-bot Bot commented May 7, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 4d285c1

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
saleor-app-onboarding Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercel Bot commented May 7, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
saleor-app-avatax Ready Ready Preview, Comment Jun 10, 2026 2:13pm
saleor-app-cms Ready Ready Preview, Comment Jun 10, 2026 2:13pm
saleor-app-klaviyo Ready Ready Preview, Comment Jun 10, 2026 2:13pm
saleor-app-payment-np-atobarai Ready Ready Preview, Comment Jun 10, 2026 2:13pm
saleor-app-payment-stripe Ready Ready Preview, Comment Jun 10, 2026 2:13pm
saleor-app-products-feed Ready Ready Preview, Comment Jun 10, 2026 2:13pm
saleor-app-search Error Error Jun 10, 2026 2:13pm
saleor-app-segment Ready Ready Preview, Comment Jun 10, 2026 2:13pm
saleor-app-smtp Ready Ready Preview, Comment Jun 10, 2026 2:13pm

Request Review

@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown
Contributor

Differences Found

⚠️ 1 packages or licenses were added.

Expand
License	Package
<<missing>> saleor-app-onboarding

Summary

Expand
License Name Package Count Packages
0BSD 1
Packages
  • tslib
CC BY-SA 4.0 1
Packages
  • @cspell/dict-en-common-misspellings
CC0-1.0 1
Packages
  • type-fest
MIT (http://mootools.net/license.txt) 1
Packages
  • slick
MIT/X11 1
Packages
  • nub
Public Domain 1
Packages
  • jsonify
Python-2.0 1
Packages
  • argparse
SEE LICENSE IN LICENSE 1
Packages
  • spawndamnit
SEE LICENSE IN LICENSE.md 1
Packages
  • cookie-lite
Unlicense 1
Packages
  • @sinonjs/text-encoding
WTFPL 1
Packages
  • opener
BlueOak-1.0.0 3
Packages
  • jackspeak
  • package-json-from-dist
  • path-scurry
CC-BY-4.0 3
Packages
  • @saleor/macaw-ui
  • caniuse-lite
  • saleor-apps
LGPL-3.0-or-later 14
Packages
  • @img/sharp-libvips-darwin-arm64
  • @img/sharp-libvips-darwin-x64
  • @img/sharp-libvips-linux-arm
  • @img/sharp-libvips-linux-arm64
  • @img/sharp-libvips-linux-ppc64
  • @img/sharp-libvips-linux-riscv64
  • @img/sharp-libvips-linux-s390x
  • @img/sharp-libvips-linux-x64
  • @img/sharp-libvips-linuxmusl-arm64
  • @img/sharp-libvips-linuxmusl-x64
  • @img/sharp-wasm32
  • @img/sharp-win32-arm64
  • @img/sharp-win32-ia32
  • @img/sharp-win32-x64
BSD-2-Clause 22
Packages
  • cheerio-select
  • css-select
  • css-what
  • domelementtype
  • domhandler
  • domutils
  • dotenv
  • entities
  • escodegen
  • eslint-scope
  • espree
  • esprima
  • esrecurse
  • estraverse
  • esutils
  • glob-to-regexp
  • nth-check
  • shimmer
  • terser
  • uglify-js
  • And 2 more...
<<missing>> 28
Packages
  • @saleor/app-problems
  • @saleor/apps-domain
  • @saleor/apps-logger
  • @saleor/apps-otel
  • @saleor/apps-shared
  • @saleor/apps-trpc
  • @saleor/apps-ui
  • @saleor/dynamo-config-repository
  • @saleor/errors
  • @saleor/eslint-config-apps
  • @saleor/handlebars
  • @saleor/react-hook-form-macaw
  • @saleor/sentry-utils
  • @saleor/typescript-config-apps
  • @saleor/webhook-utils
  • busboy
  • json-query
  • saleor-app-avatax
  • saleor-app-cms
  • saleor-app-klaviyo
  • And 8 more...
BSD-3-Clause 48
Packages
  • @protobufjs/aspromise
  • @protobufjs/base64
  • @protobufjs/codegen
  • @protobufjs/eventemitter
  • @protobufjs/fetch
  • @protobufjs/float
  • @protobufjs/inquire
  • @protobufjs/path
  • @protobufjs/pool
  • @protobufjs/utf8
  • @saleor/app-sdk
  • @saleor/eslint-plugin-saleor-app
  • @sentry/cli
  • @sentry/cli-darwin
  • @sentry/cli-linux-arm
  • @sentry/cli-linux-arm64
  • @sentry/cli-linux-i686
  • @sentry/cli-linux-x64
  • @sentry/cli-win32-i686
  • @sentry/cli-win32-x64
  • And 28 more...
ISC 56
Packages
  • @bundled-es-modules/cookie
  • @bundled-es-modules/statuses
  • @bundled-es-modules/tough-cookie
  • @isaacs/cliui
  • abbrev
  • anymatch
  • boolbase
  • cli-width
  • cliui
  • concat-with-sourcemaps
  • electron-to-chromium
  • fastq
  • flatted
  • foreground-child
  • form-data-lite
  • fs.realpath
  • get-caller-file
  • glob
  • glob-parent
  • graceful-fs
  • And 36 more...
Apache-2.0 241
Packages
  • @ampproject/remapping
  • @aws-crypto/crc32
  • @aws-crypto/crc32c
  • @aws-crypto/ie11-detection
  • @aws-crypto/sha1-browser
  • @aws-crypto/sha256-browser
  • @aws-crypto/sha256-js
  • @aws-crypto/supports-web-crypto
  • @aws-crypto/util
  • @aws-sdk/abort-controller
  • @aws-sdk/chunked-blob-reader
  • @aws-sdk/client-dynamodb
  • @aws-sdk/client-s3
  • @aws-sdk/client-sso
  • @aws-sdk/client-sso-oidc
  • @aws-sdk/client-sts
  • @aws-sdk/config-resolver
  • @aws-sdk/core
  • @aws-sdk/credential-provider-env
  • @aws-sdk/credential-provider-http
  • And 221 more...
MIT 1409
Packages
  • @0no-co/graphql.web
  • @adobe/css-tools
  • @algolia/cache-browser-local-storage
  • @algolia/cache-common
  • @algolia/cache-in-memory
  • @algolia/client-account
  • @algolia/client-analytics
  • @algolia/client-common
  • @algolia/client-personalization
  • @algolia/client-search
  • @algolia/logger-common
  • @algolia/logger-console
  • @algolia/recommend
  • @algolia/requester-browser-xhr
  • @algolia/requester-common
  • @algolia/requester-node-http
  • @algolia/transporter
  • @apidevtools/json-schema-ref-parser
  • @ardatan/relay-compiler
  • @ardatan/sync-fetch
  • And 1389 more...

@codecov

codecov Bot commented May 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 34.19%. Comparing base (aa4983b) to head (4d285c1).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2350      +/-   ##
==========================================
- Coverage   38.00%   34.19%   -3.81%     
==========================================
  Files        1048      892     -156     
  Lines       67133    60165    -6968     
  Branches     3578     2781     -797     
==========================================
- Hits        25515    20575    -4940     
+ Misses      41228    39236    -1992     
+ Partials      390      354      -36     
Flag Coverage Δ
avatax 57.57% <ø> (ø)
cms 20.35% <ø> (ø)
domain 100.00% <ø> (ø)
dynamo-config-repository 79.29% <ø> (ø)
errors 92.00% <ø> (ø)
logger 28.81% <ø> (ø)
np-atobarai 72.66% <ø> (ø)
products-feed 6.01% <ø> (ø)
search 32.31% <ø> (ø)
segment 33.65% <ø> (ø)
shared 56.07% <ø> (ø)
smtp 36.27% <ø> (ø)
stripe ?
webhook-utils 21.35% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 new Onboarding Saleor app (POC) that mounts as a Dashboard home-page widget via the HOME_WIDGETS extension, with client-side onboarding UI and user-metadata persistence.

Changes:

  • Introduces the apps/onboarding Next.js App Router app with manifest + register endpoints and minimal UI shell/providers.
  • Implements onboarding widget UI, state management, metadata persistence, and unit tests for core logic/hooks.
  • Adds app-level tooling/config (ESLint, TS, Vitest, codegen, Sentry) and updates pnpm-lock.yaml.

Reviewed changes

Copilot reviewed 50 out of 55 changed files in this pull request and generated 10 comments.

Show a summary per file
File Description
pnpm-lock.yaml Updates lockfile to include the new onboarding app and dependency graph changes.
apps/onboarding/vitest.config.ts Adds Vitest configuration for onboarding app unit tests.
apps/onboarding/vercel.json Adds Vercel deployment config (regions).
apps/onboarding/turbo.json Declares env vars required for the deploy task in Turbo.
apps/onboarding/tsconfig.json Adds TypeScript config and path aliases for onboarding app.
apps/onboarding/src/modules/onboarding/welcome-page-onboarding.tsx Implements the top-level onboarding widget accordion container.
apps/onboarding/src/modules/onboarding/welcome-page-onboarding-accordion.tsx Renders the per-step accordion UI and loading skeleton.
apps/onboarding/src/modules/onboarding/onboarding-context/utils.ts Adds onboarding state transition helpers and metadata preparation.
apps/onboarding/src/modules/onboarding/onboarding-context/utils.test.ts Unit tests for onboarding context utilities.
apps/onboarding/src/modules/onboarding/onboarding-context/use-onboarding-storage.ts Adds me query + metadata persistence via updateMetadata.
apps/onboarding/src/modules/onboarding/onboarding-context/use-expanded-onboarding-id.ts Hook for selecting which onboarding step is expanded.
apps/onboarding/src/modules/onboarding/onboarding-context/use-expanded-onboarding-id.test.ts Tests for expanded-step selection hook behavior.
apps/onboarding/src/modules/onboarding/onboarding-context/types.ts Declares onboarding context/state/types and storage service interface.
apps/onboarding/src/modules/onboarding/onboarding-context/onboarding-context.tsx Implements the Onboarding context provider and state lifecycle.
apps/onboarding/src/modules/onboarding/onboarding-context/initial-onboarding-state.ts Defines initial steps list and initial persisted state.
apps/onboarding/src/modules/onboarding/hooks/use-onboarding-data.tsx Provides step data (copy + actions) backed by onboarding state.
apps/onboarding/src/modules/onboarding/hooks/use-app-redirect.ts Wraps AppBridge redirect for navigation from widget buttons.
apps/onboarding/src/modules/onboarding/components/step-icon.tsx Adds step completion icon component.
apps/onboarding/src/modules/onboarding/components/fake-disabled-button.tsx Adds a “disabled-looking” button used for permission-gated actions.
apps/onboarding/src/modules/onboarding/components/dashboard-card.tsx Adds a small DashboardCard-like compound component wrapper.
apps/onboarding/src/modules/onboarding/components/buttons/types.ts Defines shared button props.
apps/onboarding/src/modules/onboarding/components/buttons/permission-gated-redirect-button.tsx Adds permission-gated redirect button with tooltip.
apps/onboarding/src/modules/onboarding/components/buttons/orders-button.tsx Adds “Go to orders” step action button.
apps/onboarding/src/modules/onboarding/components/buttons/invite-staff-button.tsx Adds “Invite members” step action button.
apps/onboarding/src/modules/onboarding/components/buttons/extensions-button.tsx Adds extensions navigation step action button.
apps/onboarding/src/modules/onboarding/components/buttons/create-product-button.tsx Adds products navigation step action button.
apps/onboarding/src/modules/onboarding/components/buttons/check-graphql-button.tsx Adds GraphQL playground navigation step action button.
apps/onboarding/src/lib/saleor-app.ts Adds a SaleorApp instance using a no-op APL (client-only app).
apps/onboarding/src/lib/env.ts Adds env validation via @t3-oss/env-nextjs.
apps/onboarding/src/instrumentations/sentry-node.ts Adds Node-runtime Sentry initialization for error reporting.
apps/onboarding/src/instrumentation.ts Adds Next.js instrumentation hook and request error capture.
apps/onboarding/src/app/page.tsx Adds the app root page rendering the client-only widget.
apps/onboarding/src/app/layout.tsx Adds App Router layout with Macaw UI styles.
apps/onboarding/src/app/global-error.tsx Adds global error boundary capturing errors to Sentry.
apps/onboarding/src/app/api/register/route.ts Adds App Router register endpoint for app installation.
apps/onboarding/src/app/api/manifest/route.ts Adds manifest endpoint declaring the HOME_WIDGETS widget extension.
apps/onboarding/src/app/_providers.tsx Adds client providers (AppBridge, urql, theming, NoSSR).
apps/onboarding/src/app/_page-client.tsx Adds client entry that wires providers + onboarding context + UI.
apps/onboarding/sentry.client.config.ts Adds browser-side Sentry initialization.
apps/onboarding/reset.d.ts Enables ts-reset for the onboarding app.
apps/onboarding/README.md Documents app purpose, architecture, and local development steps.
apps/onboarding/package.json Declares onboarding app scripts and dependencies.
apps/onboarding/next.config.ts Adds Next.js config + Sentry integration.
apps/onboarding/next-env.d.ts Adds Next.js TypeScript env typings file.
apps/onboarding/lint-staged.config.js Adds app-specific lint-staged overrides.
apps/onboarding/graphql/queries/me.graphql Adds me query for metadata + permissions.
apps/onboarding/graphql/mutations/update-user-metadata.graphql Adds mutation for persisting onboarding state in metadata.
apps/onboarding/graphql.config.ts Adds GraphQL config pointing at local schema file.
apps/onboarding/eslint.config.js Adds app-specific ESLint configuration and overrides.
apps/onboarding/codegen.ts Adds GraphQL codegen configuration for generated types/documents.
apps/onboarding/.env.example Adds onboarding app env example file.
.changeset/onboarding-app-initial.md Adds changeset announcing the onboarding app introduction.
Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

Comment thread apps/onboarding/src/modules/onboarding/onboarding-context/types.ts
Comment thread apps/onboarding/src/app/api/register/route.ts Outdated
Comment on lines +47 to +50
title: "Create a new product",
description:
"Go to all products from where you can create a new product and view it in all product list. View the product in GraphQL",
isCompleted: isStepCompleted("create-product"),
Copilot AI review requested due to automatic review settings May 12, 2026 11:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 50 out of 55 changed files in this pull request and generated 7 comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

Comment on lines +5 to +9
const handler = createAppRegisterHandler({
apl: saleorApp.apl,
});

export const POST = handler;
Comment on lines +1 to +4
"use client";

import { Accordion, Box, Button, ChervonDownIcon, Text } from "@saleor/macaw-ui";

Comment on lines +1 to +4
"use client";

import { Accordion, Box, ChervonDownIcon, Skeleton, Text } from "@saleor/macaw-ui";

Comment on lines +87 to +94
const toggleOnboarding = (value: boolean) => {
setOnboardingState((prev) => {
const newState = { ...prev, onboardingExpanded: value };

storageService.saveOnboardingState(newState);

return newState;
});
Comment on lines +11 to +21
<Button
ref={ref}
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
cursor="not-allowed"
variant="primary"
boxShadow="none"
aria-disabled
tabIndex={-1}
// Inline styles override macaw-ui's later-applied background classes
style={{
Comment thread apps/onboarding/README.md
Comment on lines +12 to +13
- **Next.js App Router** for both API endpoints (`/api/manifest`, `/api/register`) and UI (`/`).
- **Manifest extension**: `HOME_WIDGETS` mount, `WIDGET` target, `GET` method (the staff JWT
Comment on lines +5 to +7
Introduce the Onboarding app — a standalone Saleor App that mounts on the Dashboard home page
(`HOME_WIDGETS` extension) and walks new users through first-run tasks: creating a product,
exploring orders, opening the GraphQL playground, browsing extensions, and inviting staff.
Copilot AI review requested due to automatic review settings June 10, 2026 13:08

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 52 out of 57 changed files in this pull request and generated 8 comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

Comment thread apps/onboarding/src/app/api/manifest/route.ts
Comment thread apps/onboarding/README.md
Comment thread .changeset/onboarding-app-initial.md
Comment thread apps/onboarding/src/modules/onboarding/onboarding-context/utils.ts
Comment thread apps/onboarding/src/app/test/page.tsx Outdated
@lkostrowski lkostrowski changed the title Onboarding app POC Onboarding app Jun 10, 2026
Copilot AI review requested due to automatic review settings June 10, 2026 14:11
@lkostrowski lkostrowski marked this pull request as ready for review June 10, 2026 14:12
@lkostrowski lkostrowski requested a review from a team as a code owner June 10, 2026 14:12
@lkostrowski lkostrowski requested review from przlada and removed request for przlada June 10, 2026 14:12

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 50 out of 55 changed files in this pull request and generated 10 comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

Comment on lines +34 to +41
homepageUrl: "https://github.com/saleor/apps",
id: env.MANIFEST_APP_ID,
name: env.APP_NAME,
permissions: [],
requiredSaleorVersion: ">=3.23 <4",
supportUrl: "https://saleor.io/discord",
version: packageJson.version,
webhooks: [],
Comment thread apps/onboarding/README.md
Comment on lines +12 to +16
- **Next.js App Router** for both API endpoints (`/api/manifest`, `/api/register`) and UI (`/`).
- **Manifest extension**: `HOME_WIDGETS` mount, `WIDGET` target, `GET` method (the staff JWT
comes from AppBridge automatically).
- **Client-only**: all GraphQL calls run in the browser using the user's JWT issued by AppBridge.
No webhooks, no APL persistence (a no-op APL satisfies the SDK's register handler).
Comment on lines +5 to +7
Introduce the Onboarding app — a standalone Saleor App that mounts on the Dashboard home page
(`HOME_WIDGETS` extension) and walks new users through first-run tasks: creating a product,
exploring orders, opening the GraphQL playground, browsing extensions, and inviting staff.
@@ -0,0 +1,92 @@
"use client";

import { Accordion, Box, Button, ChervonDownIcon, Text } from "@saleor/macaw-ui";
size="small"
data-test-id="onboarding-accordion-trigger"
>
<ChervonDownIcon />
@@ -0,0 +1,78 @@
"use client";

import { Accordion, Box, ChervonDownIcon, Skeleton, Text } from "@saleor/macaw-ui";
transition="ease"
__transform={`${extendedStepId === step.id ? "rotate(180deg)" : "none"}`}
>
<ChervonDownIcon />
Comment on lines +13 to +14
// Matches dashboard's count: view-extensions and view-webhooks are mutually exclusive.
export const TOTAL_STEPS_COUNT = initialOnboardingSteps.length - 1;
Comment on lines +17 to +26
boxShadow="none"
aria-disabled
tabIndex={-1}
// Inline styles override macaw-ui's later-applied background classes
style={{
backgroundColor: isHovered
? vars.colors.background.buttonDefaultPrimaryHovered
: vars.colors.background.buttonDefaultDisabled,
color: vars.colors.text.defaultDisabled,
}}
Comment on lines +69 to +71
description:
"Go to all orders where you can create an fulfilment and refund and review corresponding statuses. View the order in GraphQL",
isCompleted: isStepCompleted("explore-orders"),
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