guidence fix

This commit is contained in:
2026-09-01 12:32:19 +05:30
parent a8e0dc069f
commit fda463f123
5 changed files with 335 additions and 84 deletions

View File

@@ -36,6 +36,14 @@ export interface SetupStep {
title: string;
/** What to do, when it is not done. Never shown once it is. */
todo: string;
/**
* The button that starts the work.
*
* Named for the action, not the destination — "Add your shop details" rather
* than "Go to profile". A step somebody is being walked through has to say
* what pressing it does, or it reads as navigation and gets ignored.
*/
cta: string;
done: boolean;
/** Where the work happens. */
href: string;
@@ -66,6 +74,7 @@ export function setupSteps(input: SetupInput): SetupStep[] {
id: 'profile',
title: 'Complete your shop profile',
todo: 'Add your shop photo and licence — this is what shoppers see.',
cta: 'Add your shop details',
done: isProfileComplete(shop ?? {}),
href: '/admin/profile',
},
@@ -73,6 +82,7 @@ export function setupSteps(input: SetupInput): SetupStep[] {
id: 'people',
title: 'Add your people',
todo: 'Add whoever will run your shops. You can add them before a branch exists.',
cta: 'Add a person',
done: people.length > 0,
href: '/admin/users',
...(people.some(isUnplaced)
@@ -83,6 +93,7 @@ export function setupSteps(input: SetupInput): SetupStep[] {
id: 'branch',
title: 'Open your first branch',
todo: 'Commission an outlet and say who runs it.',
cta: 'Open a branch',
done: branches.length > 0,
href: '/admin/branches/new',
...(branches.length > 0 ? { detail: `${branches.length}` } : {}),
@@ -91,6 +102,7 @@ export function setupSteps(input: SetupInput): SetupStep[] {
id: 'products',
title: 'Get your products in',
todo: 'Import from the catalogue, or upload your own spreadsheet.',
cta: 'Add products',
done: products.length > 0,
href: '/admin/inventory',
/* The waiting state, said plainly. A spreadsheet sits in the catalogue
@@ -107,6 +119,7 @@ export function setupSteps(input: SetupInput): SetupStep[] {
id: 'priced',
title: 'Price and release them',
todo: 'A product with no price cannot be rung up, and one not released reaches no shop.',
cta: 'Price and release',
done: priced.length > 0,
href: '/admin/inventory',
...(products.length > 0 && priced.length < products.length
@@ -117,6 +130,7 @@ export function setupSteps(input: SetupInput): SetupStep[] {
id: 'stocked',
title: 'Put stock on the shelf',
todo: 'Record what you actually hold — nothing sells at a balance of zero.',
cta: 'Add stock',
done: stocked.length > 0,
href: '/admin/inventory',
...(priced.length > 0 && stocked.length < priced.length
@@ -127,6 +141,7 @@ export function setupSteps(input: SetupInput): SetupStep[] {
id: 'onsale',
title: 'See it in the app',
todo: 'Once a product is priced, released, stocked and in a category, shoppers can buy it.',
cta: 'Check the app view',
done: onSale.length > 0,
href: '/admin/inventory',
...(onSale.length > 0 ? { detail: `${onSale.length} on sale` } : {}),