@cimplify/cli 0.7.17 → 0.7.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/{add-VSGQEUDS.mjs → add-UXXUPBKR.mjs} +1 -1
  2. package/dist/{chunk-NIDPHJ45.mjs → chunk-GAN7PG6N.mjs} +2 -2
  3. package/dist/{chunk-XKO2EB5J.mjs → chunk-HWHV62KB.mjs} +18 -18
  4. package/dist/{chunk-OJRMBHMT.mjs → chunk-MR3Q43SU.mjs} +1 -1
  5. package/dist/dispatcher.mjs +11 -11
  6. package/dist/{doctor-AMR3MFFS.mjs → doctor-IGQNPWUY.mjs} +2 -2
  7. package/dist/{explain-6LYQ2OL4.mjs → explain-IK2FYBB7.mjs} +2 -2
  8. package/dist/{introspect-HWOZIVET.mjs → introspect-ZS6I46OO.mjs} +2 -2
  9. package/dist/{list-WC7JWDCJ.mjs → list-P74FSKQR.mjs} +1 -1
  10. package/dist/{projects-JSEC2YCX.mjs → projects-QSUWVTJZ.mjs} +27 -4
  11. package/dist/{update-6LL5PQEQ.mjs → update-E6Q3KV3B.mjs} +1 -1
  12. package/package.json +2 -2
  13. package/templates/storefront-auto/app/layout.tsx +11 -2
  14. package/templates/storefront-auto/components/providers.tsx +17 -3
  15. package/templates/storefront-auto/package.json +1 -1
  16. package/templates/storefront-bakery/app/layout.tsx +11 -2
  17. package/templates/storefront-bakery/components/providers.tsx +17 -3
  18. package/templates/storefront-bakery/package.json +1 -1
  19. package/templates/storefront-fashion/app/layout.tsx +11 -2
  20. package/templates/storefront-fashion/components/providers.tsx +17 -3
  21. package/templates/storefront-fashion/package.json +1 -1
  22. package/templates/storefront-grocery/app/layout.tsx +11 -2
  23. package/templates/storefront-grocery/components/providers.tsx +17 -3
  24. package/templates/storefront-grocery/package.json +1 -1
  25. package/templates/storefront-pharmacy/app/layout.tsx +11 -2
  26. package/templates/storefront-pharmacy/components/providers.tsx +17 -3
  27. package/templates/storefront-pharmacy/package.json +1 -1
  28. package/templates/storefront-restaurant/app/layout.tsx +11 -2
  29. package/templates/storefront-restaurant/components/providers.tsx +17 -3
  30. package/templates/storefront-restaurant/package.json +1 -1
  31. package/templates/storefront-retail/app/layout.tsx +11 -2
  32. package/templates/storefront-retail/components/providers.tsx +17 -3
  33. package/templates/storefront-retail/package.json +1 -1
  34. package/templates/storefront-services/app/layout.tsx +11 -2
  35. package/templates/storefront-services/components/providers.tsx +17 -3
  36. package/templates/storefront-services/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { gitDetectRoot, gitCurrentBranch, gitCurrentSha, gitStatusPorcelain } from './chunk-K5464A3L.mjs';
3
3
  import { parseEnvFile } from './chunk-DBZ3UOQ2.mjs';
4
- import { package_default } from './chunk-NIDPHJ45.mjs';
4
+ import { package_default } from './chunk-GAN7PG6N.mjs';
5
5
  import { parseArgs } from './chunk-C4M3DXKC.mjs';
6
6
  import { readAuthOrNull, readProjectLinkOrNull, readProjectState } from './chunk-UBAI443T.mjs';
7
7
  import { bold, dim, yellow, green, info, result, red } from './chunk-E2T2SBP5.mjs';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { TEMPLATES } from './chunk-XKO2EB5J.mjs';
3
- import { package_default } from './chunk-NIDPHJ45.mjs';
2
+ import { TEMPLATES } from './chunk-HWHV62KB.mjs';
3
+ import { package_default } from './chunk-GAN7PG6N.mjs';
4
4
 
5
5
  // src/dispatcher.ts
6
6
  var VERSION = package_default.version ?? "unknown";
@@ -15,7 +15,7 @@ Project:
15
15
  cimplify logout Forget saved credentials
16
16
  cimplify whoami Show the current account/business
17
17
  cimplify projects ls List projects in the current business
18
- cimplify projects create <name> Create a Next.js project
18
+ cimplify projects create <name> Create a storefront project
19
19
  cimplify link <project-id> Link CWD to a Cimplify project (writes .cimplify/project.json)
20
20
  cimplify unlink Remove the local project link
21
21
  cimplify introspect Snapshot the current storefront: auth, link, brand, mock, env, git
