@cimplify/sdk 0.44.34 → 0.45.1

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 (470) hide show
  1. package/README.md +21 -16
  2. package/dist/advanced.d.mts +1 -1
  3. package/dist/advanced.d.ts +1 -1
  4. package/dist/{client-5B9IPDmf.d.ts → client-Bsd4Vi_y.d.ts} +1 -0
  5. package/dist/{client-CpVMRI8V.d.mts → client-C5LcbNxL.d.mts} +1 -0
  6. package/dist/{client-DMhRxuzm.d.ts → client-DjzIoewX.d.ts} +1 -1
  7. package/dist/{client-Cwb1sMr3.d.mts → client-EM8xKCPO.d.mts} +1 -1
  8. package/dist/index.d.mts +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/react.d.mts +120 -45
  11. package/dist/react.d.ts +120 -45
  12. package/dist/react.js +453 -97
  13. package/dist/react.mjs +452 -98
  14. package/dist/server.d.mts +2 -2
  15. package/dist/server.d.ts +2 -2
  16. package/dist/styles.css +2 -2
  17. package/dist/testing/suite.d.mts +2 -2
  18. package/dist/testing/suite.d.ts +2 -2
  19. package/dist/testing.d.mts +2 -2
  20. package/dist/testing.d.ts +2 -2
  21. package/package.json +5 -9
  22. package/registry/booking-page.json +2 -1
  23. package/registry/bookings-page.json +1 -1
  24. package/registry/index.json +24 -0
  25. package/dist/cli/commands/deploy.mjs +0 -717
  26. package/dist/cli/commands/dev.mjs +0 -479
  27. package/dist/cli/commands/domains.mjs +0 -769
  28. package/dist/cli/commands/env.mjs +0 -705
  29. package/dist/cli/commands/link.mjs +0 -378
  30. package/dist/cli/commands/login.mjs +0 -584
  31. package/dist/cli/commands/logout.mjs +0 -75
  32. package/dist/cli/commands/logs.mjs +0 -432
  33. package/dist/cli/commands/projects.mjs +0 -473
  34. package/dist/cli/commands/repo.mjs +0 -584
  35. package/dist/cli/commands/rollback.mjs +0 -553
  36. package/dist/cli/commands/status.mjs +0 -450
  37. package/dist/cli/commands/unlink.mjs +0 -79
  38. package/dist/cli/commands/whoami.mjs +0 -285
  39. package/dist/cli.js +0 -184
  40. package/dist/dispatcher.mjs +0 -360
  41. package/registry/service-card.json +0 -16
  42. package/registry/service-grid.json +0 -16
  43. package/templates/storefront-bakery/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  44. package/templates/storefront-bakery/.cursor/rules/cimplify-storefront.mdc +0 -25
  45. package/templates/storefront-bakery/.env.example +0 -16
  46. package/templates/storefront-bakery/AGENTS.md +0 -120
  47. package/templates/storefront-bakery/CLAUDE.md +0 -22
  48. package/templates/storefront-bakery/README.md +0 -73
  49. package/templates/storefront-bakery/__tests__/brand.test.ts +0 -4
  50. package/templates/storefront-bakery/__tests__/cart-flow.test.ts +0 -4
  51. package/templates/storefront-bakery/__tests__/contract.test.ts +0 -4
  52. package/templates/storefront-bakery/app/about/page.tsx +0 -38
  53. package/templates/storefront-bakery/app/accessibility/page.tsx +0 -11
  54. package/templates/storefront-bakery/app/account/addresses/page.tsx +0 -21
  55. package/templates/storefront-bakery/app/account/orders/page.tsx +0 -21
  56. package/templates/storefront-bakery/app/account/page.tsx +0 -22
  57. package/templates/storefront-bakery/app/account/settings/page.tsx +0 -21
  58. package/templates/storefront-bakery/app/cart/page.tsx +0 -9
  59. package/templates/storefront-bakery/app/categories/[slug]/listing-client.tsx +0 -19
  60. package/templates/storefront-bakery/app/categories/[slug]/page.tsx +0 -118
  61. package/templates/storefront-bakery/app/checkout/page.tsx +0 -17
  62. package/templates/storefront-bakery/app/collections/[slug]/listing-client.tsx +0 -20
  63. package/templates/storefront-bakery/app/collections/[slug]/page.tsx +0 -118
  64. package/templates/storefront-bakery/app/contact/contact-form.tsx +0 -109
  65. package/templates/storefront-bakery/app/contact/page.tsx +0 -54
  66. package/templates/storefront-bakery/app/error.tsx +0 -60
  67. package/templates/storefront-bakery/app/faq/page.tsx +0 -46
  68. package/templates/storefront-bakery/app/globals.css +0 -47
  69. package/templates/storefront-bakery/app/layout.tsx +0 -82
  70. package/templates/storefront-bakery/app/llms.txt/route.ts +0 -94
  71. package/templates/storefront-bakery/app/login/page.tsx +0 -17
  72. package/templates/storefront-bakery/app/not-found.tsx +0 -39
  73. package/templates/storefront-bakery/app/opensearch.xml/route.ts +0 -37
  74. package/templates/storefront-bakery/app/orders/[id]/page.tsx +0 -21
  75. package/templates/storefront-bakery/app/page.tsx +0 -97
  76. package/templates/storefront-bakery/app/privacy/page.tsx +0 -44
  77. package/templates/storefront-bakery/app/returns/page.tsx +0 -11
  78. package/templates/storefront-bakery/app/robots.ts +0 -18
  79. package/templates/storefront-bakery/app/search/page.tsx +0 -38
  80. package/templates/storefront-bakery/app/search/search-client.tsx +0 -7
  81. package/templates/storefront-bakery/app/shipping/page.tsx +0 -16
  82. package/templates/storefront-bakery/app/shop/page.tsx +0 -31
  83. package/templates/storefront-bakery/app/shop/shop-client.tsx +0 -27
  84. package/templates/storefront-bakery/app/signup/page.tsx +0 -17
  85. package/templates/storefront-bakery/app/sitemap-page/page.tsx +0 -167
  86. package/templates/storefront-bakery/app/sitemap.ts +0 -62
  87. package/templates/storefront-bakery/app/terms/page.tsx +0 -44
  88. package/templates/storefront-bakery/app/track-order/page.tsx +0 -24
  89. package/templates/storefront-bakery/app/track-order/track-order-form.tsx +0 -69
  90. package/templates/storefront-bakery/components/account-iframe.tsx +0 -13
  91. package/templates/storefront-bakery/components/cart-drawer.tsx +0 -14
  92. package/templates/storefront-bakery/components/cart-pill.tsx +0 -36
  93. package/templates/storefront-bakery/components/category-grid.tsx +0 -28
  94. package/templates/storefront-bakery/components/collection-strip.tsx +0 -45
  95. package/templates/storefront-bakery/components/footer.tsx +0 -148
  96. package/templates/storefront-bakery/components/header.tsx +0 -43
  97. package/templates/storefront-bakery/components/hero.tsx +0 -25
  98. package/templates/storefront-bakery/components/nav-link.tsx +0 -20
  99. package/templates/storefront-bakery/components/policy-page.tsx +0 -49
  100. package/templates/storefront-bakery/components/product-modal.tsx +0 -104
  101. package/templates/storefront-bakery/components/providers.tsx +0 -35
  102. package/templates/storefront-bakery/components/store-product-card.tsx +0 -87
  103. package/templates/storefront-bakery/lib/brand.ts +0 -570
  104. package/templates/storefront-bakery/lib/cart.ts +0 -12
  105. package/templates/storefront-bakery/next.config.ts +0 -42
  106. package/templates/storefront-bakery/package.json +0 -35
  107. package/templates/storefront-bakery/postcss.config.mjs +0 -7
  108. package/templates/storefront-bakery/tsconfig.json +0 -23
  109. package/templates/storefront-bakery/vitest.config.ts +0 -9
  110. package/templates/storefront-fashion/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  111. package/templates/storefront-fashion/.cursor/rules/cimplify-storefront.mdc +0 -25
  112. package/templates/storefront-fashion/.env.example +0 -16
  113. package/templates/storefront-fashion/AGENTS.md +0 -126
  114. package/templates/storefront-fashion/CLAUDE.md +0 -22
  115. package/templates/storefront-fashion/README.md +0 -77
  116. package/templates/storefront-fashion/__tests__/brand.test.ts +0 -4
  117. package/templates/storefront-fashion/__tests__/cart-flow.test.ts +0 -55
  118. package/templates/storefront-fashion/__tests__/contract.test.ts +0 -4
  119. package/templates/storefront-fashion/app/about/page.tsx +0 -41
  120. package/templates/storefront-fashion/app/accessibility/page.tsx +0 -11
  121. package/templates/storefront-fashion/app/account/addresses/page.tsx +0 -21
  122. package/templates/storefront-fashion/app/account/orders/page.tsx +0 -21
  123. package/templates/storefront-fashion/app/account/page.tsx +0 -22
  124. package/templates/storefront-fashion/app/account/settings/page.tsx +0 -21
  125. package/templates/storefront-fashion/app/cart/page.tsx +0 -9
  126. package/templates/storefront-fashion/app/categories/[slug]/listing-client.tsx +0 -19
  127. package/templates/storefront-fashion/app/categories/[slug]/page.tsx +0 -130
  128. package/templates/storefront-fashion/app/checkout/page.tsx +0 -17
  129. package/templates/storefront-fashion/app/collections/[slug]/listing-client.tsx +0 -20
  130. package/templates/storefront-fashion/app/collections/[slug]/page.tsx +0 -130
  131. package/templates/storefront-fashion/app/contact/contact-form.tsx +0 -109
  132. package/templates/storefront-fashion/app/contact/page.tsx +0 -54
  133. package/templates/storefront-fashion/app/error.tsx +0 -61
  134. package/templates/storefront-fashion/app/faq/page.tsx +0 -46
  135. package/templates/storefront-fashion/app/globals.css +0 -46
  136. package/templates/storefront-fashion/app/layout.tsx +0 -78
  137. package/templates/storefront-fashion/app/llms.txt/route.ts +0 -94
  138. package/templates/storefront-fashion/app/login/page.tsx +0 -17
  139. package/templates/storefront-fashion/app/lookbook/page.tsx +0 -132
  140. package/templates/storefront-fashion/app/not-found.tsx +0 -39
  141. package/templates/storefront-fashion/app/opensearch.xml/route.ts +0 -37
  142. package/templates/storefront-fashion/app/orders/[id]/page.tsx +0 -24
  143. package/templates/storefront-fashion/app/page.tsx +0 -183
  144. package/templates/storefront-fashion/app/privacy/page.tsx +0 -44
  145. package/templates/storefront-fashion/app/products/[slug]/page.tsx +0 -165
  146. package/templates/storefront-fashion/app/products/[slug]/product-detail.tsx +0 -70
  147. package/templates/storefront-fashion/app/returns/page.tsx +0 -11
  148. package/templates/storefront-fashion/app/robots.ts +0 -18
  149. package/templates/storefront-fashion/app/search/page.tsx +0 -38
  150. package/templates/storefront-fashion/app/search/search-client.tsx +0 -7
  151. package/templates/storefront-fashion/app/shipping/page.tsx +0 -16
  152. package/templates/storefront-fashion/app/shop/page.tsx +0 -63
  153. package/templates/storefront-fashion/app/shop/shop-client.tsx +0 -32
  154. package/templates/storefront-fashion/app/signup/page.tsx +0 -17
  155. package/templates/storefront-fashion/app/sitemap-page/page.tsx +0 -167
  156. package/templates/storefront-fashion/app/sitemap.ts +0 -59
  157. package/templates/storefront-fashion/app/size-guide/page.tsx +0 -155
  158. package/templates/storefront-fashion/app/terms/page.tsx +0 -44
  159. package/templates/storefront-fashion/app/track-order/page.tsx +0 -24
  160. package/templates/storefront-fashion/app/track-order/track-order-form.tsx +0 -69
  161. package/templates/storefront-fashion/components/account-iframe.tsx +0 -13
  162. package/templates/storefront-fashion/components/brand-marquee.tsx +0 -27
  163. package/templates/storefront-fashion/components/cart-drawer.tsx +0 -14
  164. package/templates/storefront-fashion/components/cart-pill.tsx +0 -36
  165. package/templates/storefront-fashion/components/category-grid.tsx +0 -28
  166. package/templates/storefront-fashion/components/category-tiles.tsx +0 -104
  167. package/templates/storefront-fashion/components/collection-strip.tsx +0 -45
  168. package/templates/storefront-fashion/components/feature-hero.tsx +0 -82
  169. package/templates/storefront-fashion/components/footer.tsx +0 -153
  170. package/templates/storefront-fashion/components/header.tsx +0 -43
  171. package/templates/storefront-fashion/components/hero.tsx +0 -28
  172. package/templates/storefront-fashion/components/nav-link.tsx +0 -20
  173. package/templates/storefront-fashion/components/newsletter.tsx +0 -50
  174. package/templates/storefront-fashion/components/policy-page.tsx +0 -49
  175. package/templates/storefront-fashion/components/promo-banner.tsx +0 -41
  176. package/templates/storefront-fashion/components/providers.tsx +0 -35
  177. package/templates/storefront-fashion/components/section-heading.tsx +0 -37
  178. package/templates/storefront-fashion/components/store-product-card.tsx +0 -87
  179. package/templates/storefront-fashion/components/trade-in-cta.tsx +0 -54
  180. package/templates/storefront-fashion/components/trust-bar.tsx +0 -66
  181. package/templates/storefront-fashion/e2e/visual.spec.ts +0 -52
  182. package/templates/storefront-fashion/lib/brand.ts +0 -518
  183. package/templates/storefront-fashion/lib/cart.ts +0 -12
  184. package/templates/storefront-fashion/next.config.ts +0 -42
  185. package/templates/storefront-fashion/package.json +0 -38
  186. package/templates/storefront-fashion/playwright.config.ts +0 -48
  187. package/templates/storefront-fashion/postcss.config.mjs +0 -7
  188. package/templates/storefront-fashion/tsconfig.json +0 -23
  189. package/templates/storefront-fashion/vitest.config.ts +0 -9
  190. package/templates/storefront-grocery/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  191. package/templates/storefront-grocery/.cursor/rules/cimplify-storefront.mdc +0 -25
  192. package/templates/storefront-grocery/.env.example +0 -16
  193. package/templates/storefront-grocery/AGENTS.md +0 -96
  194. package/templates/storefront-grocery/CLAUDE.md +0 -22
  195. package/templates/storefront-grocery/README.md +0 -73
  196. package/templates/storefront-grocery/__tests__/brand.test.ts +0 -4
  197. package/templates/storefront-grocery/__tests__/cart-flow.test.ts +0 -4
  198. package/templates/storefront-grocery/__tests__/contract.test.ts +0 -4
  199. package/templates/storefront-grocery/app/about/page.tsx +0 -38
  200. package/templates/storefront-grocery/app/accessibility/page.tsx +0 -11
  201. package/templates/storefront-grocery/app/account/addresses/page.tsx +0 -21
  202. package/templates/storefront-grocery/app/account/orders/page.tsx +0 -21
  203. package/templates/storefront-grocery/app/account/page.tsx +0 -22
  204. package/templates/storefront-grocery/app/account/settings/page.tsx +0 -21
  205. package/templates/storefront-grocery/app/cart/page.tsx +0 -9
  206. package/templates/storefront-grocery/app/categories/[slug]/listing-client.tsx +0 -19
  207. package/templates/storefront-grocery/app/categories/[slug]/page.tsx +0 -118
  208. package/templates/storefront-grocery/app/checkout/page.tsx +0 -17
  209. package/templates/storefront-grocery/app/collections/[slug]/listing-client.tsx +0 -20
  210. package/templates/storefront-grocery/app/collections/[slug]/page.tsx +0 -118
  211. package/templates/storefront-grocery/app/contact/contact-form.tsx +0 -109
  212. package/templates/storefront-grocery/app/contact/page.tsx +0 -54
  213. package/templates/storefront-grocery/app/error.tsx +0 -60
  214. package/templates/storefront-grocery/app/faq/page.tsx +0 -46
  215. package/templates/storefront-grocery/app/globals.css +0 -45
  216. package/templates/storefront-grocery/app/layout.tsx +0 -77
  217. package/templates/storefront-grocery/app/llms.txt/route.ts +0 -94
  218. package/templates/storefront-grocery/app/login/page.tsx +0 -17
  219. package/templates/storefront-grocery/app/not-found.tsx +0 -39
  220. package/templates/storefront-grocery/app/opensearch.xml/route.ts +0 -37
  221. package/templates/storefront-grocery/app/orders/[id]/page.tsx +0 -21
  222. package/templates/storefront-grocery/app/page.tsx +0 -97
  223. package/templates/storefront-grocery/app/privacy/page.tsx +0 -44
  224. package/templates/storefront-grocery/app/returns/page.tsx +0 -11
  225. package/templates/storefront-grocery/app/robots.ts +0 -18
  226. package/templates/storefront-grocery/app/search/page.tsx +0 -38
  227. package/templates/storefront-grocery/app/search/search-client.tsx +0 -7
  228. package/templates/storefront-grocery/app/shipping/page.tsx +0 -16
  229. package/templates/storefront-grocery/app/shop/page.tsx +0 -31
  230. package/templates/storefront-grocery/app/shop/shop-client.tsx +0 -27
  231. package/templates/storefront-grocery/app/signup/page.tsx +0 -17
  232. package/templates/storefront-grocery/app/sitemap-page/page.tsx +0 -167
  233. package/templates/storefront-grocery/app/sitemap.ts +0 -62
  234. package/templates/storefront-grocery/app/terms/page.tsx +0 -44
  235. package/templates/storefront-grocery/app/track-order/page.tsx +0 -24
  236. package/templates/storefront-grocery/app/track-order/track-order-form.tsx +0 -69
  237. package/templates/storefront-grocery/components/account-iframe.tsx +0 -13
  238. package/templates/storefront-grocery/components/cart-drawer.tsx +0 -14
  239. package/templates/storefront-grocery/components/cart-pill.tsx +0 -36
  240. package/templates/storefront-grocery/components/category-grid.tsx +0 -28
  241. package/templates/storefront-grocery/components/collection-strip.tsx +0 -45
  242. package/templates/storefront-grocery/components/footer.tsx +0 -148
  243. package/templates/storefront-grocery/components/header.tsx +0 -43
  244. package/templates/storefront-grocery/components/hero.tsx +0 -25
  245. package/templates/storefront-grocery/components/nav-link.tsx +0 -20
  246. package/templates/storefront-grocery/components/policy-page.tsx +0 -49
  247. package/templates/storefront-grocery/components/product-modal.tsx +0 -104
  248. package/templates/storefront-grocery/components/providers.tsx +0 -35
  249. package/templates/storefront-grocery/components/store-product-card.tsx +0 -87
  250. package/templates/storefront-grocery/lib/brand.ts +0 -375
  251. package/templates/storefront-grocery/lib/cart.ts +0 -12
  252. package/templates/storefront-grocery/next.config.ts +0 -42
  253. package/templates/storefront-grocery/package.json +0 -35
  254. package/templates/storefront-grocery/postcss.config.mjs +0 -7
  255. package/templates/storefront-grocery/tsconfig.json +0 -23
  256. package/templates/storefront-grocery/vitest.config.ts +0 -9
  257. package/templates/storefront-restaurant/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  258. package/templates/storefront-restaurant/.cursor/rules/cimplify-storefront.mdc +0 -25
  259. package/templates/storefront-restaurant/.env.example +0 -16
  260. package/templates/storefront-restaurant/AGENTS.md +0 -102
  261. package/templates/storefront-restaurant/CLAUDE.md +0 -22
  262. package/templates/storefront-restaurant/README.md +0 -73
  263. package/templates/storefront-restaurant/__tests__/brand.test.ts +0 -4
  264. package/templates/storefront-restaurant/__tests__/cart-flow.test.ts +0 -4
  265. package/templates/storefront-restaurant/__tests__/contract.test.ts +0 -4
  266. package/templates/storefront-restaurant/app/about/page.tsx +0 -38
  267. package/templates/storefront-restaurant/app/accessibility/page.tsx +0 -11
  268. package/templates/storefront-restaurant/app/account/addresses/page.tsx +0 -21
  269. package/templates/storefront-restaurant/app/account/orders/page.tsx +0 -21
  270. package/templates/storefront-restaurant/app/account/page.tsx +0 -22
  271. package/templates/storefront-restaurant/app/account/settings/page.tsx +0 -21
  272. package/templates/storefront-restaurant/app/cart/page.tsx +0 -9
  273. package/templates/storefront-restaurant/app/categories/[slug]/listing-client.tsx +0 -19
  274. package/templates/storefront-restaurant/app/categories/[slug]/page.tsx +0 -118
  275. package/templates/storefront-restaurant/app/checkout/page.tsx +0 -17
  276. package/templates/storefront-restaurant/app/collections/[slug]/listing-client.tsx +0 -20
  277. package/templates/storefront-restaurant/app/collections/[slug]/page.tsx +0 -118
  278. package/templates/storefront-restaurant/app/contact/contact-form.tsx +0 -109
  279. package/templates/storefront-restaurant/app/contact/page.tsx +0 -54
  280. package/templates/storefront-restaurant/app/error.tsx +0 -60
  281. package/templates/storefront-restaurant/app/faq/page.tsx +0 -46
  282. package/templates/storefront-restaurant/app/globals.css +0 -44
  283. package/templates/storefront-restaurant/app/layout.tsx +0 -82
  284. package/templates/storefront-restaurant/app/llms.txt/route.ts +0 -94
  285. package/templates/storefront-restaurant/app/login/page.tsx +0 -17
  286. package/templates/storefront-restaurant/app/not-found.tsx +0 -39
  287. package/templates/storefront-restaurant/app/opensearch.xml/route.ts +0 -37
  288. package/templates/storefront-restaurant/app/orders/[id]/page.tsx +0 -21
  289. package/templates/storefront-restaurant/app/page.tsx +0 -97
  290. package/templates/storefront-restaurant/app/privacy/page.tsx +0 -44
  291. package/templates/storefront-restaurant/app/reservations/page.tsx +0 -66
  292. package/templates/storefront-restaurant/app/reservations/reservations-client.tsx +0 -234
  293. package/templates/storefront-restaurant/app/returns/page.tsx +0 -11
  294. package/templates/storefront-restaurant/app/robots.ts +0 -18
  295. package/templates/storefront-restaurant/app/search/page.tsx +0 -38
  296. package/templates/storefront-restaurant/app/search/search-client.tsx +0 -7
  297. package/templates/storefront-restaurant/app/shipping/page.tsx +0 -16
  298. package/templates/storefront-restaurant/app/shop/page.tsx +0 -31
  299. package/templates/storefront-restaurant/app/shop/shop-client.tsx +0 -27
  300. package/templates/storefront-restaurant/app/signup/page.tsx +0 -17
  301. package/templates/storefront-restaurant/app/sitemap-page/page.tsx +0 -167
  302. package/templates/storefront-restaurant/app/sitemap.ts +0 -62
  303. package/templates/storefront-restaurant/app/terms/page.tsx +0 -44
  304. package/templates/storefront-restaurant/app/track-order/page.tsx +0 -24
  305. package/templates/storefront-restaurant/app/track-order/track-order-form.tsx +0 -69
  306. package/templates/storefront-restaurant/components/account-iframe.tsx +0 -13
  307. package/templates/storefront-restaurant/components/cart-drawer.tsx +0 -14
  308. package/templates/storefront-restaurant/components/cart-pill.tsx +0 -36
  309. package/templates/storefront-restaurant/components/category-grid.tsx +0 -28
  310. package/templates/storefront-restaurant/components/collection-strip.tsx +0 -45
  311. package/templates/storefront-restaurant/components/footer.tsx +0 -148
  312. package/templates/storefront-restaurant/components/header.tsx +0 -43
  313. package/templates/storefront-restaurant/components/hero.tsx +0 -25
  314. package/templates/storefront-restaurant/components/nav-link.tsx +0 -20
  315. package/templates/storefront-restaurant/components/policy-page.tsx +0 -49
  316. package/templates/storefront-restaurant/components/product-modal.tsx +0 -104
  317. package/templates/storefront-restaurant/components/providers.tsx +0 -35
  318. package/templates/storefront-restaurant/components/store-product-card.tsx +0 -87
  319. package/templates/storefront-restaurant/lib/brand.ts +0 -377
  320. package/templates/storefront-restaurant/lib/cart.ts +0 -12
  321. package/templates/storefront-restaurant/next.config.ts +0 -42
  322. package/templates/storefront-restaurant/package.json +0 -35
  323. package/templates/storefront-restaurant/postcss.config.mjs +0 -7
  324. package/templates/storefront-restaurant/tsconfig.json +0 -23
  325. package/templates/storefront-restaurant/vitest.config.ts +0 -9
  326. package/templates/storefront-retail/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  327. package/templates/storefront-retail/.cursor/rules/cimplify-storefront.mdc +0 -25
  328. package/templates/storefront-retail/.env.example +0 -16
  329. package/templates/storefront-retail/AGENTS.md +0 -117
  330. package/templates/storefront-retail/CLAUDE.md +0 -22
  331. package/templates/storefront-retail/README.md +0 -77
  332. package/templates/storefront-retail/__tests__/brand.test.ts +0 -4
  333. package/templates/storefront-retail/__tests__/cart-flow.test.ts +0 -4
  334. package/templates/storefront-retail/__tests__/contract.test.ts +0 -4
  335. package/templates/storefront-retail/app/about/page.tsx +0 -41
  336. package/templates/storefront-retail/app/accessibility/page.tsx +0 -11
  337. package/templates/storefront-retail/app/account/addresses/page.tsx +0 -21
  338. package/templates/storefront-retail/app/account/orders/page.tsx +0 -21
  339. package/templates/storefront-retail/app/account/page.tsx +0 -22
  340. package/templates/storefront-retail/app/account/settings/page.tsx +0 -21
  341. package/templates/storefront-retail/app/cart/page.tsx +0 -9
  342. package/templates/storefront-retail/app/categories/[slug]/listing-client.tsx +0 -19
  343. package/templates/storefront-retail/app/categories/[slug]/page.tsx +0 -130
  344. package/templates/storefront-retail/app/checkout/page.tsx +0 -17
  345. package/templates/storefront-retail/app/collections/[slug]/listing-client.tsx +0 -20
  346. package/templates/storefront-retail/app/collections/[slug]/page.tsx +0 -130
  347. package/templates/storefront-retail/app/contact/contact-form.tsx +0 -109
  348. package/templates/storefront-retail/app/contact/page.tsx +0 -54
  349. package/templates/storefront-retail/app/error.tsx +0 -61
  350. package/templates/storefront-retail/app/faq/page.tsx +0 -46
  351. package/templates/storefront-retail/app/globals.css +0 -47
  352. package/templates/storefront-retail/app/layout.tsx +0 -77
  353. package/templates/storefront-retail/app/llms.txt/route.ts +0 -94
  354. package/templates/storefront-retail/app/login/page.tsx +0 -17
  355. package/templates/storefront-retail/app/not-found.tsx +0 -39
  356. package/templates/storefront-retail/app/opensearch.xml/route.ts +0 -37
  357. package/templates/storefront-retail/app/orders/[id]/page.tsx +0 -24
  358. package/templates/storefront-retail/app/page.tsx +0 -182
  359. package/templates/storefront-retail/app/privacy/page.tsx +0 -44
  360. package/templates/storefront-retail/app/products/[slug]/page.tsx +0 -165
  361. package/templates/storefront-retail/app/products/[slug]/product-detail.tsx +0 -70
  362. package/templates/storefront-retail/app/returns/page.tsx +0 -11
  363. package/templates/storefront-retail/app/robots.ts +0 -18
  364. package/templates/storefront-retail/app/search/page.tsx +0 -38
  365. package/templates/storefront-retail/app/search/search-client.tsx +0 -7
  366. package/templates/storefront-retail/app/shipping/page.tsx +0 -16
  367. package/templates/storefront-retail/app/shop/page.tsx +0 -63
  368. package/templates/storefront-retail/app/shop/shop-client.tsx +0 -32
  369. package/templates/storefront-retail/app/signup/page.tsx +0 -17
  370. package/templates/storefront-retail/app/sitemap-page/page.tsx +0 -167
  371. package/templates/storefront-retail/app/sitemap.ts +0 -59
  372. package/templates/storefront-retail/app/terms/page.tsx +0 -44
  373. package/templates/storefront-retail/app/track-order/page.tsx +0 -24
  374. package/templates/storefront-retail/app/track-order/track-order-form.tsx +0 -69
  375. package/templates/storefront-retail/components/account-iframe.tsx +0 -13
  376. package/templates/storefront-retail/components/brand-marquee.tsx +0 -27
  377. package/templates/storefront-retail/components/cart-drawer.tsx +0 -14
  378. package/templates/storefront-retail/components/cart-pill.tsx +0 -36
  379. package/templates/storefront-retail/components/category-grid.tsx +0 -28
  380. package/templates/storefront-retail/components/category-tiles.tsx +0 -104
  381. package/templates/storefront-retail/components/collection-strip.tsx +0 -45
  382. package/templates/storefront-retail/components/feature-hero.tsx +0 -84
  383. package/templates/storefront-retail/components/footer.tsx +0 -153
  384. package/templates/storefront-retail/components/header.tsx +0 -45
  385. package/templates/storefront-retail/components/hero.tsx +0 -28
  386. package/templates/storefront-retail/components/nav-link.tsx +0 -20
  387. package/templates/storefront-retail/components/newsletter.tsx +0 -50
  388. package/templates/storefront-retail/components/policy-page.tsx +0 -49
  389. package/templates/storefront-retail/components/promo-banner.tsx +0 -41
  390. package/templates/storefront-retail/components/providers.tsx +0 -35
  391. package/templates/storefront-retail/components/section-heading.tsx +0 -37
  392. package/templates/storefront-retail/components/store-product-card.tsx +0 -87
  393. package/templates/storefront-retail/components/trade-in-cta.tsx +0 -54
  394. package/templates/storefront-retail/components/trust-bar.tsx +0 -66
  395. package/templates/storefront-retail/lib/brand.ts +0 -664
  396. package/templates/storefront-retail/lib/cart.ts +0 -12
  397. package/templates/storefront-retail/next.config.ts +0 -42
  398. package/templates/storefront-retail/package.json +0 -35
  399. package/templates/storefront-retail/postcss.config.mjs +0 -7
  400. package/templates/storefront-retail/tsconfig.json +0 -23
  401. package/templates/storefront-retail/vitest.config.ts +0 -9
  402. package/templates/storefront-services/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  403. package/templates/storefront-services/.cursor/rules/cimplify-storefront.mdc +0 -25
  404. package/templates/storefront-services/.env.example +0 -16
  405. package/templates/storefront-services/AGENTS.md +0 -101
  406. package/templates/storefront-services/CLAUDE.md +0 -22
  407. package/templates/storefront-services/README.md +0 -73
  408. package/templates/storefront-services/__tests__/brand.test.ts +0 -4
  409. package/templates/storefront-services/__tests__/cart-flow.test.ts +0 -4
  410. package/templates/storefront-services/__tests__/contract.test.ts +0 -4
  411. package/templates/storefront-services/app/about/page.tsx +0 -38
  412. package/templates/storefront-services/app/accessibility/page.tsx +0 -11
  413. package/templates/storefront-services/app/account/addresses/page.tsx +0 -21
  414. package/templates/storefront-services/app/account/orders/page.tsx +0 -21
  415. package/templates/storefront-services/app/account/page.tsx +0 -22
  416. package/templates/storefront-services/app/account/settings/page.tsx +0 -21
  417. package/templates/storefront-services/app/book/book-client.tsx +0 -195
  418. package/templates/storefront-services/app/book/page.tsx +0 -65
  419. package/templates/storefront-services/app/cart/page.tsx +0 -9
  420. package/templates/storefront-services/app/categories/[slug]/listing-client.tsx +0 -19
  421. package/templates/storefront-services/app/categories/[slug]/page.tsx +0 -118
  422. package/templates/storefront-services/app/checkout/page.tsx +0 -17
  423. package/templates/storefront-services/app/collections/[slug]/listing-client.tsx +0 -20
  424. package/templates/storefront-services/app/collections/[slug]/page.tsx +0 -118
  425. package/templates/storefront-services/app/contact/contact-form.tsx +0 -109
  426. package/templates/storefront-services/app/contact/page.tsx +0 -54
  427. package/templates/storefront-services/app/error.tsx +0 -60
  428. package/templates/storefront-services/app/faq/page.tsx +0 -46
  429. package/templates/storefront-services/app/globals.css +0 -45
  430. package/templates/storefront-services/app/layout.tsx +0 -82
  431. package/templates/storefront-services/app/llms.txt/route.ts +0 -94
  432. package/templates/storefront-services/app/login/page.tsx +0 -17
  433. package/templates/storefront-services/app/not-found.tsx +0 -39
  434. package/templates/storefront-services/app/opensearch.xml/route.ts +0 -37
  435. package/templates/storefront-services/app/orders/[id]/page.tsx +0 -21
  436. package/templates/storefront-services/app/page.tsx +0 -97
  437. package/templates/storefront-services/app/privacy/page.tsx +0 -44
  438. package/templates/storefront-services/app/returns/page.tsx +0 -11
  439. package/templates/storefront-services/app/robots.ts +0 -18
  440. package/templates/storefront-services/app/search/page.tsx +0 -38
  441. package/templates/storefront-services/app/search/search-client.tsx +0 -7
  442. package/templates/storefront-services/app/shipping/page.tsx +0 -16
  443. package/templates/storefront-services/app/shop/page.tsx +0 -31
  444. package/templates/storefront-services/app/shop/shop-client.tsx +0 -27
  445. package/templates/storefront-services/app/signup/page.tsx +0 -17
  446. package/templates/storefront-services/app/sitemap-page/page.tsx +0 -167
  447. package/templates/storefront-services/app/sitemap.ts +0 -62
  448. package/templates/storefront-services/app/terms/page.tsx +0 -44
  449. package/templates/storefront-services/app/track-order/page.tsx +0 -24
  450. package/templates/storefront-services/app/track-order/track-order-form.tsx +0 -69
  451. package/templates/storefront-services/components/account-iframe.tsx +0 -13
  452. package/templates/storefront-services/components/cart-drawer.tsx +0 -14
  453. package/templates/storefront-services/components/cart-pill.tsx +0 -36
  454. package/templates/storefront-services/components/category-grid.tsx +0 -28
  455. package/templates/storefront-services/components/collection-strip.tsx +0 -45
  456. package/templates/storefront-services/components/footer.tsx +0 -148
  457. package/templates/storefront-services/components/header.tsx +0 -43
  458. package/templates/storefront-services/components/hero.tsx +0 -25
  459. package/templates/storefront-services/components/nav-link.tsx +0 -20
  460. package/templates/storefront-services/components/policy-page.tsx +0 -49
  461. package/templates/storefront-services/components/product-modal.tsx +0 -104
  462. package/templates/storefront-services/components/providers.tsx +0 -35
  463. package/templates/storefront-services/components/store-product-card.tsx +0 -87
  464. package/templates/storefront-services/lib/brand.ts +0 -396
  465. package/templates/storefront-services/lib/cart.ts +0 -12
  466. package/templates/storefront-services/next.config.ts +0 -42
  467. package/templates/storefront-services/package.json +0 -35
  468. package/templates/storefront-services/postcss.config.mjs +0 -7
  469. package/templates/storefront-services/tsconfig.json +0 -23
  470. package/templates/storefront-services/vitest.config.ts +0 -9
