Skip to content

Onboarding app POC#2350

Draft
lkostrowski wants to merge 5 commits intomainfrom
lkostrowski/onboarding-app
Draft

Onboarding app POC#2350
lkostrowski wants to merge 5 commits intomainfrom
lkostrowski/onboarding-app

Conversation

@lkostrowski
Copy link
Copy Markdown
Member

No description provided.

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

changeset-bot Bot commented May 7, 2026

🦋 Changeset detected

Latest commit: 1260448

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
Copy link
Copy Markdown

vercel Bot commented May 7, 2026

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

9 Skipped Deployments
Project Deployment Actions Updated (UTC)
saleor-app-avatax Skipped Skipped Comment May 7, 2026 0:40am
saleor-app-cms Skipped Skipped Comment May 7, 2026 0:40am
saleor-app-klaviyo Skipped Skipped May 7, 2026 0:40am
saleor-app-payment-np-atobarai Skipped Skipped Comment May 7, 2026 0:40am
saleor-app-payment-stripe Skipped Skipped May 7, 2026 0:40am
saleor-app-products-feed Skipped Skipped Comment May 7, 2026 0:40am
saleor-app-search Skipped Skipped May 7, 2026 0:40am
saleor-app-segment Skipped Skipped Comment May 7, 2026 0:40am
saleor-app-smtp Skipped Skipped Comment May 7, 2026 0:40am

Request Review

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

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 11
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-s390x
  • @img/sharp-libvips-linux-x64
  • @img/sharp-libvips-linuxmusl-arm64
  • @img/sharp-libvips-linuxmusl-x64
  • @img/sharp-wasm32
  • @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 239
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 219 more...
MIT 1411
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 1391 more...

@codecov
Copy link
Copy Markdown

codecov Bot commented May 7, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 37.84%. Comparing base (4af78c1) to head (1260448).

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #2350   +/-   ##
=======================================
  Coverage   37.84%   37.84%           
=======================================
  Files        1037     1037           
  Lines       66945    66945           
  Branches     3534     3534           
=======================================
  Hits        25338    25338           
  Misses      41226    41226           
  Partials      381      381           
Flag Coverage Δ
avatax 57.57% <ø> (ø)
cms 20.36% <ø> (ø)
domain 100.00% <ø> (ø)
dynamo-config-repository 79.29% <ø> (ø)
errors 91.66% <ø> (ø)
logger 28.81% <ø> (ø)
np-atobarai 72.58% <ø> (ø)
products-feed 6.00% <ø> (ø)
search 31.88% <ø> (ø)
segment 33.58% <ø> (ø)
shared 56.07% <ø> (ø)
smtp 35.74% <ø> (ø)
stripe 70.83% <ø> (ø)
webhook-utils 11.02% <ø> (ø)

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

☔ View full report in Codecov by Sentry.
📢 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.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

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 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 +21
export type OnboardingState = {
stepsCompleted: OnboardingStepsIDs[];
stepsExpanded: Record<OnboardingStepsIDs, boolean>;
onboardingExpanded: boolean;
};
Comment on lines +9 to +16
const debounce = <Args extends unknown[]>(fn: (...args: Args) => void, ms: number) => {
let timer: ReturnType<typeof setTimeout> | null = null;

return (...args: Args) => {
if (timer) clearTimeout(timer);
timer = setTimeout(() => fn(...args), ms);
};
};
Comment on lines +77 to +80
const debouncedSave = useMemo(
() => debounce(saveOnboardingState, 1000),
[saveOnboardingState],
) as StorageService["saveOnboardingState"];
Comment on lines +68 to +72
const userMetadata = prepareUserMetadata(user.metadata, onboardingState);

await saveMetadata({ id: user.id, input: userMetadata }).catch(() => {
// intentionally swallowed — widget continues to work without persistence
});
Comment on lines +87 to +95
const toggleOnboarding = (value: boolean) => {
setOnboardingState((prev) => {
const newState = { ...prev, onboardingExpanded: value };

storageService.saveOnboardingState(newState);

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

export const POST = handler;
Comment on lines +15 to +20
cursor="not-allowed"
variant="primary"
boxShadow="none"
aria-disabled
tabIndex={-1}
// Inline styles override macaw-ui's later-applied background classes
Comment on lines +67 to +71
id: "explore-orders",
title: "Explore orders",
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"),
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"),
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