@@ -127,7 +127,7 @@ var COMMANDS = {
127
127
  login: () => import('./login-3OD4ND2H.mjs'),
128
128
  logout: () => import('./logout-3RLBZ33M.mjs'),
129
129
  whoami: () => import('./whoami-DNZ7RUTH.mjs'),
130
- projects: () => import('./projects-JSEC2YCX.mjs'),
130
+ projects: () => import('./projects-QSUWVTJZ.mjs'),
131
131
  link: () => import('./link-DZSILT5N.mjs'),
132
132
  unlink: () => import('./unlink-RFK74SFP.mjs'),
133
133
  deploy: () => import('./deploy-YVCYHNSS.mjs'),
@@ -138,16 +138,16 @@ var COMMANDS = {
138
138
  logs: () => import('./logs-YNN2PQ24.mjs'),
139
139
  status: () => import('./status-JSYXM5RT.mjs'),
140
140
  dev: () => import('./dev-ONW2S77K.mjs'),
141
- introspect: () => import('./introspect-HWOZIVET.mjs'),
141
+ introspect: () => import('./introspect-ZS6I46OO.mjs'),
142
142
  inspect: () => import('./inspect-CGYX4DDF.mjs'),
143
- doctor: () => import('./doctor-AMR3MFFS.mjs'),
144
- explain: () => import('./explain-6LYQ2OL4.mjs'),
143
+ doctor: () => import('./doctor-IGQNPWUY.mjs'),
144
+ explain: () => import('./explain-IK2FYBB7.mjs'),
145
145
  assets: () => import('./assets-74SK63TR.mjs'),
146
146
  repo: () => import('./repo-KNQMSPVV.mjs'),
147
- list: () => import('./list-WC7JWDCJ.mjs'),
148
- add: () => import('./add-VSGQEUDS.mjs'),
149
- update: () => import('./update-6LL5PQEQ.mjs'),
150
- upgrade: () => import('./update-6LL5PQEQ.mjs'),
147
+ list: () => import('./list-P74FSKQR.mjs'),
148
+ add: () => import('./add-UXXUPBKR.mjs'),
149
+ update: () => import('./update-E6Q3KV3B.mjs'),
150
+ upgrade: () => import('./update-E6Q3KV3B.mjs'),
151
151
  "auth-step-up": () => import('./auth-step-up-BIUYQJP6.mjs')
152
152
  };
153
153
  var COMMAND_PREFIXES = {
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { gatherIntrospection } from './chunk-OJRMBHMT.mjs';
2
+ import { gatherIntrospection } from './chunk-MR3Q43SU.mjs';
3
3
  import './chunk-K5464A3L.mjs';
4
4
  import './chunk-DBZ3UOQ2.mjs';
5
- import './chunk-NIDPHJ45.mjs';
5
+ import './chunk-GAN7PG6N.mjs';
6
6
  import { parseArgs, flagBool } from './chunk-C4M3DXKC.mjs';
7
7
  import { ApiClient } from './chunk-MAOO6ZZ5.mjs';
8
8
  import { readAuthOrNull } from './chunk-UBAI443T.mjs';
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { package_default } from './chunk-NIDPHJ45.mjs';
2
+ import { package_default } from './chunk-GAN7PG6N.mjs';
3
3
  import { parseArgs } from './chunk-C4M3DXKC.mjs';
4
4
  import { bold, dim, info, result, CliError, CLI_ERROR_CODE } from './chunk-E2T2SBP5.mjs';
5
5
 
@@ -171,7 +171,7 @@ var TOPICS = [
171
171
  "title": "Agent prompts",
172
172
  "description": "Copy-paste prompts for common Cimplify workflows",
173
173
  "source_url": "https://cimplify.dev/docs/agent-prompts",
174
- "body": 'These prompts are deliberately terse. Each one names the canonical doc the agent should read first, the exact commands or [MCP tools](/docs/mcp) to call, and the exit condition. Replace `<angle-bracket>` placeholders before running.\n\nEvery prompt assumes the agent has either:\n\n- the [Cimplify CLI](/docs/cli) installed and `cimplify login` complete, **or**\n- an MCP connection to `https://api.cimplify.io/mcp` ([setup](/docs/mcp#connect))\n\n## Ship a new storefront end-to-end\n\n```text title="Scaffold \u2192 deploy \u2192 custom domain"\nSet up a Cimplify <retail> storefront called <my-store> and deploy it to <shop.example.com>.\n\nSource of truth: https://cimplify.dev/docs/tldr\n- Use the MCP tools at api.cimplify.io/mcp when available; otherwise shell `cimplify <cmd> --json`.\n- After every command, echo the JSON envelope.\n- Stop on the first non-zero exit code and name it from https://cimplify.dev/docs/cli#exit-codes.\n- Poll deployment status with cimplify_get_deployment_status (or `cimplify status --json`); never `sleep`.\n- Idempotent \u2014 re-running any step is safe.\n```\n\n## Rebrand an existing storefront\n\n```text title="Apply a new brand to a scaffolded template"\nRebrand the storefront in <./my-store> to match these tokens:\n name: <Acme Coffee>\n primary: <#0F172A>\n accent: <#F59E0B>\n fontDisplay: <"Playfair Display">\n fontBody: <"Inter">\n\nRules (https://cimplify.dev/docs/templates/brand):\n- Single source of truth is `lib/brand.ts`. Update it first.\n- Mirror color tokens into `app/globals.css` `@theme` block. Do not hard-code colors elsewhere.\n- Do not edit ejected SDK components; they pick up tokens automatically.\n- Run `bun run check:brand` after edits; fix any schema errors it reports.\n- Verify by opening `http://localhost:3000` (start `bun dev` if not running).\n- Commit with message `brand: <name>`. Do not deploy.\n```\n\n## Add a homepage section\n\n```text title="New Server Component section, cache-tagged"\nAdd a `<Stories>` section to the homepage of the storefront in <./my-store>.\n\nPattern (mirrors the Server Component sections under `app/_sections/` in the scaffolded template):\n- Create `app/_sections/stories.tsx` as an async Server Component. Pass `cacheOptions: { revalidate: 3600, tags: [tags.collections()] }` to the SDK read (from `@cimplify/sdk/server`). Do NOT use `\'use cache\'` / `cacheTag` / `cacheLife` \u2014 Cimplify storefronts run on CF Workers where Cache Components is broken; use the ISR Previous Model.\n- Source data from `client.catalogue.getCollection({ slug: "stories" })`.\n- Render with the existing `<SectionHeader>` and `<ProductCard>` SDK components (do not eject).\n- Insert into `app/page.tsx` between the hero and the featured collection.\n- Run `bun run check` \u2014 must pass typecheck, lint, brand, cart-flow, contract.\n- Do not modify `lib/brand.ts` or any file under `components/ui/`.\n```\n\n## Migrate to a new SDK version\n\n```text title="SDK upgrade with breaking-change scan"\nUpgrade the storefront in <./my-store> from `@cimplify/sdk@<0.44.x>` to `@cimplify/sdk@<latest>`.\n\nProcess:\n- Read the release notes for the target range (`npm view @cimplify/sdk versions --json` to list, then `npm view @cimplify/sdk@<version>` per release).\n- Bump the pin in `package.json`, run `bun install`.\n- For each breaking change called out in the changelog, grep the project for the old symbol and apply the documented replacement.\n- Run `bun run check`. If `check:contract` fails, the SDK \u2194 mock contract drifted \u2014 stop and report.\n- Do not run `cimplify deploy`. End by printing a summary of every file you changed and every breaking change you applied.\n```\n\n## Add a custom checkout payment method\n\n```text title="Wire an additional payment option"\nAdd <mobile_money> as a checkout payment option in the storefront at <./my-store>.\n\nReference: https://cimplify.dev/docs/api-reference/checkout (flat ProcessArgs body \u2014 top-level fields, not nested).\n- The body shape is the contract \u2014 never wrap fields.\n- Eject the existing `<PaymentMethodPicker>` component with `cimplify add payment-method-picker`.\n- Add the option in the ejected picker, wiring the provider-specific body (e.g. `mobile_money_details: { phone_number, provider }`).\n- Validate the body against the typed `ProcessArgs` from `@cimplify/sdk`.\n- Run `bun run check:cart` \u2014 the add\u2192checkout flow must still pass.\n```\n\n## Provision a CI deploy key\n\n```text title="One-time setup for headless deploys"\nCreate a CI-scoped API key for the Cimplify project linked at <./my-store>, and write the GitHub Actions snippet that uses it.\n\nSteps:\n- Confirm `.cimplify/project.json` exists; if not, fail with NOT_LINKED (exit 4).\n- Print the dashboard URL the human needs to visit to create the key (https://app.cimplify.io/settings/developer).\n- Once the user provides `dk_live_\u2026`, store it as a repo secret named `CIMPLIFY_API_KEY` (instruct, do not perform).\n- Write `.github/workflows/deploy.yml` that runs on push to main: install CLI via the curl one-liner, `cimplify deploy --prod --api-key "$CIMPLIFY_API_KEY" --yes --json`.\n- Print the exit-code legend from https://cimplify.dev/docs/cli#exit-codes so the workflow can map failures.\n```\n\n## Diagnose a deploy that didn\'t go live\n\n```text title="Triage a failed or stuck deployment"\nThe latest deploy of the project at <./my-store> isn\'t live. Find out why.\n\nTriage path:\n- `cimplify status --json` \u2014 what\'s the latest deployment_id and status?\n- If status is `failed`, `cimplify logs --deployment <id> --json | tail -200`. Quote the first error line you see.\n- If status is `queued` or `building` for >5 minutes, the build is stuck \u2014 try `cimplify rollback <previous-deploy-id>`.\n- If status is `superseded` (exit 2), a newer push raced it; usually fine \u2014 confirm with `cimplify status` again.\n- If domains misroute, `cimplify domains ls --json` \u2014 confirm the verified+attached domain.\n- Report: deployment_id, status, the failing log line (if any), and the recommended next action. Do not auto-rollback without confirming.\n```\n\n## Add a hero image and reference it in the homepage\n\n```text title="Upload brand assets \u2192 use them in source"\nAdd the image at <./Downloads/hero.jpg> as the homepage hero for the storefront in <./my-store>.\n\nReference: https://cimplify.dev/docs/cli/assets\n- `cp <./Downloads/hero.jpg> public/hero/main.jpg`\n- `cimplify assets upload public/hero/ --folder hero --json` \u2014 captures the manifest entry for `hero/main.jpg`.\n- Edit `app/page.tsx`: replace the hero `<Image>` `src` with `assetUrl("hero/main.jpg")` from `@cimplify/sdk`.\n- Do NOT touch existing `<Image>` calls that point at Cloudinary or other external hosts \u2014 the loader passes them through unchanged.\n- Run `bun run check`. Open `http://localhost:3000`; verify the hero image renders.\n- Commit `cimplify-assets.json` along with the source change so the manifest is reviewable.\n```\n\n## Reset a sandbox storefront to a clean state\n\n```text title="Wipe and re-seed for repeatable demos"\nReset the local mock state for the storefront in <./my-store>.\n\n- Stop any running `bun dev` process.\n- `cimplify mock reset` (clears the in-process mock backing store).\n- `cimplify mock seed <retail>` (re-seeds with the chosen industry fixture).\n- `bun dev` to restart both servers.\n- Verify: `curl localhost:8787/v1/catalogue/products | jq \'.data | length\'` returns the expected seed count (~24 for retail).\n- Do not touch the linked cloud project; this is local-only.\n```\n\n## How these are built\n\nEvery prompt above is structured the same way so you can adapt them:\n\n1. **Goal** \u2014 one sentence, with `<angle-bracket>` placeholders for the moving parts.\n2. **Source of truth** \u2014 the canonical doc URL the agent reads first.\n3. **Rules** \u2014 operational guardrails: which tools to call, what to echo, when to stop.\n4. **Exit condition** \u2014 what counts as success, what counts as a halt.\n\nIf you build a prompt that should live here, open a PR against `content/docs/agent-prompts.mdx`. Keep them under ~12 lines; if a workflow needs more, it belongs in a dedicated doc page and the prompt should link to it.\n'
174
+ "body": 'These prompts are deliberately terse. Each one names the canonical doc the agent should read first, the exact commands or [MCP tools](/docs/mcp) to call, and the exit condition. Replace `<angle-bracket>` placeholders before running.\n\nEvery prompt assumes the agent has either:\n\n- the [Cimplify CLI](/docs/cli) installed and `cimplify login` complete, **or**\n- an MCP connection to `https://api.cimplify.io/mcp` ([setup](/docs/mcp#connect))\n\n## Ship a new storefront end-to-end\n\n```text title="Scaffold \u2192 deploy \u2192 custom domain"\nSet up a Cimplify <retail> storefront called <my-store> and deploy it to <shop.example.com>.\n\nSource of truth: https://cimplify.dev/docs/tldr\n- Use the MCP tools at api.cimplify.io/mcp when available; otherwise shell `cimplify <cmd> --json`.\n- After every command, echo the JSON envelope.\n- Stop on the first non-zero exit code and name it from https://cimplify.dev/docs/cli#exit-codes.\n- Poll deployment status with cimplify_get_deployment_status (or `cimplify status --json`); never `sleep`.\n- Idempotent \u2014 re-running any step is safe.\n```\n\n## Rebrand an existing storefront\n\n```text title="Apply a new brand to a scaffolded template"\nRebrand the storefront in <./my-store> to match these tokens:\n name: <Acme Coffee>\n primary: <#0F172A>\n accent: <#F59E0B>\n fontDisplay: <"Playfair Display">\n fontBody: <"Inter">\n\nRules (https://cimplify.dev/docs/templates/brand):\n- Single source of truth is `lib/brand.ts`. Update it first.\n- Mirror color tokens into `app/globals.css` `@theme` block. Do not hard-code colors elsewhere.\n- Do not edit ejected SDK components; they pick up tokens automatically.\n- Run `bun run check:brand` after edits; fix any schema errors it reports.\n- Verify by opening `http://localhost:3000` (start `bun dev` if not running).\n- Commit with message `brand: <name>`. Do not deploy.\n```\n\n## Add a homepage section\n\n```text title="New Server Component section, cache-tagged"\nAdd a `<Stories>` section to the homepage of the storefront in <./my-store>.\n\nPattern (mirrors the Server Component sections under `app/_sections/` in the scaffolded template):\n- Create `app/_sections/stories.tsx` as an async Server Component. Pass `cacheOptions: { revalidate: 3600, tags: [tags.collections()] }` to the SDK read (from `@cimplify/sdk/server`). Do NOT use `\'use cache\'` / `cacheTag` / `cacheLife` \u2014 Cimplify storefronts run on CF Workers where Cache Components is broken; use the ISR Previous Model.\n- Source data from `client.catalogue.getCollection({ slug: "stories" })`.\n- Render with the existing `<SectionHeader>` and `<ProductCard>` SDK components (do not eject).\n- Insert into `app/page.tsx` between the hero and the featured collection.\n- Run `bun run check` \u2014 must pass typecheck, lint, brand, cart-flow, contract.\n- Do not modify `lib/brand.ts` or any file under `components/ui/`.\n```\n\n## Migrate to a new SDK version\n\n```text title="SDK upgrade with breaking-change scan"\nUpgrade the storefront in <./my-store> from `@cimplify/sdk@<0.44.x>` to `@cimplify/sdk@<latest>`.\n\nProcess:\n- Read the release notes for the target range (`npm view @cimplify/sdk versions --json` to list, then `npm view @cimplify/sdk@<version>` per release).\n- Bump the pin in `package.json`, run `bun install`.\n- For each breaking change called out in the changelog, grep the project for the old symbol and apply the documented replacement.\n- Run `bun run check`. If `check:contract` fails, the SDK \u2194 mock contract drifted \u2014 stop and report.\n- Do not run `cimplify deploy`. End by printing a summary of every file you changed and every breaking change you applied.\n```\n\n## Add a custom checkout payment method\n\n```text title="Wire an additional payment option"\nAdd <mobile_money> as a checkout payment option in the storefront at <./my-store>.\n\nReference: https://cimplify.dev/docs/api-reference/checkout (flat ProcessArgs body \u2014 top-level fields, not nested).\n- The body shape is the contract \u2014 never wrap fields.\n- Eject the existing `<PaymentMethodPicker>` component with `cimplify add payment-method-picker`.\n- Add the option in the ejected picker, wiring the provider-specific body (e.g. `mobile_money_details: { phone_number, provider }`).\n- Validate the body against the typed `ProcessArgs` from `@cimplify/sdk`.\n- Run `bun run check:cart` \u2014 the add\u2192checkout flow must still pass.\n```\n\n## Provision a CI deploy key\n\n```text title="One-time setup for headless deploys"\nCreate a CI-scoped API key for the Cimplify project linked at <./my-store>, and write the GitHub Actions snippet that uses it.\n\nSteps:\n- Confirm `.cimplify/project.json` exists; if not, fail with NOT_LINKED (exit 4).\n- Print the dashboard URL the human needs to visit to create the key (https://app.cimplify.io/settings/developer).\n- Once the user provides `dk_live_\u2026`, store it as a repo secret named `CIMPLIFY_API_KEY` (instruct, do not perform).\n- Write `.github/workflows/deploy.yml` that runs on push to main: install CLI via the curl one-liner, `cimplify deploy --prod --api-key "$CIMPLIFY_API_KEY" --yes --json`.\n- Print the exit-code legend from https://cimplify.dev/docs/cli#exit-codes so the workflow can map failures.\n```\n\n## Diagnose a deploy that didn\'t go live\n\n```text title="Triage a failed or stuck deployment"\nThe latest deploy of the project at <./my-store> isn\'t live. Find out why.\n\nTriage path:\n- `cimplify status --json` \u2014 what\'s the latest deployment_id and status?\n- If status is `failed`, `cimplify logs --deployment <id> --json | tail -200`. Quote the first error line you see.\n- If status is `queued` or `building` for >5 minutes, the build is stuck \u2014 try `cimplify rollback <previous-deploy-id>`.\n- If status is `superseded` (exit 2), a newer push raced it; usually fine \u2014 confirm with `cimplify status` again.\n- If domains misroute, `cimplify domains ls --json` \u2014 confirm the verified+attached domain.\n- Report: deployment_id, status, the failing log line (if any), and the recommended next action. Do not auto-rollback without confirming.\n```\n\n## Add a hero image and reference it in the homepage\n\n```text title="Upload brand assets \u2192 use them in source"\nAdd the image at <./Downloads/hero.jpg> as the homepage hero for the storefront in <./my-store>.\n\nReference: https://cimplify.dev/docs/cli/assets\n- `cp <./Downloads/hero.jpg> public/hero/main.jpg`\n- `cimplify assets upload public/hero/ --folder hero --json` \u2014 captures the manifest entry for `hero/main.jpg`.\n- Edit `app/page.tsx`: replace the hero `<Image>` `src` with `assetUrl("hero/main.jpg")` from `@cimplify/sdk`.\n- Do NOT touch existing `<Image>` calls that point at Cloudinary or other external hosts \u2014 the loader passes them through unchanged.\n- Run `bun run check`. Open `http://localhost:3000`; verify the hero image renders.\n- Commit `cimplify-assets.json` along with the source change so the manifest is reviewable.\n```\n\n## Audit caching and asset delivery\n\n```text title="Find caching and asset regressions on a live storefront"\nAudit the live storefront at <https://my-store.mycimplify.com> for caching and asset-delivery regressions.\n\nSources of truth:\n- https://cimplify.dev/docs/sdk/optimization (page + asset caching)\n- https://cimplify.dev/docs/templates/seo-and-resource-hints (responsive images)\n\n- Page cache: curl /, /shop, and a PDP 2\u20133\xD7 each; `X-Cimplify-Edge-Cache` must warm to HIT and `Cache-Control` must carry `s-maxage`. A BYPASS or missing `s-maxage` means the page lost its `revalidate` or carries a Cookie.\n- Asset cache: pull a `/_next/static/*` chunk \u2014 it must be `public, max-age=31536000, immutable`.\n- Images: flag raw `<img>` from a third-party CDN, and Cloudinary URLs with no `/upload/<transform>/` segment (full-resolution originals).\n- Report a table (route/asset, observed header, expected, severity). Do not change source unless asked.\n```\n\n## Reset a sandbox storefront to a clean state\n\n```text title="Wipe and re-seed for repeatable demos"\nReset the local mock state for the storefront in <./my-store>.\n\n- Stop any running `bun dev` process.\n- `cimplify mock reset` (clears the in-process mock backing store).\n- `cimplify mock seed <retail>` (re-seeds with the chosen industry fixture).\n- `bun dev` to restart both servers.\n- Verify: `curl localhost:8787/v1/catalogue/products | jq \'.data | length\'` returns the expected seed count (~24 for retail).\n- Do not touch the linked cloud project; this is local-only.\n```\n\n## How these are built\n\nEvery prompt above is structured the same way so you can adapt them:\n\n1. **Goal** \u2014 one sentence, with `<angle-bracket>` placeholders for the moving parts.\n2. **Source of truth** \u2014 the canonical doc URL the agent reads first.\n3. **Rules** \u2014 operational guardrails: which tools to call, what to echo, when to stop.\n4. **Exit condition** \u2014 what counts as success, what counts as a halt.\n\nIf you build a prompt that should live here, open a PR against `content/docs/agent-prompts.mdx`. Keep them under ~12 lines; if a workflow needs more, it belongs in a dedicated doc page and the prompt should link to it.\n'
175
175
  },
176
176
  {
177
177
  "name": "seeds",
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- export { run as default, extractMockSeed, gatherIntrospection, renderIntrospection } from './chunk-OJRMBHMT.mjs';
2
+ export { run as default, extractMockSeed, gatherIntrospection, renderIntrospection } from './chunk-MR3Q43SU.mjs';
3
3
  import './chunk-K5464A3L.mjs';
4
4
  import './chunk-DBZ3UOQ2.mjs';
5
- import './chunk-NIDPHJ45.mjs';
5
+ import './chunk-GAN7PG6N.mjs';
6
6
  import './chunk-C4M3DXKC.mjs';
7
7
  import './chunk-UBAI443T.mjs';
8
8
  import './chunk-E2T2SBP5.mjs';
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { REGISTRY_INDEX } from './chunk-XKO2EB5J.mjs';
2
+ import { REGISTRY_INDEX } from './chunk-HWHV62KB.mjs';
3
3
  import { parseArgs, flagBool } from './chunk-C4M3DXKC.mjs';
4
4
  import { CliError, CLI_ERROR_CODE, info, bold, dim, green, result } from './chunk-E2T2SBP5.mjs';
5
5
 
@@ -11,7 +11,11 @@ var SUB_LIST = "list";
11
11
  var SUB_CREATE = "create";
12
12
  var FLAG_NO_REPO = "no-repo";
13
13
  var FLAG_CONNECT = "connect";
14
- var PROJECT_TYPE_DEFAULT = "nextjs-app";
14
+ var FLAG_FRAMEWORK = "framework";
15
+ var PROJECT_FRAMEWORK_NEXTJS = "nextjs";
16
+ var PROJECT_FRAMEWORK_TANSTACK_START = "tanstack-start";
17
+ var PROJECT_TYPE_NEXTJS = "nextjs-app";
18
+ var PROJECT_TYPE_TANSTACK_START = "tanstack-start";
15
19
  var COL_GAP = " ";
16
20
  function projectsEndpoint(businessId) {
17
21
  return `/v1/businesses/${encodeURIComponent(businessId)}/projects`;
@@ -56,12 +60,13 @@ async function run(argv) {
56
60
  if (!name) {
57
61
  throw new CliError(
58
62
  CLI_ERROR_CODE.INVALID_INPUT,
59
- `Usage: cimplify projects ${SUB_CREATE} <name> [--no-repo | --connect <url>]`
63
+ `Usage: cimplify projects ${SUB_CREATE} <name> [--framework <nextjs|tanstack-start>] [--no-repo | --connect <url>]`
60
64
  );
61
65
  }
62
66
  await createProject(client, auth.businessId, name, {
63
67
  noRepo: flagBool(args, FLAG_NO_REPO),
64
- connectRemote: flagString(args, FLAG_CONNECT)
68
+ connectRemote: flagString(args, FLAG_CONNECT),
69
+ framework: parseProjectFramework(flagString(args, FLAG_FRAMEWORK))
65
70
  });
66
71
  return;
67
72
  }
@@ -102,6 +107,21 @@ async function listProjects(client, businessId) {
102
107
  }))
103
108
  });
