@cimplify/sdk 0.44.34 → 0.45.0

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 (451) hide show
  1. package/README.md +21 -16
  2. package/dist/styles.css +1 -1
  3. package/package.json +5 -9
  4. package/dist/cli/commands/deploy.mjs +0 -717
  5. package/dist/cli/commands/dev.mjs +0 -479
  6. package/dist/cli/commands/domains.mjs +0 -769
  7. package/dist/cli/commands/env.mjs +0 -705
  8. package/dist/cli/commands/link.mjs +0 -378
  9. package/dist/cli/commands/login.mjs +0 -584
  10. package/dist/cli/commands/logout.mjs +0 -75
  11. package/dist/cli/commands/logs.mjs +0 -432
  12. package/dist/cli/commands/projects.mjs +0 -473
  13. package/dist/cli/commands/repo.mjs +0 -584
  14. package/dist/cli/commands/rollback.mjs +0 -553
  15. package/dist/cli/commands/status.mjs +0 -450
  16. package/dist/cli/commands/unlink.mjs +0 -79
  17. package/dist/cli/commands/whoami.mjs +0 -285
  18. package/dist/cli.js +0 -184
  19. package/dist/dispatcher.mjs +0 -360
  20. package/registry/booking-page.json +0 -18
  21. package/registry/bookings-page.json +0 -17
  22. package/registry/service-card.json +0 -16
  23. package/registry/service-grid.json +0 -16
  24. package/templates/storefront-bakery/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  25. package/templates/storefront-bakery/.cursor/rules/cimplify-storefront.mdc +0 -25
  26. package/templates/storefront-bakery/.env.example +0 -16
  27. package/templates/storefront-bakery/AGENTS.md +0 -120
  28. package/templates/storefront-bakery/CLAUDE.md +0 -22
  29. package/templates/storefront-bakery/README.md +0 -73
  30. package/templates/storefront-bakery/__tests__/brand.test.ts +0 -4
  31. package/templates/storefront-bakery/__tests__/cart-flow.test.ts +0 -4
  32. package/templates/storefront-bakery/__tests__/contract.test.ts +0 -4
  33. package/templates/storefront-bakery/app/about/page.tsx +0 -38
  34. package/templates/storefront-bakery/app/accessibility/page.tsx +0 -11
  35. package/templates/storefront-bakery/app/account/addresses/page.tsx +0 -21
  36. package/templates/storefront-bakery/app/account/orders/page.tsx +0 -21
  37. package/templates/storefront-bakery/app/account/page.tsx +0 -22
  38. package/templates/storefront-bakery/app/account/settings/page.tsx +0 -21
  39. package/templates/storefront-bakery/app/cart/page.tsx +0 -9
  40. package/templates/storefront-bakery/app/categories/[slug]/listing-client.tsx +0 -19
  41. package/templates/storefront-bakery/app/categories/[slug]/page.tsx +0 -118
  42. package/templates/storefront-bakery/app/checkout/page.tsx +0 -17
  43. package/templates/storefront-bakery/app/collections/[slug]/listing-client.tsx +0 -20
  44. package/templates/storefront-bakery/app/collections/[slug]/page.tsx +0 -118
  45. package/templates/storefront-bakery/app/contact/contact-form.tsx +0 -109
  46. package/templates/storefront-bakery/app/contact/page.tsx +0 -54
  47. package/templates/storefront-bakery/app/error.tsx +0 -60
  48. package/templates/storefront-bakery/app/faq/page.tsx +0 -46
  49. package/templates/storefront-bakery/app/globals.css +0 -47
  50. package/templates/storefront-bakery/app/layout.tsx +0 -82
  51. package/templates/storefront-bakery/app/llms.txt/route.ts +0 -94
  52. package/templates/storefront-bakery/app/login/page.tsx +0 -17
  53. package/templates/storefront-bakery/app/not-found.tsx +0 -39
  54. package/templates/storefront-bakery/app/opensearch.xml/route.ts +0 -37
  55. package/templates/storefront-bakery/app/orders/[id]/page.tsx +0 -21
  56. package/templates/storefront-bakery/app/page.tsx +0 -97
  57. package/templates/storefront-bakery/app/privacy/page.tsx +0 -44
  58. package/templates/storefront-bakery/app/returns/page.tsx +0 -11
  59. package/templates/storefront-bakery/app/robots.ts +0 -18
  60. package/templates/storefront-bakery/app/search/page.tsx +0 -38
  61. package/templates/storefront-bakery/app/search/search-client.tsx +0 -7
  62. package/templates/storefront-bakery/app/shipping/page.tsx +0 -16
  63. package/templates/storefront-bakery/app/shop/page.tsx +0 -31
  64. package/templates/storefront-bakery/app/shop/shop-client.tsx +0 -27
  65. package/templates/storefront-bakery/app/signup/page.tsx +0 -17
  66. package/templates/storefront-bakery/app/sitemap-page/page.tsx +0 -167
  67. package/templates/storefront-bakery/app/sitemap.ts +0 -62
  68. package/templates/storefront-bakery/app/terms/page.tsx +0 -44
  69. package/templates/storefront-bakery/app/track-order/page.tsx +0 -24
  70. package/templates/storefront-bakery/app/track-order/track-order-form.tsx +0 -69
  71. package/templates/storefront-bakery/components/account-iframe.tsx +0 -13
  72. package/templates/storefront-bakery/components/cart-drawer.tsx +0 -14
  73. package/templates/storefront-bakery/components/cart-pill.tsx +0 -36
  74. package/templates/storefront-bakery/components/category-grid.tsx +0 -28
  75. package/templates/storefront-bakery/components/collection-strip.tsx +0 -45
  76. package/templates/storefront-bakery/components/footer.tsx +0 -148
  77. package/templates/storefront-bakery/components/header.tsx +0 -43
  78. package/templates/storefront-bakery/components/hero.tsx +0 -25
  79. package/templates/storefront-bakery/components/nav-link.tsx +0 -20
  80. package/templates/storefront-bakery/components/policy-page.tsx +0 -49
  81. package/templates/storefront-bakery/components/product-modal.tsx +0 -104
  82. package/templates/storefront-bakery/components/providers.tsx +0 -35
  83. package/templates/storefront-bakery/components/store-product-card.tsx +0 -87
  84. package/templates/storefront-bakery/lib/brand.ts +0 -570
  85. package/templates/storefront-bakery/lib/cart.ts +0 -12
  86. package/templates/storefront-bakery/next.config.ts +0 -42
  87. package/templates/storefront-bakery/package.json +0 -35
  88. package/templates/storefront-bakery/postcss.config.mjs +0 -7
  89. package/templates/storefront-bakery/tsconfig.json +0 -23
  90. package/templates/storefront-bakery/vitest.config.ts +0 -9
  91. package/templates/storefront-fashion/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  92. package/templates/storefront-fashion/.cursor/rules/cimplify-storefront.mdc +0 -25
  93. package/templates/storefront-fashion/.env.example +0 -16
  94. package/templates/storefront-fashion/AGENTS.md +0 -126
  95. package/templates/storefront-fashion/CLAUDE.md +0 -22
  96. package/templates/storefront-fashion/README.md +0 -77
  97. package/templates/storefront-fashion/__tests__/brand.test.ts +0 -4
  98. package/templates/storefront-fashion/__tests__/cart-flow.test.ts +0 -55
  99. package/templates/storefront-fashion/__tests__/contract.test.ts +0 -4
  100. package/templates/storefront-fashion/app/about/page.tsx +0 -41
  101. package/templates/storefront-fashion/app/accessibility/page.tsx +0 -11
  102. package/templates/storefront-fashion/app/account/addresses/page.tsx +0 -21
  103. package/templates/storefront-fashion/app/account/orders/page.tsx +0 -21
  104. package/templates/storefront-fashion/app/account/page.tsx +0 -22
  105. package/templates/storefront-fashion/app/account/settings/page.tsx +0 -21
  106. package/templates/storefront-fashion/app/cart/page.tsx +0 -9
  107. package/templates/storefront-fashion/app/categories/[slug]/listing-client.tsx +0 -19
  108. package/templates/storefront-fashion/app/categories/[slug]/page.tsx +0 -130
  109. package/templates/storefront-fashion/app/checkout/page.tsx +0 -17
  110. package/templates/storefront-fashion/app/collections/[slug]/listing-client.tsx +0 -20
  111. package/templates/storefront-fashion/app/collections/[slug]/page.tsx +0 -130
  112. package/templates/storefront-fashion/app/contact/contact-form.tsx +0 -109
  113. package/templates/storefront-fashion/app/contact/page.tsx +0 -54
  114. package/templates/storefront-fashion/app/error.tsx +0 -61
  115. package/templates/storefront-fashion/app/faq/page.tsx +0 -46
  116. package/templates/storefront-fashion/app/globals.css +0 -46
  117. package/templates/storefront-fashion/app/layout.tsx +0 -78
  118. package/templates/storefront-fashion/app/llms.txt/route.ts +0 -94
  119. package/templates/storefront-fashion/app/login/page.tsx +0 -17
  120. package/templates/storefront-fashion/app/lookbook/page.tsx +0 -132
  121. package/templates/storefront-fashion/app/not-found.tsx +0 -39
  122. package/templates/storefront-fashion/app/opensearch.xml/route.ts +0 -37
  123. package/templates/storefront-fashion/app/orders/[id]/page.tsx +0 -24
  124. package/templates/storefront-fashion/app/page.tsx +0 -183
  125. package/templates/storefront-fashion/app/privacy/page.tsx +0 -44
  126. package/templates/storefront-fashion/app/products/[slug]/page.tsx +0 -165
  127. package/templates/storefront-fashion/app/products/[slug]/product-detail.tsx +0 -70
  128. package/templates/storefront-fashion/app/returns/page.tsx +0 -11
  129. package/templates/storefront-fashion/app/robots.ts +0 -18
  130. package/templates/storefront-fashion/app/search/page.tsx +0 -38
  131. package/templates/storefront-fashion/app/search/search-client.tsx +0 -7
  132. package/templates/storefront-fashion/app/shipping/page.tsx +0 -16
  133. package/templates/storefront-fashion/app/shop/page.tsx +0 -63
  134. package/templates/storefront-fashion/app/shop/shop-client.tsx +0 -32
  135. package/templates/storefront-fashion/app/signup/page.tsx +0 -17
  136. package/templates/storefront-fashion/app/sitemap-page/page.tsx +0 -167
  137. package/templates/storefront-fashion/app/sitemap.ts +0 -59
  138. package/templates/storefront-fashion/app/size-guide/page.tsx +0 -155
  139. package/templates/storefront-fashion/app/terms/page.tsx +0 -44
  140. package/templates/storefront-fashion/app/track-order/page.tsx +0 -24
  141. package/templates/storefront-fashion/app/track-order/track-order-form.tsx +0 -69
  142. package/templates/storefront-fashion/components/account-iframe.tsx +0 -13
  143. package/templates/storefront-fashion/components/brand-marquee.tsx +0 -27
  144. package/templates/storefront-fashion/components/cart-drawer.tsx +0 -14
  145. package/templates/storefront-fashion/components/cart-pill.tsx +0 -36
  146. package/templates/storefront-fashion/components/category-grid.tsx +0 -28
  147. package/templates/storefront-fashion/components/category-tiles.tsx +0 -104
  148. package/templates/storefront-fashion/components/collection-strip.tsx +0 -45
  149. package/templates/storefront-fashion/components/feature-hero.tsx +0 -82
  150. package/templates/storefront-fashion/components/footer.tsx +0 -153
  151. package/templates/storefront-fashion/components/header.tsx +0 -43
  152. package/templates/storefront-fashion/components/hero.tsx +0 -28
  153. package/templates/storefront-fashion/components/nav-link.tsx +0 -20
  154. package/templates/storefront-fashion/components/newsletter.tsx +0 -50
  155. package/templates/storefront-fashion/components/policy-page.tsx +0 -49
  156. package/templates/storefront-fashion/components/promo-banner.tsx +0 -41
  157. package/templates/storefront-fashion/components/providers.tsx +0 -35
  158. package/templates/storefront-fashion/components/section-heading.tsx +0 -37
  159. package/templates/storefront-fashion/components/store-product-card.tsx +0 -87
  160. package/templates/storefront-fashion/components/trade-in-cta.tsx +0 -54
  161. package/templates/storefront-fashion/components/trust-bar.tsx +0 -66
  162. package/templates/storefront-fashion/e2e/visual.spec.ts +0 -52
  163. package/templates/storefront-fashion/lib/brand.ts +0 -518
  164. package/templates/storefront-fashion/lib/cart.ts +0 -12
  165. package/templates/storefront-fashion/next.config.ts +0 -42
  166. package/templates/storefront-fashion/package.json +0 -38
  167. package/templates/storefront-fashion/playwright.config.ts +0 -48
  168. package/templates/storefront-fashion/postcss.config.mjs +0 -7
  169. package/templates/storefront-fashion/tsconfig.json +0 -23
  170. package/templates/storefront-fashion/vitest.config.ts +0 -9
  171. package/templates/storefront-grocery/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  172. package/templates/storefront-grocery/.cursor/rules/cimplify-storefront.mdc +0 -25
  173. package/templates/storefront-grocery/.env.example +0 -16
  174. package/templates/storefront-grocery/AGENTS.md +0 -96
  175. package/templates/storefront-grocery/CLAUDE.md +0 -22
  176. package/templates/storefront-grocery/README.md +0 -73
  177. package/templates/storefront-grocery/__tests__/brand.test.ts +0 -4
  178. package/templates/storefront-grocery/__tests__/cart-flow.test.ts +0 -4
  179. package/templates/storefront-grocery/__tests__/contract.test.ts +0 -4
  180. package/templates/storefront-grocery/app/about/page.tsx +0 -38
  181. package/templates/storefront-grocery/app/accessibility/page.tsx +0 -11
  182. package/templates/storefront-grocery/app/account/addresses/page.tsx +0 -21
  183. package/templates/storefront-grocery/app/account/orders/page.tsx +0 -21
  184. package/templates/storefront-grocery/app/account/page.tsx +0 -22
  185. package/templates/storefront-grocery/app/account/settings/page.tsx +0 -21
  186. package/templates/storefront-grocery/app/cart/page.tsx +0 -9
  187. package/templates/storefront-grocery/app/categories/[slug]/listing-client.tsx +0 -19
  188. package/templates/storefront-grocery/app/categories/[slug]/page.tsx +0 -118
  189. package/templates/storefront-grocery/app/checkout/page.tsx +0 -17
  190. package/templates/storefront-grocery/app/collections/[slug]/listing-client.tsx +0 -20
  191. package/templates/storefront-grocery/app/collections/[slug]/page.tsx +0 -118
  192. package/templates/storefront-grocery/app/contact/contact-form.tsx +0 -109
  193. package/templates/storefront-grocery/app/contact/page.tsx +0 -54
  194. package/templates/storefront-grocery/app/error.tsx +0 -60
  195. package/templates/storefront-grocery/app/faq/page.tsx +0 -46
  196. package/templates/storefront-grocery/app/globals.css +0 -45
  197. package/templates/storefront-grocery/app/layout.tsx +0 -77
  198. package/templates/storefront-grocery/app/llms.txt/route.ts +0 -94
  199. package/templates/storefront-grocery/app/login/page.tsx +0 -17
  200. package/templates/storefront-grocery/app/not-found.tsx +0 -39
  201. package/templates/storefront-grocery/app/opensearch.xml/route.ts +0 -37
  202. package/templates/storefront-grocery/app/orders/[id]/page.tsx +0 -21
  203. package/templates/storefront-grocery/app/page.tsx +0 -97
  204. package/templates/storefront-grocery/app/privacy/page.tsx +0 -44
  205. package/templates/storefront-grocery/app/returns/page.tsx +0 -11
  206. package/templates/storefront-grocery/app/robots.ts +0 -18
  207. package/templates/storefront-grocery/app/search/page.tsx +0 -38
  208. package/templates/storefront-grocery/app/search/search-client.tsx +0 -7
  209. package/templates/storefront-grocery/app/shipping/page.tsx +0 -16
  210. package/templates/storefront-grocery/app/shop/page.tsx +0 -31
  211. package/templates/storefront-grocery/app/shop/shop-client.tsx +0 -27
  212. package/templates/storefront-grocery/app/signup/page.tsx +0 -17
  213. package/templates/storefront-grocery/app/sitemap-page/page.tsx +0 -167
  214. package/templates/storefront-grocery/app/sitemap.ts +0 -62
  215. package/templates/storefront-grocery/app/terms/page.tsx +0 -44
  216. package/templates/storefront-grocery/app/track-order/page.tsx +0 -24
  217. package/templates/storefront-grocery/app/track-order/track-order-form.tsx +0 -69
  218. package/templates/storefront-grocery/components/account-iframe.tsx +0 -13
  219. package/templates/storefront-grocery/components/cart-drawer.tsx +0 -14
  220. package/templates/storefront-grocery/components/cart-pill.tsx +0 -36
  221. package/templates/storefront-grocery/components/category-grid.tsx +0 -28
  222. package/templates/storefront-grocery/components/collection-strip.tsx +0 -45
  223. package/templates/storefront-grocery/components/footer.tsx +0 -148
  224. package/templates/storefront-grocery/components/header.tsx +0 -43
  225. package/templates/storefront-grocery/components/hero.tsx +0 -25
  226. package/templates/storefront-grocery/components/nav-link.tsx +0 -20
  227. package/templates/storefront-grocery/components/policy-page.tsx +0 -49
  228. package/templates/storefront-grocery/components/product-modal.tsx +0 -104
  229. package/templates/storefront-grocery/components/providers.tsx +0 -35
  230. package/templates/storefront-grocery/components/store-product-card.tsx +0 -87
  231. package/templates/storefront-grocery/lib/brand.ts +0 -375
  232. package/templates/storefront-grocery/lib/cart.ts +0 -12
  233. package/templates/storefront-grocery/next.config.ts +0 -42
  234. package/templates/storefront-grocery/package.json +0 -35
  235. package/templates/storefront-grocery/postcss.config.mjs +0 -7
  236. package/templates/storefront-grocery/tsconfig.json +0 -23
  237. package/templates/storefront-grocery/vitest.config.ts +0 -9
  238. package/templates/storefront-restaurant/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  239. package/templates/storefront-restaurant/.cursor/rules/cimplify-storefront.mdc +0 -25
  240. package/templates/storefront-restaurant/.env.example +0 -16
  241. package/templates/storefront-restaurant/AGENTS.md +0 -102
  242. package/templates/storefront-restaurant/CLAUDE.md +0 -22
  243. package/templates/storefront-restaurant/README.md +0 -73
  244. package/templates/storefront-restaurant/__tests__/brand.test.ts +0 -4
  245. package/templates/storefront-restaurant/__tests__/cart-flow.test.ts +0 -4
  246. package/templates/storefront-restaurant/__tests__/contract.test.ts +0 -4
  247. package/templates/storefront-restaurant/app/about/page.tsx +0 -38
  248. package/templates/storefront-restaurant/app/accessibility/page.tsx +0 -11
  249. package/templates/storefront-restaurant/app/account/addresses/page.tsx +0 -21
  250. package/templates/storefront-restaurant/app/account/orders/page.tsx +0 -21
  251. package/templates/storefront-restaurant/app/account/page.tsx +0 -22
  252. package/templates/storefront-restaurant/app/account/settings/page.tsx +0 -21
  253. package/templates/storefront-restaurant/app/cart/page.tsx +0 -9
  254. package/templates/storefront-restaurant/app/categories/[slug]/listing-client.tsx +0 -19
  255. package/templates/storefront-restaurant/app/categories/[slug]/page.tsx +0 -118
  256. package/templates/storefront-restaurant/app/checkout/page.tsx +0 -17
  257. package/templates/storefront-restaurant/app/collections/[slug]/listing-client.tsx +0 -20
  258. package/templates/storefront-restaurant/app/collections/[slug]/page.tsx +0 -118
  259. package/templates/storefront-restaurant/app/contact/contact-form.tsx +0 -109
  260. package/templates/storefront-restaurant/app/contact/page.tsx +0 -54
  261. package/templates/storefront-restaurant/app/error.tsx +0 -60
  262. package/templates/storefront-restaurant/app/faq/page.tsx +0 -46
  263. package/templates/storefront-restaurant/app/globals.css +0 -44
  264. package/templates/storefront-restaurant/app/layout.tsx +0 -82
  265. package/templates/storefront-restaurant/app/llms.txt/route.ts +0 -94
  266. package/templates/storefront-restaurant/app/login/page.tsx +0 -17
  267. package/templates/storefront-restaurant/app/not-found.tsx +0 -39
  268. package/templates/storefront-restaurant/app/opensearch.xml/route.ts +0 -37
  269. package/templates/storefront-restaurant/app/orders/[id]/page.tsx +0 -21
  270. package/templates/storefront-restaurant/app/page.tsx +0 -97
  271. package/templates/storefront-restaurant/app/privacy/page.tsx +0 -44
  272. package/templates/storefront-restaurant/app/reservations/page.tsx +0 -66
  273. package/templates/storefront-restaurant/app/reservations/reservations-client.tsx +0 -234
  274. package/templates/storefront-restaurant/app/returns/page.tsx +0 -11
  275. package/templates/storefront-restaurant/app/robots.ts +0 -18
  276. package/templates/storefront-restaurant/app/search/page.tsx +0 -38
  277. package/templates/storefront-restaurant/app/search/search-client.tsx +0 -7
  278. package/templates/storefront-restaurant/app/shipping/page.tsx +0 -16
  279. package/templates/storefront-restaurant/app/shop/page.tsx +0 -31
  280. package/templates/storefront-restaurant/app/shop/shop-client.tsx +0 -27
  281. package/templates/storefront-restaurant/app/signup/page.tsx +0 -17
  282. package/templates/storefront-restaurant/app/sitemap-page/page.tsx +0 -167
  283. package/templates/storefront-restaurant/app/sitemap.ts +0 -62
  284. package/templates/storefront-restaurant/app/terms/page.tsx +0 -44
  285. package/templates/storefront-restaurant/app/track-order/page.tsx +0 -24
  286. package/templates/storefront-restaurant/app/track-order/track-order-form.tsx +0 -69
  287. package/templates/storefront-restaurant/components/account-iframe.tsx +0 -13
  288. package/templates/storefront-restaurant/components/cart-drawer.tsx +0 -14
  289. package/templates/storefront-restaurant/components/cart-pill.tsx +0 -36
  290. package/templates/storefront-restaurant/components/category-grid.tsx +0 -28
  291. package/templates/storefront-restaurant/components/collection-strip.tsx +0 -45
  292. package/templates/storefront-restaurant/components/footer.tsx +0 -148
  293. package/templates/storefront-restaurant/components/header.tsx +0 -43
  294. package/templates/storefront-restaurant/components/hero.tsx +0 -25
  295. package/templates/storefront-restaurant/components/nav-link.tsx +0 -20
  296. package/templates/storefront-restaurant/components/policy-page.tsx +0 -49
  297. package/templates/storefront-restaurant/components/product-modal.tsx +0 -104
  298. package/templates/storefront-restaurant/components/providers.tsx +0 -35
  299. package/templates/storefront-restaurant/components/store-product-card.tsx +0 -87
  300. package/templates/storefront-restaurant/lib/brand.ts +0 -377
  301. package/templates/storefront-restaurant/lib/cart.ts +0 -12
  302. package/templates/storefront-restaurant/next.config.ts +0 -42
  303. package/templates/storefront-restaurant/package.json +0 -35
  304. package/templates/storefront-restaurant/postcss.config.mjs +0 -7
  305. package/templates/storefront-restaurant/tsconfig.json +0 -23
  306. package/templates/storefront-restaurant/vitest.config.ts +0 -9
  307. package/templates/storefront-retail/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  308. package/templates/storefront-retail/.cursor/rules/cimplify-storefront.mdc +0 -25
  309. package/templates/storefront-retail/.env.example +0 -16
  310. package/templates/storefront-retail/AGENTS.md +0 -117
  311. package/templates/storefront-retail/CLAUDE.md +0 -22
  312. package/templates/storefront-retail/README.md +0 -77
  313. package/templates/storefront-retail/__tests__/brand.test.ts +0 -4
  314. package/templates/storefront-retail/__tests__/cart-flow.test.ts +0 -4
  315. package/templates/storefront-retail/__tests__/contract.test.ts +0 -4
  316. package/templates/storefront-retail/app/about/page.tsx +0 -41
  317. package/templates/storefront-retail/app/accessibility/page.tsx +0 -11
  318. package/templates/storefront-retail/app/account/addresses/page.tsx +0 -21
  319. package/templates/storefront-retail/app/account/orders/page.tsx +0 -21
  320. package/templates/storefront-retail/app/account/page.tsx +0 -22
  321. package/templates/storefront-retail/app/account/settings/page.tsx +0 -21
  322. package/templates/storefront-retail/app/cart/page.tsx +0 -9
  323. package/templates/storefront-retail/app/categories/[slug]/listing-client.tsx +0 -19
  324. package/templates/storefront-retail/app/categories/[slug]/page.tsx +0 -130
  325. package/templates/storefront-retail/app/checkout/page.tsx +0 -17
  326. package/templates/storefront-retail/app/collections/[slug]/listing-client.tsx +0 -20
  327. package/templates/storefront-retail/app/collections/[slug]/page.tsx +0 -130
  328. package/templates/storefront-retail/app/contact/contact-form.tsx +0 -109
  329. package/templates/storefront-retail/app/contact/page.tsx +0 -54
  330. package/templates/storefront-retail/app/error.tsx +0 -61
  331. package/templates/storefront-retail/app/faq/page.tsx +0 -46
  332. package/templates/storefront-retail/app/globals.css +0 -47
  333. package/templates/storefront-retail/app/layout.tsx +0 -77
  334. package/templates/storefront-retail/app/llms.txt/route.ts +0 -94
  335. package/templates/storefront-retail/app/login/page.tsx +0 -17
  336. package/templates/storefront-retail/app/not-found.tsx +0 -39
  337. package/templates/storefront-retail/app/opensearch.xml/route.ts +0 -37
  338. package/templates/storefront-retail/app/orders/[id]/page.tsx +0 -24
  339. package/templates/storefront-retail/app/page.tsx +0 -182
  340. package/templates/storefront-retail/app/privacy/page.tsx +0 -44
  341. package/templates/storefront-retail/app/products/[slug]/page.tsx +0 -165
  342. package/templates/storefront-retail/app/products/[slug]/product-detail.tsx +0 -70
  343. package/templates/storefront-retail/app/returns/page.tsx +0 -11
  344. package/templates/storefront-retail/app/robots.ts +0 -18
  345. package/templates/storefront-retail/app/search/page.tsx +0 -38
  346. package/templates/storefront-retail/app/search/search-client.tsx +0 -7
  347. package/templates/storefront-retail/app/shipping/page.tsx +0 -16
  348. package/templates/storefront-retail/app/shop/page.tsx +0 -63
  349. package/templates/storefront-retail/app/shop/shop-client.tsx +0 -32
  350. package/templates/storefront-retail/app/signup/page.tsx +0 -17
  351. package/templates/storefront-retail/app/sitemap-page/page.tsx +0 -167
  352. package/templates/storefront-retail/app/sitemap.ts +0 -59
  353. package/templates/storefront-retail/app/terms/page.tsx +0 -44
  354. package/templates/storefront-retail/app/track-order/page.tsx +0 -24
  355. package/templates/storefront-retail/app/track-order/track-order-form.tsx +0 -69
  356. package/templates/storefront-retail/components/account-iframe.tsx +0 -13
  357. package/templates/storefront-retail/components/brand-marquee.tsx +0 -27
  358. package/templates/storefront-retail/components/cart-drawer.tsx +0 -14
  359. package/templates/storefront-retail/components/cart-pill.tsx +0 -36
  360. package/templates/storefront-retail/components/category-grid.tsx +0 -28
  361. package/templates/storefront-retail/components/category-tiles.tsx +0 -104
  362. package/templates/storefront-retail/components/collection-strip.tsx +0 -45
  363. package/templates/storefront-retail/components/feature-hero.tsx +0 -84
  364. package/templates/storefront-retail/components/footer.tsx +0 -153
  365. package/templates/storefront-retail/components/header.tsx +0 -45
  366. package/templates/storefront-retail/components/hero.tsx +0 -28
  367. package/templates/storefront-retail/components/nav-link.tsx +0 -20
  368. package/templates/storefront-retail/components/newsletter.tsx +0 -50
  369. package/templates/storefront-retail/components/policy-page.tsx +0 -49
  370. package/templates/storefront-retail/components/promo-banner.tsx +0 -41
  371. package/templates/storefront-retail/components/providers.tsx +0 -35
  372. package/templates/storefront-retail/components/section-heading.tsx +0 -37
  373. package/templates/storefront-retail/components/store-product-card.tsx +0 -87
  374. package/templates/storefront-retail/components/trade-in-cta.tsx +0 -54
  375. package/templates/storefront-retail/components/trust-bar.tsx +0 -66
  376. package/templates/storefront-retail/lib/brand.ts +0 -664
  377. package/templates/storefront-retail/lib/cart.ts +0 -12
  378. package/templates/storefront-retail/next.config.ts +0 -42
  379. package/templates/storefront-retail/package.json +0 -35
  380. package/templates/storefront-retail/postcss.config.mjs +0 -7
  381. package/templates/storefront-retail/tsconfig.json +0 -23
  382. package/templates/storefront-retail/vitest.config.ts +0 -9
  383. package/templates/storefront-services/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  384. package/templates/storefront-services/.cursor/rules/cimplify-storefront.mdc +0 -25
  385. package/templates/storefront-services/.env.example +0 -16
  386. package/templates/storefront-services/AGENTS.md +0 -101
  387. package/templates/storefront-services/CLAUDE.md +0 -22
  388. package/templates/storefront-services/README.md +0 -73
  389. package/templates/storefront-services/__tests__/brand.test.ts +0 -4
  390. package/templates/storefront-services/__tests__/cart-flow.test.ts +0 -4
  391. package/templates/storefront-services/__tests__/contract.test.ts +0 -4
  392. package/templates/storefront-services/app/about/page.tsx +0 -38
  393. package/templates/storefront-services/app/accessibility/page.tsx +0 -11
  394. package/templates/storefront-services/app/account/addresses/page.tsx +0 -21
  395. package/templates/storefront-services/app/account/orders/page.tsx +0 -21
  396. package/templates/storefront-services/app/account/page.tsx +0 -22
  397. package/templates/storefront-services/app/account/settings/page.tsx +0 -21
  398. package/templates/storefront-services/app/book/book-client.tsx +0 -195
  399. package/templates/storefront-services/app/book/page.tsx +0 -65
  400. package/templates/storefront-services/app/cart/page.tsx +0 -9
  401. package/templates/storefront-services/app/categories/[slug]/listing-client.tsx +0 -19
  402. package/templates/storefront-services/app/categories/[slug]/page.tsx +0 -118
  403. package/templates/storefront-services/app/checkout/page.tsx +0 -17
  404. package/templates/storefront-services/app/collections/[slug]/listing-client.tsx +0 -20
  405. package/templates/storefront-services/app/collections/[slug]/page.tsx +0 -118
  406. package/templates/storefront-services/app/contact/contact-form.tsx +0 -109
  407. package/templates/storefront-services/app/contact/page.tsx +0 -54
  408. package/templates/storefront-services/app/error.tsx +0 -60
  409. package/templates/storefront-services/app/faq/page.tsx +0 -46
  410. package/templates/storefront-services/app/globals.css +0 -45
  411. package/templates/storefront-services/app/layout.tsx +0 -82
  412. package/templates/storefront-services/app/llms.txt/route.ts +0 -94
  413. package/templates/storefront-services/app/login/page.tsx +0 -17
  414. package/templates/storefront-services/app/not-found.tsx +0 -39
  415. package/templates/storefront-services/app/opensearch.xml/route.ts +0 -37
  416. package/templates/storefront-services/app/orders/[id]/page.tsx +0 -21
  417. package/templates/storefront-services/app/page.tsx +0 -97
  418. package/templates/storefront-services/app/privacy/page.tsx +0 -44
  419. package/templates/storefront-services/app/returns/page.tsx +0 -11
  420. package/templates/storefront-services/app/robots.ts +0 -18
  421. package/templates/storefront-services/app/search/page.tsx +0 -38
  422. package/templates/storefront-services/app/search/search-client.tsx +0 -7
  423. package/templates/storefront-services/app/shipping/page.tsx +0 -16
  424. package/templates/storefront-services/app/shop/page.tsx +0 -31
  425. package/templates/storefront-services/app/shop/shop-client.tsx +0 -27
  426. package/templates/storefront-services/app/signup/page.tsx +0 -17
  427. package/templates/storefront-services/app/sitemap-page/page.tsx +0 -167
  428. package/templates/storefront-services/app/sitemap.ts +0 -62
  429. package/templates/storefront-services/app/terms/page.tsx +0 -44
  430. package/templates/storefront-services/app/track-order/page.tsx +0 -24
  431. package/templates/storefront-services/app/track-order/track-order-form.tsx +0 -69
  432. package/templates/storefront-services/components/account-iframe.tsx +0 -13
  433. package/templates/storefront-services/components/cart-drawer.tsx +0 -14
  434. package/templates/storefront-services/components/cart-pill.tsx +0 -36
  435. package/templates/storefront-services/components/category-grid.tsx +0 -28
  436. package/templates/storefront-services/components/collection-strip.tsx +0 -45
  437. package/templates/storefront-services/components/footer.tsx +0 -148
  438. package/templates/storefront-services/components/header.tsx +0 -43
  439. package/templates/storefront-services/components/hero.tsx +0 -25
  440. package/templates/storefront-services/components/nav-link.tsx +0 -20
  441. package/templates/storefront-services/components/policy-page.tsx +0 -49
  442. package/templates/storefront-services/components/product-modal.tsx +0 -104
  443. package/templates/storefront-services/components/providers.tsx +0 -35
  444. package/templates/storefront-services/components/store-product-card.tsx +0 -87
  445. package/templates/storefront-services/lib/brand.ts +0 -396
  446. package/templates/storefront-services/lib/cart.ts +0 -12
  447. package/templates/storefront-services/next.config.ts +0 -42
  448. package/templates/storefront-services/package.json +0 -35
  449. package/templates/storefront-services/postcss.config.mjs +0 -7
  450. package/templates/storefront-services/tsconfig.json +0 -23
  451. package/templates/storefront-services/vitest.config.ts +0 -9
@@ -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
- }