@@ -1,37 +0,0 @@
1
- import { brand } from "@/lib/brand";
2
-
3
- const SITE_URL =
4
- process.env.NEXT_PUBLIC_SITE_URL?.trim() || "https://example.com";
5
-
6
- /**
7
- * OpenSearch description document — lets browsers add this site to the
8
- * address bar's search engine list. When users press Tab after typing the
9
- * domain, they get an inline search box that hits /search?q=...
10
- */
11
- export async function GET(): Promise<Response> {
12
- const xml = `<?xml version="1.0" encoding="UTF-8"?>
13
- <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
14
- <ShortName>${escapeXml(brand.shortName)}</ShortName>
15
- <Description>Search ${escapeXml(brand.name)}</Description>
16
- <InputEncoding>UTF-8</InputEncoding>
17
- <Url type="text/html" method="get" template="${SITE_URL}/search?q={searchTerms}" />
18
- <Url type="application/opensearchdescription+xml" rel="self" template="${SITE_URL}/opensearch.xml" />
19
- <moz:SearchForm>${SITE_URL}/search</moz:SearchForm>
20
- </OpenSearchDescription>
21
- `;
22
- return new Response(xml, {
23
- headers: {
24
- "Content-Type": "application/opensearchdescription+xml; charset=utf-8",
25
- "Cache-Control": "public, max-age=86400",
26
- },
27
- });
28
- }
29
-
30
- function escapeXml(s: string): string {
31
- return s
32
- .replace(/&/g, "&amp;")
33
- .replace(/</g, "&lt;")
34
- .replace(/>/g, "&gt;")
35
- .replace(/"/g, "&quot;")
36
- .replace(/'/g, "&apos;");
37
- }
@@ -1,21 +0,0 @@
1
- import Link from "next/link";
2
-
3
- export default async function OrderPage({ params }: { params: Promise<{ id: string }> }) {
4
- const { id } = await params;
5
- return (
6
- <section className="max-w-2xl mx-auto px-8 py-20 text-center">
7
- <h1 className="font-serif text-3xl mt-0 mb-3">Thanks — your order is confirmed</h1>
8
- <p className="text-muted-foreground">
9
- Order <code className="font-mono text-foreground">{id}</code>
10
- </p>
11
- <p className="mt-6">
12
- <Link
13
- href="/"
14
- className="inline-block px-6 py-3 rounded-full bg-primary text-primary-foreground font-semibold text-sm transition-colors hover:bg-primary/90"
15
- >
16
- Continue shopping
17
- </Link>
18
- </p>
19
- </section>
20
- );
21
- }
@@ -1,97 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { Suspense } from "react";
3
- import { cacheTag, cacheLife } from "next/cache";
4
- import { getServerClient, tags, type Product } from "@cimplify/sdk/server";
5
- import { Hero } from "@/components/hero";
6
- import { CollectionStrip } from "@/components/collection-strip";
7
- import { CategoryGrid } from "@/components/category-grid";
8
- import { brand } from "@/lib/brand";
9
-
10
- export const metadata: Metadata = {
11
- title: `${brand.name} — ${brand.hero.title}`,
12
- description: brand.description,
13
- };
14
-
15
- async function getHomeData() {
16
- "use cache";
17
- cacheTag(tags.collections(), tags.categories(), tags.products());
18
- cacheLife("hours");
19
-
20
- const client = getServerClient();
21
- const [colRes, catRes] = await Promise.all([
22
- client.catalogue.getCollections(),
23
- client.catalogue.getCategories(),
24
- ]);
25
- const collections = colRes.ok ? colRes.value : [];
26
- const categories = catRes.ok ? catRes.value : [];
27
-
28
- const collectionsWithProducts = await Promise.all(
29
- collections.map(async (col) => {
30
- const r = await client.catalogue.getCollectionProducts(col.id);
31
- const items = r.ok
32
- ? ((r.value as { items?: Product[] }).items ?? (r.value as Product[]))
33
- : [];
34
- return { collection: col, products: items };
35
- }),
36
- );
37
-
38
- return {
39
- collections: collectionsWithProducts.filter((x) => x.products.length > 0),
40
- categories,
41
- };
42
- }
43
-
44
- export default async function HomePage() {
45
- const { collections, categories } = await getHomeData();
46
-
47
- return (
48
- <>
49
- <Hero
50
- badge={brand.hero.badge}
51
- title={brand.hero.title}
52
- subtitle={brand.hero.subtitle}
53
- />
54
- {collections.map(({ collection, products }) => (
55
- <Suspense
56
- key={collection.id}
57
- fallback={<StripSkeleton title={collection.name} />}
58
- >
59
- <CollectionStrip
60
- collection={collection}
61
- products={products}
62
- collectionHref={`/collections/${collection.slug}`}
63
- />
64
- </Suspense>
65
- ))}
66
- <Suspense fallback={<CategoryGridSkeleton />}>
67
- <CategoryGrid categories={categories} />
68
- </Suspense>
69
- </>
70
- );
71
- }
72
-
73
- function StripSkeleton({ title }: { title: string }) {
74
- return (
75
- <section className="max-w-7xl mx-auto px-8 pt-12">
76
- <h2 className="font-serif text-[28px] font-semibold m-0 mb-5">{title}</h2>
77
- <div className="grid grid-flow-col auto-cols-[minmax(220px,1fr)] gap-4 overflow-x-auto pb-2">
78
- {Array.from({ length: 5 }).map((_, i) => (
79
- <div key={i} className="aspect-square bg-muted rounded-2xl animate-pulse" />
80
- ))}
81
- </div>
82
- </section>
83
- );
84
- }
85
-
86
- function CategoryGridSkeleton() {
87
- return (
88
- <section className="max-w-7xl mx-auto px-8 pt-14">
89
- <div className="h-8 w-48 bg-muted rounded mb-5 animate-pulse" />
90
- <div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4">
91
- {Array.from({ length: 6 }).map((_, i) => (
92
- <div key={i} className="h-32 bg-muted rounded-2xl animate-pulse" />
93
- ))}
94
- </div>
95
- </section>
96
- );
97
- }
@@ -1,44 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { brand } from "@/lib/brand";
3
-
4
- export const metadata: Metadata = {
5
- title: `Privacy Policy — ${brand.name}`,
6
- description: `How ${brand.name} collects, uses, and protects your personal data.`,
7
- };
8
-
9
- export default function PrivacyPage() {
10
- const p = brand.privacy;
11
- return (
12
- <article className="max-w-3xl mx-auto px-8 py-16 prose prose-lg max-w-none">
13
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-2 not-prose">
14
- {p.eyebrow}
15
- </p>
16
- <h1 className="font-serif text-[clamp(2.25rem,5vw,3.5rem)] font-semibold mb-2 -tracking-[0.02em]">
17
- {p.title}
18
- </h1>
19
- <p className="text-sm text-muted-foreground not-prose mb-10">
20
- Last updated: {p.lastUpdated}
21
- </p>
22
-
23
- <section className="space-y-5 leading-relaxed text-foreground/90">
24
- {p.sections.map((s) => (
25
- <div key={s.heading}>
26
- <h2 className="font-serif text-2xl font-semibold mt-0">{s.heading}</h2>
27
- {typeof s.body === "string" ? (
28
- <p>{s.body}</p>
29
- ) : (
30
- <>
31
- <p>{s.body.intro}</p>
32
- <ul className="list-disc pl-6 space-y-2">
33
- {s.body.bullets.map((b) => (
34
- <li key={b}>{b}</li>
35
- ))}
36
- </ul>
37
- </>
38
- )}
39
- </div>
40
- ))}
41
- </section>
42
- </article>
43
- );
44
- }
@@ -1,11 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { brand } from "@/lib/brand";
3
- import { PolicyPage } from "@/components/policy-page";
4
-
5
- export const metadata: Metadata = {
6
- title: `${brand.returns.title} — ${brand.name}`,
7
- };
8
-
9
- export default function ReturnsPage() {
10
- return <PolicyPage policy={brand.returns} />;
11
- }
@@ -1,18 +0,0 @@
1
- import type { MetadataRoute } from "next";
2
-
3
- const SITE_URL =
4
- process.env.NEXT_PUBLIC_SITE_URL?.trim() || "https://example.com";
5
-
6
- export default function robots(): MetadataRoute.Robots {
7
- return {
8
- rules: [
9
- {
10
- userAgent: "*",
11
- allow: "/",
12
- disallow: ["/cart", "/checkout", "/orders/", "/api/"],
13
- },
14
- ],
15
- sitemap: `${SITE_URL}/sitemap.xml`,
16
- host: SITE_URL,
17
- };
18
- }
@@ -1,38 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { Suspense } from "react";
3
- import { SearchClient } from "./search-client";
4
- import { brand } from "@/lib/brand";
5
-
6
- export const metadata: Metadata = {
7
- title: `Search — ${brand.name}`,
8
- description: `Search ${brand.name} — products, collections, categories.`,
9
- };
10
-
11
- export default function SearchPage() {
12
- return (
13
- <article className="max-w-7xl mx-auto px-6 sm:px-8 py-10">
14
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-2">
15
- Search
16
- </p>
17
- <h1 className="font-serif text-[clamp(2rem,4vw,2.75rem)] font-semibold mb-8 -tracking-[0.02em]">
18
- Find anything.
19
- </h1>
20
- <Suspense fallback={<SearchSkeleton />}>
21
- <SearchClient />
22
- </Suspense>
23
- </article>
24
- );
25
- }
26
-
27
- function SearchSkeleton() {
28
- return (
29
- <div>
30
- <div className="h-12 w-full max-w-xl bg-muted rounded animate-pulse mb-8" />
31
- <div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3 sm:gap-4">
32
- {Array.from({ length: 8 }).map((_, i) => (
33
- <div key={i} className="aspect-[4/3] bg-muted rounded-2xl animate-pulse" />
34
- ))}
35
- </div>
36
- </div>
37
- );
38
- }
@@ -1,7 +0,0 @@
1
- "use client";
2
-
3
- import { SearchPage } from "@cimplify/sdk/react";
4
-
5
- export function SearchClient() {
6
- return <SearchPage />;
7
- }
@@ -1,16 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { brand } from "@/lib/brand";
3
- import { PolicyPage } from "@/components/policy-page";
4
-
5
- export const metadata: Metadata = {
6
- title: `${brand.shipping.title} — ${brand.name}`,
7
- description: brand.shipping.sections[0]?.body
8
- ? typeof brand.shipping.sections[0].body === "string"
9
- ? brand.shipping.sections[0].body
10
- : brand.shipping.sections[0].body.intro
11
- : undefined,
12
- };
13
-
14
- export default function ShippingPage() {
15
- return <PolicyPage policy={brand.shipping} />;
16
- }
@@ -1,31 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { cacheTag, cacheLife } from "next/cache";
3
- import { getServerClient, tags } from "@cimplify/sdk/server";
4
- import { ShopClient } from "./shop-client";
5
- import { brand } from "@/lib/brand";
6
-
7
- export const metadata: Metadata = {
8
- title: `Shop — ${brand.name}`,
9
- description: brand.description,
10
- };
11
-
12
- async function getShopData() {
13
- "use cache";
14
- cacheTag(tags.products(), tags.categories());
15
- cacheLife("hours");
16
-
17
- const client = getServerClient();
18
- const [p, c] = await Promise.all([
19
- client.catalogue.getProducts({ limit: 50 }),
20
- client.catalogue.getCategories(),
21
- ]);
22
- return {
23
- products: p.ok ? p.value.items : [],
24
- categories: c.ok ? c.value : [],
25
- };
26
- }
27
-
28
- export default async function ShopPage() {
29
- const { products, categories } = await getShopData();
30
- return <ShopClient products={products} categories={categories} />;
31
- }
@@ -1,27 +0,0 @@
1
- "use client";
2
-
3
- import { CataloguePage } from "@cimplify/sdk/react";
4
- import type { Category, Product } from "@cimplify/sdk";
5
- import { StoreProductCard } from "@/components/store-product-card";
6
-
7
- /**
8
- * Client island for the shop page. Server-side fetches all products and
9
- * categories (cached via `'use cache'` in `app/shop/page.tsx`), then hands
10
- * them to `<CataloguePage>` which owns the interactive filter / sort state.
11
- */
12
- export function ShopClient({
13
- products,
14
- categories,
15
- }: {
16
- products: Product[];
17
- categories: Category[];
18
- }) {
19
- return (
20
- <CataloguePage
21
- title="The Menu"
22
- products={products}
23
- categories={categories}
24
- renderCard={(p) => <StoreProductCard product={p} />}
25
- />
26
- );
27
- }
@@ -1,17 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { redirect } from "next/navigation";
3
- import { brand } from "@/lib/brand";
4
-
5
- export const metadata: Metadata = {
6
- title: `Create an account — ${brand.name}`,
7
- description: brand.account.signupSubtitle,
8
- };
9
-
10
- /**
11
- * Cimplify Link handles sign-up inside the `<CimplifyAccount>` iframe.
12
- * We bounce /signup to /account; the iframe shows the create-account UI
13
- * for visitors with no session.
14
- */
15
- export default function SignupPage(): never {
16
- redirect("/account");
17
- }
@@ -1,167 +0,0 @@
1
- import type { Metadata } from "next";
2
- import Link from "next/link";
3
- import { cacheTag, cacheLife } from "next/cache";
4
- import { getServerClient, tags, type Product } from "@cimplify/sdk/server";
5
- import { brand } from "@/lib/brand";
6
-
7
- export const metadata: Metadata = {
8
- title: `Sitemap — ${brand.name}`,
9
- description: "A human-readable index of every page on this site.",
10
- };
11
-
12
- interface SitemapData {
13
- products: { slug: string; name: string }[];
14
- categories: { slug: string; name: string }[];
15
- collections: { slug: string; name: string }[];
16
- }
17
-
18
- async function getSitemap(): Promise<SitemapData> {
19
- "use cache";
20
- cacheTag(tags.products(), tags.categories(), tags.collections());
21
- cacheLife("hours");
22
-
23
- const client = getServerClient();
24
- const [pRes, cRes, colRes] = await Promise.all([
25
- client.catalogue.getProducts({ limit: 500 }),
26
- client.catalogue.getCategories(),
27
- client.catalogue.getCollections(),
28
- ]);
29
- return {
30
- products: (pRes.ok ? pRes.value.items : []).map((p: Product) => ({
31
- slug: p.slug ?? p.id,
32
- name: p.name,
33
- })),
34
- categories: (cRes.ok ? cRes.value : []).map((c) => ({ slug: c.slug, name: c.name })),
35
- collections: (colRes.ok ? colRes.value : []).map((c) => ({ slug: c.slug, name: c.name })),
36
- };
37
- }
38
-
39
- const STATIC_LINKS: { title: string; links: { href: string; label: string }[] }[] = [
40
- {
41
- title: "Browse",
42
- links: [
43
- { href: "/", label: "Home" },
44
- { href: "/shop", label: "Shop" },
45
- { href: "/search", label: "Search" },
46
- ],
47
- },
48
- {
49
- title: "Account",
50
- links: [
51
- { href: "/account", label: "Account" },
52
- { href: "/account/orders", label: "Orders" },
53
- { href: "/account/addresses", label: "Addresses" },
54
- { href: "/account/settings", label: "Settings" },
55
- { href: "/login", label: "Sign in" },
56
- { href: "/signup", label: "Create account" },
57
- { href: "/track-order", label: "Track an order" },
58
- { href: "/cart", label: "Cart" },
59
- { href: "/checkout", label: "Checkout" },
60
- ],
61
- },
62
- {
63
- title: "About",
64
- links: [
65
- { href: "/about", label: "About" },
66
- { href: "/faq", label: "FAQ" },
67
- { href: "/contact", label: "Contact" },
68
- ],
69
- },
70
- {
71
- title: "Policies",
72
- links: [
73
- { href: "/shipping", label: "Shipping" },
74
- { href: "/returns", label: "Returns" },
75
- { href: "/accessibility", label: "Accessibility" },
76
- { href: "/terms", label: "Terms of Service" },
77
- { href: "/privacy", label: "Privacy Policy" },
78
- ],
79
- },
80
- {
81
- title: "Machine-readable",
82
- links: [
83
- { href: "/sitemap.xml", label: "sitemap.xml (search engines)" },
84
- { href: "/llms.txt", label: "llms.txt (LLM agents)" },
85
- { href: "/robots.txt", label: "robots.txt" },
86
- { href: "/opensearch.xml", label: "opensearch.xml (browser search)" },
87
- ],
88
- },
89
- ];
90
-
91
- export default async function SitemapHtmlPage() {
92
- const { products, categories, collections } = await getSitemap();
93
-
94
- return (
95
- <article className="max-w-5xl mx-auto px-6 sm:px-8 py-16">
96
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-2">
97
- Sitemap
98
- </p>
99
- <h1 className="text-[clamp(2rem,4vw,2.75rem)] font-semibold mb-2 -tracking-[0.02em]">
100
- Every page, in one place.
101
- </h1>
102
- <p className="text-muted-foreground mb-12">
103
- For search engines, see <Link href="/sitemap.xml" className="text-primary hover:underline">/sitemap.xml</Link>.
104
- For LLM agents, see <Link href="/llms.txt" className="text-primary hover:underline">/llms.txt</Link>.
105
- </p>
106
- <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-10">
107
- {STATIC_LINKS.map((s) => (
108
- <Section key={s.title} title={s.title}>
109
- {s.links.map((l) => (
110
- <li key={l.href}>
111
- <Link href={l.href} className="hover:text-primary transition-colors">
112
- {l.label}
113
- </Link>
114
- </li>
115
- ))}
116
- </Section>
117
- ))}
118
- {categories.length > 0 && (
119
- <Section title="Categories">
120
- {categories.map((c) => (
121
- <li key={c.slug}>
122
- <Link href={`/categories/${c.slug}`} className="hover:text-primary transition-colors">
123
- {c.name}
124
- </Link>
125
- </li>
126
- ))}
127
- </Section>
128
- )}
129
- {collections.length > 0 && (
130
- <Section title="Collections">
131
- {collections.map((c) => (
132
- <li key={c.slug}>
133
- <Link href={`/collections/${c.slug}`} className="hover:text-primary transition-colors">
134
- {c.name}
135
- </Link>
136
- </li>
137
- ))}
138
- </Section>
139
- )}
140
- {products.length > 0 && (
141
- <Section title={`Products (${products.length})`}>
142
- {products.map((p) => (
143
- <li key={p.slug}>
144
- <Link href={`/shop?product=${encodeURIComponent(p.slug)}`} className="hover:text-primary transition-colors">
145
- {p.name}
146
- </Link>
147
- </li>
148
- ))}
149
- </Section>
150
- )}
151
- </div>
152
- </article>
153
- );
154
- }
155
-
156
- function Section({ title, children }: { title: string; children: React.ReactNode }) {
157
- return (
158
- <div>
159
- <p className="font-semibold text-[12px] uppercase tracking-[0.12em] text-foreground mb-3">
160
- {title}
161
- </p>
162
- <ul className="space-y-2 m-0 p-0 list-none text-sm text-muted-foreground">
163
- {children}
164
- </ul>
165
- </div>
166
- );
167
- }
@@ -1,62 +0,0 @@
1
- import type { MetadataRoute } from "next";
2
- import { getServerClient, type Product } from "@cimplify/sdk/server";
3
-
4
- const SITE_URL =
5
- process.env.NEXT_PUBLIC_SITE_URL?.trim() || "https://example.com";
6
-
7
- const STATIC_ROUTES: { path: string; priority: number; changeFrequency: "daily" | "weekly" | "monthly" }[] = [
8
- { path: "/", priority: 1.0, changeFrequency: "daily" },
9
- { path: "/shop", priority: 0.9, changeFrequency: "daily" },
10
- { path: "/about", priority: 0.5, changeFrequency: "monthly" },
11
- { path: "/faq", priority: 0.4, changeFrequency: "monthly" },
12
- { path: "/terms", priority: 0.2, changeFrequency: "monthly" },
13
- { path: "/privacy", priority: 0.2, changeFrequency: "monthly" },
14
- ];
15
-
16
- export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
17
- const now = new Date();
18
- const client = getServerClient();
19
-
20
- const [productsRes, categoriesRes, collectionsRes] = await Promise.all([
21
- client.catalogue.getProducts({ limit: 500 }),
22
- client.catalogue.getCategories(),
23
- client.catalogue.getCollections(),
24
- ]);
25
-
26
- const products = productsRes.ok ? productsRes.value.items : [];
27
- const categories = categoriesRes.ok ? categoriesRes.value : [];
28
- const collections = collectionsRes.ok ? collectionsRes.value : [];
29
-
30
- const staticEntries: MetadataRoute.Sitemap = STATIC_ROUTES.map((r) => ({
31
- url: `${SITE_URL}${r.path}`,
32
- lastModified: now,
33
- changeFrequency: r.changeFrequency,
34
- priority: r.priority,
35
- }));
36
-
37
- // Bakery uses a URL-driven product modal (`?product=<slug>` on the home or
38
- // shop pages). Emit those as deep-linkable URLs so search engines and LLMs
39
- // can index each product canonically.
40
- const productEntries: MetadataRoute.Sitemap = products.map((p: Product) => ({
41
- url: `${SITE_URL}/shop?product=${encodeURIComponent(p.slug ?? p.id)}`,
42
- lastModified: p.updated_at ? new Date(p.updated_at) : now,
43
- changeFrequency: "weekly",
44
- priority: 0.7,
45
- }));
46
-
47
- const categoryEntries: MetadataRoute.Sitemap = categories.map((c) => ({
48
- url: `${SITE_URL}/categories/${c.slug}`,
49
- lastModified: now,
50
- changeFrequency: "weekly",
51
- priority: 0.6,
52
- }));
53
-
54
- const collectionEntries: MetadataRoute.Sitemap = collections.map((c) => ({
55
- url: `${SITE_URL}/collections/${c.slug}`,
56
- lastModified: now,
57
- changeFrequency: "weekly",
58
- priority: 0.6,
59
- }));
60
-
61
- return [...staticEntries, ...categoryEntries, ...collectionEntries, ...productEntries];
62
- }
@@ -1,44 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { brand } from "@/lib/brand";
3
-
4
- export const metadata: Metadata = {
5
- title: `Terms of Service — ${brand.name}`,
6
- description: `The rules of the road for ordering from ${brand.name}.`,
7
- };
8
-
9
- export default function TermsPage() {
10
- const t = brand.terms;
11
- return (
12
- <article className="max-w-3xl mx-auto px-8 py-16 prose prose-lg max-w-none">
13
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-2 not-prose">
14
- {t.eyebrow}
15
- </p>
16
- <h1 className="font-serif text-[clamp(2.25rem,5vw,3.5rem)] font-semibold mb-2 -tracking-[0.02em]">
17
- {t.title}
18
- </h1>
19
- <p className="text-sm text-muted-foreground not-prose mb-10">
20
- Last updated: {t.lastUpdated}
21
- </p>
22
-
23
- <section className="space-y-5 leading-relaxed text-foreground/90">
24
- {t.sections.map((s) => (
25
- <div key={s.heading}>
26
- <h2 className="font-serif text-2xl font-semibold mt-0">{s.heading}</h2>
27
- {typeof s.body === "string" ? (
28
- <p>{s.body}</p>
29
- ) : (
30
- <>
31
- <p>{s.body.intro}</p>
32
- <ul className="list-disc pl-6 space-y-2">
33
- {s.body.bullets.map((b) => (
34
- <li key={b}>{b}</li>
35
- ))}
36
- </ul>
37
- </>
38
- )}
39
- </div>
40
- ))}
41
- </section>
42
- </article>
43
- );
44
- }
@@ -1,24 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { TrackOrderForm } from "./track-order-form";
3
- import { brand } from "@/lib/brand";
4
-
5
- export const metadata: Metadata = {
6
- title: `Track an order — ${brand.name}`,
7
- description: brand.trackOrder.body,
8
- };
9
-
10
- export default function TrackOrderPage() {
11
- const t = brand.trackOrder;
12
- return (
13
- <article className="max-w-2xl mx-auto px-6 sm:px-8 py-16">
14
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-2">
15
- {t.eyebrow}
16
- </p>
17
- <h1 className="font-serif text-[clamp(2rem,5vw,3rem)] font-semibold mb-4 -tracking-[0.02em]">
18
- {t.title}
19
- </h1>
20
- <p className="text-muted-foreground leading-relaxed mb-8">{t.body}</p>
21
- <TrackOrderForm />
22
- </article>
23
- );
24
- }