104
109
  }
110
+ function parseProjectFramework(value) {
111
+ if (!value || value === PROJECT_FRAMEWORK_NEXTJS || value === PROJECT_TYPE_NEXTJS) {
112
+ return PROJECT_FRAMEWORK_NEXTJS;
113
+ }
114
+ if (value === PROJECT_FRAMEWORK_TANSTACK_START || value === "tanstack") {
115
+ return PROJECT_FRAMEWORK_TANSTACK_START;
116
+ }
117
+ throw new CliError(
118
+ CLI_ERROR_CODE.INVALID_INPUT,
119
+ `Unknown framework "${value}". Valid options: nextjs, tanstack-start.`
120
+ );
121
+ }
122
+ function projectTypeForFramework(framework) {
123
+ return framework === PROJECT_FRAMEWORK_TANSTACK_START ? PROJECT_TYPE_TANSTACK_START : PROJECT_TYPE_NEXTJS;
124
+ }
105
125
  async function createProject(client, businessId, name, options = {}) {
106
126
  if (options.noRepo && options.connectRemote) {
107
127
  throw new CliError(
@@ -109,7 +129,10 @@ async function createProject(client, businessId, name, options = {}) {
109
129
  "Cannot pass both --no-repo and --connect."
110
130
  );
111
131
  }
112
- const body = { name, project_type: PROJECT_TYPE_DEFAULT };
132
+ const body = {
133
+ name,
134
+ project_type: projectTypeForFramework(options.framework ?? PROJECT_FRAMEWORK_NEXTJS)
135
+ };
113
136
  const project = await client.post(projectsEndpoint(businessId), body);
114
137
  success(`Created project ${project.name} (${project.id})`);
115
138
  if (options.noRepo) {
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { package_default } from './chunk-NIDPHJ45.mjs';
2
+ import { package_default } from './chunk-GAN7PG6N.mjs';
3
3
  import { promptYesNo } from './chunk-ITAFAORS.mjs';
4
4
  import { parseArgs, flagBool, flagString } from './chunk-C4M3DXKC.mjs';
5
5
  import { success, bold, info, dim, result, failure, CliError, CLI_ERROR_CODE, step, isJsonMode } from './chunk-E2T2SBP5.mjs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cimplify/cli",
3
- "version": "0.7.17",
3
+ "version": "0.7.18",
4
4
  "description": "Cimplify CLI — deploy, manage env vars, link projects, and scaffold storefronts",
5
5
  "keywords": [
6
6
  "cimplify",
@@ -45,6 +45,6 @@
45
45
  "vitest": "^4.1.5"
46
46
  },
47
47
  "dependencies": {
48
- "@cimplify/sdk": "^0.70.3"
48
+ "@cimplify/sdk": "^0.72.0"
49
49
  }
50
50
  }
@@ -2,6 +2,7 @@ import type { Metadata } from "next";
2
2
  import { Inter, JetBrains_Mono } from "next/font/google";
3
3
  import "./globals.css";
4
4
  import { Providers } from "@/components/providers";
5
+ import { getServerClient, tags } from "@cimplify/sdk/server";
5
6
  import { Header } from "@/components/header";
6
7
  import { Footer } from "@/components/footer";
7
8
  import { ProductModal } from "@/components/product-modal";
@@ -41,7 +42,15 @@ export async function generateMetadata(): Promise<Metadata> {
41
42
  };
42
43
  }
43
44
 
44
- export default function RootLayout({ children }: { children: React.ReactNode }) {
45
+ export default async function RootLayout({ children }: { children: React.ReactNode }) {
46
+ const server = getServerClient();
47
+ const [bizResult, locResult] = await Promise.all([
48
+ server.business.getInfo({ cacheOptions: { revalidate: 3600, tags: [tags.business()] } }),
49
+ server.business.getLocations({ cacheOptions: { revalidate: 3600, tags: [tags.locations()] } }),
50
+ ]);
51
+ const initialBusiness = bizResult.ok ? bizResult.value : null;
52
+ const initialLocations = locResult.ok ? locResult.value : [];
53
+
45
54
  return (
46
55
  <html lang="en" suppressHydrationWarning className={`${inter.variable} ${mono.variable}`}>
47
56
  <body
@@ -51,7 +60,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
51
60
  <Suspense fallback={null}>
52
61
  <OrganizationJsonLd />
53
62
  </Suspense>
54
- <Providers>
63
+ <Providers initialBusiness={initialBusiness} initialLocations={initialLocations}>
55
64
  <Header />
56
65
  <main className="flex-1 pb-12 w-full">
57
66
  <Suspense fallback={null}>{children}</Suspense>
@@ -1,13 +1,23 @@
1
1
  "use client";
2
2
 
3
3
  import { useMemo, type ReactNode } from "react";
4
- import { createCimplifyClient } from "@cimplify/sdk";
4
+ import { createCimplifyClient, type Business, type Location } from "@cimplify/sdk";
5
5
  import { CimplifyProvider, CartDrawerProvider } from "@cimplify/sdk/react";
6
6
  import { AuthErrorToast } from "@/components/auth-error-toast";
7
7
 
8
8
  // Same-origin client — every request goes through the Next.js rewrite in
9
9
  // next.config.ts, so no CORS preflight ever hits the browser.
10
- export function Providers({ children }: { children: ReactNode }) {
10
+ export function Providers({
11
+ children,
12
+ initialBusiness,
13
+ initialLocations,
14
+ }: {
15
+ children: ReactNode;
16
+ // Server-fetched in app/layout.tsx so prices render in the right currency
17
+ // during SSR (no default-currency flash before the client bootstrap).
18
+ initialBusiness?: Business | null;
19
+ initialLocations?: Location[];
20
+ }) {
11
21
  const client = useMemo(() => {
12
22
  const baseUrl =
13
23
  typeof window !== "undefined" ? window.location.origin : "http://127.0.0.1:8787";
@@ -20,7 +30,11 @@ export function Providers({ children }: { children: ReactNode }) {
20
30
  }, []);
21
31
 
22
32
  return (
23
- <CimplifyProvider client={client}>
33
+ <CimplifyProvider
34
+ client={client}
35
+ initialBusiness={initialBusiness}
36
+ initialLocations={initialLocations}
37
+ >
24
38
  <CartDrawerProvider>
25
39
  {children}
26
40
  <AuthErrorToast />
@@ -17,7 +17,7 @@
17
17
  "check": "bun run typecheck && bun run test:run"
18
18
  },
19
19
  "dependencies": {
20
- "@cimplify/sdk": "^0.70.3",
20
+ "@cimplify/sdk": "^0.72.0",
21
21
  "next": "^16.2.6",
22
22
  "react": "^19.0.0",
23
23
  "react-dom": "^19.0.0"
@@ -2,6 +2,7 @@ import type { Metadata } from "next";
2
2
  import { Inter, Playfair_Display } from "next/font/google";
3
3
  import "./globals.css";
4
4
  import { Providers } from "@/components/providers";
5
+ import { getServerClient, tags } from "@cimplify/sdk/server";
5
6
  import { Header } from "@/components/header";
6
7
  import { Footer } from "@/components/footer";
7
8
  import { ProductModal } from "@/components/product-modal";
@@ -41,7 +42,15 @@ export async function generateMetadata(): Promise<Metadata> {
41
42
  };
42
43
  }
43
44
 
44
- export default function RootLayout({ children }: { children: React.ReactNode }) {
45
+ export default async function RootLayout({ children }: { children: React.ReactNode }) {
46
+ const server = getServerClient();
47
+ const [bizResult, locResult] = await Promise.all([
48
+ server.business.getInfo({ cacheOptions: { revalidate: 3600, tags: [tags.business()] } }),
49
+ server.business.getLocations({ cacheOptions: { revalidate: 3600, tags: [tags.locations()] } }),
50
+ ]);
51
+ const initialBusiness = bizResult.ok ? bizResult.value : null;
52
+ const initialLocations = locResult.ok ? locResult.value : [];
53
+
45
54
  return (
46
55
  <html lang="en" suppressHydrationWarning className={`${inter.variable} ${playfair.variable}`}>
47
56
  <body
@@ -51,7 +60,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
51
60
  <Suspense fallback={null}>
52
61
  <OrganizationJsonLd />
53
62
  </Suspense>
54
- <Providers>
63
+ <Providers initialBusiness={initialBusiness} initialLocations={initialLocations}>
55
64
  <Header />
56
65
  <main className="flex-1 pb-12 w-full">
57
66
  <Suspense fallback={null}>{children}</Suspense>
@@ -1,13 +1,23 @@
1
1
  "use client";
2
2
 
3
3
  import { useMemo, type ReactNode } from "react";
4
- import { createCimplifyClient } from "@cimplify/sdk";
4
+ import { createCimplifyClient, type Business, type Location } from "@cimplify/sdk";
5
5
  import { CimplifyProvider, CartDrawerProvider } from "@cimplify/sdk/react";
6
6
  import { AuthErrorToast } from "@/components/auth-error-toast";
7
7
 
8
8
  // Same-origin client — every request goes through the Next.js rewrite in
9
9
  // next.config.ts, so no CORS preflight ever hits the browser.
10
- export function Providers({ children }: { children: ReactNode }) {
10
+ export function Providers({
11
+ children,
12
+ initialBusiness,
13
+ initialLocations,
14
+ }: {
15
+ children: ReactNode;
16
+ // Server-fetched in app/layout.tsx so prices render in the right currency
17
+ // during SSR (no default-currency flash before the client bootstrap).
18
+ initialBusiness?: Business | null;
19
+ initialLocations?: Location[];
20
+ }) {
11
21
  const client = useMemo(() => {
12
22
  const baseUrl =
13
23
  typeof window !== "undefined" ? window.location.origin : "http://127.0.0.1:8787";
@@ -20,7 +30,11 @@ export function Providers({ children }: { children: ReactNode }) {
20
30
  }, []);
21
31
 
22
32
  return (
23
- <CimplifyProvider client={client}>
33
+ <CimplifyProvider
34
+ client={client}
35
+ initialBusiness={initialBusiness}
36
+ initialLocations={initialLocations}
37
+ >
24
38
  <CartDrawerProvider>
25
39
  {children}
26
40
  <AuthErrorToast />
@@ -17,7 +17,7 @@
17
17
  "check": "bun run typecheck && bun run test:run"
18
18
  },
19
19
  "dependencies": {
20
- "@cimplify/sdk": "^0.70.3",
20
+ "@cimplify/sdk": "^0.72.0",
21
21
  "next": "^16.2.6",
22
22
  "react": "^19.0.0",
23
23
  "react-dom": "^19.0.0"
@@ -2,6 +2,7 @@ import type { Metadata } from "next";
2
2
  import { Inter, Anton } from "next/font/google";
3
3
  import "./globals.css";
4
4
  import { Providers } from "@/components/providers";
5
+ import { getServerClient, tags } from "@cimplify/sdk/server";
5
6
  import { Header } from "@/components/header";
6
7
  import { Footer } from "@/components/footer";
7
8
  import { ProductModal } from "@/components/product-modal";
@@ -42,7 +43,15 @@ export async function generateMetadata(): Promise<Metadata> {
42
43
  };
43
44
  }
44
45
 
45
- export default function RootLayout({ children }: { children: React.ReactNode }) {
46
+ export default async function RootLayout({ children }: { children: React.ReactNode }) {
47
+ const server = getServerClient();
48
+ const [bizResult, locResult] = await Promise.all([
49
+ server.business.getInfo({ cacheOptions: { revalidate: 3600, tags: [tags.business()] } }),
50
+ server.business.getLocations({ cacheOptions: { revalidate: 3600, tags: [tags.locations()] } }),
51
+ ]);
52
+ const initialBusiness = bizResult.ok ? bizResult.value : null;
53
+ const initialLocations = locResult.ok ? locResult.value : [];
54
+
46
55
  return (
47
56
  <html lang="en" suppressHydrationWarning className={`${inter.variable} ${anton.variable}`}>
48
57
  <body
@@ -52,7 +61,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
52
61
  <Suspense fallback={null}>
53
62
  <OrganizationJsonLd />
54
63
  </Suspense>
55
- <Providers>
64
+ <Providers initialBusiness={initialBusiness} initialLocations={initialLocations}>
56
65
  <Header />
57
66
  <main className="flex-1 pb-12 w-full">
58
67
  <Suspense fallback={null}>{children}</Suspense>
@@ -1,13 +1,23 @@
1
1
  "use client";
2
2
 
3
3
  import { useMemo, type ReactNode } from "react";
4
- import { createCimplifyClient } from "@cimplify/sdk";
4
+ import { createCimplifyClient, type Business, type Location } from "@cimplify/sdk";
5
5
  import { CimplifyProvider, CartDrawerProvider } from "@cimplify/sdk/react";
6
6
  import { AuthErrorToast } from "@/components/auth-error-toast";
7
7
 
8
8
  // Same-origin client — every request goes through the Next.js rewrite in
9
9
  // next.config.ts, so no CORS preflight ever hits the browser.
10
- export function Providers({ children }: { children: ReactNode }) {
10
+ export function Providers({
11
+ children,
12
+ initialBusiness,
13
+ initialLocations,
14
+ }: {
15
+ children: ReactNode;
16
+ // Server-fetched in app/layout.tsx so prices render in the right currency
17
+ // during SSR (no default-currency flash before the client bootstrap).
18
+ initialBusiness?: Business | null;
19
+ initialLocations?: Location[];
20
+ }) {
11
21
  const client = useMemo(() => {
12
22
  const baseUrl =
13
23
  typeof window !== "undefined" ? window.location.origin : "http://127.0.0.1:8787";
@@ -20,7 +30,11 @@ export function Providers({ children }: { children: ReactNode }) {
20
30
  }, []);
21
31
 
22
32
  return (
23
- <CimplifyProvider client={client}>
33
+ <CimplifyProvider
34
+ client={client}
35
+ initialBusiness={initialBusiness}
36
+ initialLocations={initialLocations}
37
+ >
24
38
  <CartDrawerProvider>
25
39
  {children}
26
40
  <AuthErrorToast />
@@ -19,7 +19,7 @@
19
19
  "check": "bun run typecheck && bun run test:run"
20
20
  },
21
21
  "dependencies": {
22
- "@cimplify/sdk": "^0.70.3",
22
+ "@cimplify/sdk": "^0.72.0",
23
23
  "next": "^16.2.6",
24
24
  "react": "^19.0.0",
25
25
  "react-dom": "^19.0.0"
@@ -2,6 +2,7 @@ import type { Metadata } from "next";
2
2
  import { Inter } from "next/font/google";
3
3
  import "./globals.css";
4
4
  import { Providers } from "@/components/providers";
5
+ import { getServerClient, tags } from "@cimplify/sdk/server";
5
6
  import { Header } from "@/components/header";
6
7
  import { Footer } from "@/components/footer";
7
8
  import { ProductModal } from "@/components/product-modal";
@@ -35,7 +36,15 @@ export async function generateMetadata(): Promise<Metadata> {
35
36
  };
36
37
  }
37
38
 
38
- export default function RootLayout({ children }: { children: React.ReactNode }) {
39
+ export default async function RootLayout({ children }: { children: React.ReactNode }) {
40
+ const server = getServerClient();
41
+ const [bizResult, locResult] = await Promise.all([
42
+ server.business.getInfo({ cacheOptions: { revalidate: 3600, tags: [tags.business()] } }),
43
+ server.business.getLocations({ cacheOptions: { revalidate: 3600, tags: [tags.locations()] } }),
44
+ ]);
45
+ const initialBusiness = bizResult.ok ? bizResult.value : null;
46
+ const initialLocations = locResult.ok ? locResult.value : [];
47
+
39
48
  return (
40
49
  <html lang="en" suppressHydrationWarning className={inter.variable}>
41
50
  <body
@@ -45,7 +54,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
45
54
  <Suspense fallback={null}>
46
55
  <OrganizationJsonLd />
47
56
  </Suspense>
48
- <Providers>
57
+ <Providers initialBusiness={initialBusiness} initialLocations={initialLocations}>
49
58
  <Header />
50
59
  <main className="flex-1 pb-12 w-full">
51
60
  <Suspense fallback={null}>{children}</Suspense>
@@ -1,13 +1,23 @@
1
1
  "use client";
2
2
 
3
3
  import { useMemo, type ReactNode } from "react";
4
- import { createCimplifyClient } from "@cimplify/sdk";
4
+ import { createCimplifyClient, type Business, type Location } from "@cimplify/sdk";
5
5
  import { CimplifyProvider, CartDrawerProvider } from "@cimplify/sdk/react";
6
6
  import { AuthErrorToast } from "@/components/auth-error-toast";
7
7
 
8
8
  // Same-origin client — every request goes through the Next.js rewrite in
9
9
  // next.config.ts, so no CORS preflight ever hits the browser.
10
- export function Providers({ children }: { children: ReactNode }) {
10
+ export function Providers({
11
+ children,
12
+ initialBusiness,
13
+ initialLocations,
14
+ }: {
15
+ children: ReactNode;
16
+ // Server-fetched in app/layout.tsx so prices render in the right currency
17
+ // during SSR (no default-currency flash before the client bootstrap).
18
+ initialBusiness?: Business | null;
19
+ initialLocations?: Location[];
20
+ }) {
11
21
  const client = useMemo(() => {
12
22
  const baseUrl =
13
23
  typeof window !== "undefined" ? window.location.origin : "http://127.0.0.1:8787";
@@ -20,7 +30,11 @@ export function Providers({ children }: { children: ReactNode }) {
20
30
  }, []);
21
31
 
22
32
  return (
23
- <CimplifyProvider client={client}>
33
+ <CimplifyProvider
34
+ client={client}
35
+ initialBusiness={initialBusiness}
36
+ initialLocations={initialLocations}
37
+ >
24
38
  <CartDrawerProvider>
25
39
  {children}
26
40
  <AuthErrorToast />
@@ -17,7 +17,7 @@
17
17
  "check": "bun run typecheck && bun run test:run"
18
18
  },
19
19
  "dependencies": {
20
- "@cimplify/sdk": "^0.70.3",
20
+ "@cimplify/sdk": "^0.72.0",
21
21
  "next": "^16.2.6",
22
22
  "react": "^19.0.0",
23
23
  "react-dom": "^19.0.0"
@@ -2,6 +2,7 @@ import type { Metadata } from "next";
2
2
  import { Inter, JetBrains_Mono } from "next/font/google";
3
3
  import "./globals.css";
4
4
  import { Providers } from "@/components/providers";
5
+ import { getServerClient, tags } from "@cimplify/sdk/server";
5
6
  import { Header } from "@/components/header";
6
7
  import { Footer } from "@/components/footer";
7
8
  import { ProductModal } from "@/components/product-modal";
@@ -41,7 +42,15 @@ export async function generateMetadata(): Promise<Metadata> {
41
42
  };
42
43
  }
43
44
 
44
- export default function RootLayout({ children }: { children: React.ReactNode }) {
45
+ export default async function RootLayout({ children }: { children: React.ReactNode }) {
46
+ const server = getServerClient();
47
+ const [bizResult, locResult] = await Promise.all([
48
+ server.business.getInfo({ cacheOptions: { revalidate: 3600, tags: [tags.business()] } }),
49
+ server.business.getLocations({ cacheOptions: { revalidate: 3600, tags: [tags.locations()] } }),
50
+ ]);
51
+ const initialBusiness = bizResult.ok ? bizResult.value : null;
52
+ const initialLocations = locResult.ok ? locResult.value : [];
53
+
45
54
  return (
46
55
  <html lang="en" suppressHydrationWarning className={`${inter.variable} ${mono.variable}`}>
47
56
  <body
@@ -51,7 +60,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
51
60
  <Suspense fallback={null}>
52
61
  <OrganizationJsonLd />
53
62
  </Suspense>
54
- <Providers>
63
+ <Providers initialBusiness={initialBusiness} initialLocations={initialLocations}>
55
64
  <Header />
56
65
  <main className="flex-1 pb-12 w-full">
57
66
  <Suspense fallback={null}>{children}</Suspense>