@cimplify/sdk 0.44.33 → 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 (450) 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 -569
  5. package/dist/cli/commands/dev.mjs +0 -434
  6. package/dist/cli/commands/domains.mjs +0 -653
  7. package/dist/cli/commands/env.mjs +0 -610
  8. package/dist/cli/commands/link.mjs +0 -325
  9. package/dist/cli/commands/login.mjs +0 -515
  10. package/dist/cli/commands/logout.mjs +0 -54
  11. package/dist/cli/commands/logs.mjs +0 -358
  12. package/dist/cli/commands/projects.mjs +0 -327
  13. package/dist/cli/commands/rollback.mjs +0 -477
  14. package/dist/cli/commands/status.mjs +0 -380
  15. package/dist/cli/commands/unlink.mjs +0 -58
  16. package/dist/cli/commands/whoami.mjs +0 -234
  17. package/dist/cli.js +0 -184
  18. package/dist/dispatcher.mjs +0 -286
  19. package/registry/booking-page.json +0 -18
  20. package/registry/bookings-page.json +0 -17
  21. package/registry/service-card.json +0 -16
  22. package/registry/service-grid.json +0 -16
  23. package/templates/storefront-bakery/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  24. package/templates/storefront-bakery/.cursor/rules/cimplify-storefront.mdc +0 -25
  25. package/templates/storefront-bakery/.env.example +0 -16
  26. package/templates/storefront-bakery/AGENTS.md +0 -120
  27. package/templates/storefront-bakery/CLAUDE.md +0 -22
  28. package/templates/storefront-bakery/README.md +0 -73
  29. package/templates/storefront-bakery/__tests__/brand.test.ts +0 -4
  30. package/templates/storefront-bakery/__tests__/cart-flow.test.ts +0 -4
  31. package/templates/storefront-bakery/__tests__/contract.test.ts +0 -4
  32. package/templates/storefront-bakery/app/about/page.tsx +0 -38
  33. package/templates/storefront-bakery/app/accessibility/page.tsx +0 -11
  34. package/templates/storefront-bakery/app/account/addresses/page.tsx +0 -21
  35. package/templates/storefront-bakery/app/account/orders/page.tsx +0 -21
  36. package/templates/storefront-bakery/app/account/page.tsx +0 -22
  37. package/templates/storefront-bakery/app/account/settings/page.tsx +0 -21
  38. package/templates/storefront-bakery/app/cart/page.tsx +0 -9
  39. package/templates/storefront-bakery/app/categories/[slug]/listing-client.tsx +0 -19
  40. package/templates/storefront-bakery/app/categories/[slug]/page.tsx +0 -118
  41. package/templates/storefront-bakery/app/checkout/page.tsx +0 -17
  42. package/templates/storefront-bakery/app/collections/[slug]/listing-client.tsx +0 -20
  43. package/templates/storefront-bakery/app/collections/[slug]/page.tsx +0 -118
  44. package/templates/storefront-bakery/app/contact/contact-form.tsx +0 -109
  45. package/templates/storefront-bakery/app/contact/page.tsx +0 -54
  46. package/templates/storefront-bakery/app/error.tsx +0 -60
  47. package/templates/storefront-bakery/app/faq/page.tsx +0 -46
  48. package/templates/storefront-bakery/app/globals.css +0 -47
  49. package/templates/storefront-bakery/app/layout.tsx +0 -82
  50. package/templates/storefront-bakery/app/llms.txt/route.ts +0 -94
  51. package/templates/storefront-bakery/app/login/page.tsx +0 -17
  52. package/templates/storefront-bakery/app/not-found.tsx +0 -39
  53. package/templates/storefront-bakery/app/opensearch.xml/route.ts +0 -37
  54. package/templates/storefront-bakery/app/orders/[id]/page.tsx +0 -21
  55. package/templates/storefront-bakery/app/page.tsx +0 -97
  56. package/templates/storefront-bakery/app/privacy/page.tsx +0 -44
  57. package/templates/storefront-bakery/app/returns/page.tsx +0 -11
  58. package/templates/storefront-bakery/app/robots.ts +0 -18
  59. package/templates/storefront-bakery/app/search/page.tsx +0 -38
  60. package/templates/storefront-bakery/app/search/search-client.tsx +0 -7
  61. package/templates/storefront-bakery/app/shipping/page.tsx +0 -16
  62. package/templates/storefront-bakery/app/shop/page.tsx +0 -31
  63. package/templates/storefront-bakery/app/shop/shop-client.tsx +0 -27
  64. package/templates/storefront-bakery/app/signup/page.tsx +0 -17
  65. package/templates/storefront-bakery/app/sitemap-page/page.tsx +0 -167
  66. package/templates/storefront-bakery/app/sitemap.ts +0 -62
  67. package/templates/storefront-bakery/app/terms/page.tsx +0 -44
  68. package/templates/storefront-bakery/app/track-order/page.tsx +0 -24
  69. package/templates/storefront-bakery/app/track-order/track-order-form.tsx +0 -69
  70. package/templates/storefront-bakery/components/account-iframe.tsx +0 -13
  71. package/templates/storefront-bakery/components/cart-drawer.tsx +0 -14
  72. package/templates/storefront-bakery/components/cart-pill.tsx +0 -36
  73. package/templates/storefront-bakery/components/category-grid.tsx +0 -28
  74. package/templates/storefront-bakery/components/collection-strip.tsx +0 -45
  75. package/templates/storefront-bakery/components/footer.tsx +0 -148
  76. package/templates/storefront-bakery/components/header.tsx +0 -43
  77. package/templates/storefront-bakery/components/hero.tsx +0 -25
  78. package/templates/storefront-bakery/components/nav-link.tsx +0 -20
  79. package/templates/storefront-bakery/components/policy-page.tsx +0 -49
  80. package/templates/storefront-bakery/components/product-modal.tsx +0 -104
  81. package/templates/storefront-bakery/components/providers.tsx +0 -35
  82. package/templates/storefront-bakery/components/store-product-card.tsx +0 -87
  83. package/templates/storefront-bakery/lib/brand.ts +0 -570
  84. package/templates/storefront-bakery/lib/cart.ts +0 -12
  85. package/templates/storefront-bakery/next.config.ts +0 -42
  86. package/templates/storefront-bakery/package.json +0 -35
  87. package/templates/storefront-bakery/postcss.config.mjs +0 -7
  88. package/templates/storefront-bakery/tsconfig.json +0 -23
  89. package/templates/storefront-bakery/vitest.config.ts +0 -9
  90. package/templates/storefront-fashion/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  91. package/templates/storefront-fashion/.cursor/rules/cimplify-storefront.mdc +0 -25
  92. package/templates/storefront-fashion/.env.example +0 -16
  93. package/templates/storefront-fashion/AGENTS.md +0 -126
  94. package/templates/storefront-fashion/CLAUDE.md +0 -22
  95. package/templates/storefront-fashion/README.md +0 -77
  96. package/templates/storefront-fashion/__tests__/brand.test.ts +0 -4
  97. package/templates/storefront-fashion/__tests__/cart-flow.test.ts +0 -55
  98. package/templates/storefront-fashion/__tests__/contract.test.ts +0 -4
  99. package/templates/storefront-fashion/app/about/page.tsx +0 -41
  100. package/templates/storefront-fashion/app/accessibility/page.tsx +0 -11
  101. package/templates/storefront-fashion/app/account/addresses/page.tsx +0 -21
  102. package/templates/storefront-fashion/app/account/orders/page.tsx +0 -21
  103. package/templates/storefront-fashion/app/account/page.tsx +0 -22
  104. package/templates/storefront-fashion/app/account/settings/page.tsx +0 -21
  105. package/templates/storefront-fashion/app/cart/page.tsx +0 -9
  106. package/templates/storefront-fashion/app/categories/[slug]/listing-client.tsx +0 -19
  107. package/templates/storefront-fashion/app/categories/[slug]/page.tsx +0 -130
  108. package/templates/storefront-fashion/app/checkout/page.tsx +0 -17
  109. package/templates/storefront-fashion/app/collections/[slug]/listing-client.tsx +0 -20
  110. package/templates/storefront-fashion/app/collections/[slug]/page.tsx +0 -130
  111. package/templates/storefront-fashion/app/contact/contact-form.tsx +0 -109
  112. package/templates/storefront-fashion/app/contact/page.tsx +0 -54
  113. package/templates/storefront-fashion/app/error.tsx +0 -61
  114. package/templates/storefront-fashion/app/faq/page.tsx +0 -46
  115. package/templates/storefront-fashion/app/globals.css +0 -46
  116. package/templates/storefront-fashion/app/layout.tsx +0 -78
  117. package/templates/storefront-fashion/app/llms.txt/route.ts +0 -94
  118. package/templates/storefront-fashion/app/login/page.tsx +0 -17
  119. package/templates/storefront-fashion/app/lookbook/page.tsx +0 -132
  120. package/templates/storefront-fashion/app/not-found.tsx +0 -39
  121. package/templates/storefront-fashion/app/opensearch.xml/route.ts +0 -37
  122. package/templates/storefront-fashion/app/orders/[id]/page.tsx +0 -24
  123. package/templates/storefront-fashion/app/page.tsx +0 -183
  124. package/templates/storefront-fashion/app/privacy/page.tsx +0 -44
  125. package/templates/storefront-fashion/app/products/[slug]/page.tsx +0 -165
  126. package/templates/storefront-fashion/app/products/[slug]/product-detail.tsx +0 -70
  127. package/templates/storefront-fashion/app/returns/page.tsx +0 -11
  128. package/templates/storefront-fashion/app/robots.ts +0 -18
  129. package/templates/storefront-fashion/app/search/page.tsx +0 -38
  130. package/templates/storefront-fashion/app/search/search-client.tsx +0 -7
  131. package/templates/storefront-fashion/app/shipping/page.tsx +0 -16
  132. package/templates/storefront-fashion/app/shop/page.tsx +0 -63
  133. package/templates/storefront-fashion/app/shop/shop-client.tsx +0 -32
  134. package/templates/storefront-fashion/app/signup/page.tsx +0 -17
  135. package/templates/storefront-fashion/app/sitemap-page/page.tsx +0 -167
  136. package/templates/storefront-fashion/app/sitemap.ts +0 -59
  137. package/templates/storefront-fashion/app/size-guide/page.tsx +0 -155
  138. package/templates/storefront-fashion/app/terms/page.tsx +0 -44
  139. package/templates/storefront-fashion/app/track-order/page.tsx +0 -24
  140. package/templates/storefront-fashion/app/track-order/track-order-form.tsx +0 -69
  141. package/templates/storefront-fashion/components/account-iframe.tsx +0 -13
  142. package/templates/storefront-fashion/components/brand-marquee.tsx +0 -27
  143. package/templates/storefront-fashion/components/cart-drawer.tsx +0 -14
  144. package/templates/storefront-fashion/components/cart-pill.tsx +0 -36
  145. package/templates/storefront-fashion/components/category-grid.tsx +0 -28
  146. package/templates/storefront-fashion/components/category-tiles.tsx +0 -104
  147. package/templates/storefront-fashion/components/collection-strip.tsx +0 -45
  148. package/templates/storefront-fashion/components/feature-hero.tsx +0 -82
  149. package/templates/storefront-fashion/components/footer.tsx +0 -153
  150. package/templates/storefront-fashion/components/header.tsx +0 -43
  151. package/templates/storefront-fashion/components/hero.tsx +0 -28
  152. package/templates/storefront-fashion/components/nav-link.tsx +0 -20
  153. package/templates/storefront-fashion/components/newsletter.tsx +0 -50
  154. package/templates/storefront-fashion/components/policy-page.tsx +0 -49
  155. package/templates/storefront-fashion/components/promo-banner.tsx +0 -41
  156. package/templates/storefront-fashion/components/providers.tsx +0 -35
  157. package/templates/storefront-fashion/components/section-heading.tsx +0 -37
  158. package/templates/storefront-fashion/components/store-product-card.tsx +0 -87
  159. package/templates/storefront-fashion/components/trade-in-cta.tsx +0 -54
  160. package/templates/storefront-fashion/components/trust-bar.tsx +0 -66
  161. package/templates/storefront-fashion/e2e/visual.spec.ts +0 -52
  162. package/templates/storefront-fashion/lib/brand.ts +0 -518
  163. package/templates/storefront-fashion/lib/cart.ts +0 -12
  164. package/templates/storefront-fashion/next.config.ts +0 -42
  165. package/templates/storefront-fashion/package.json +0 -38
  166. package/templates/storefront-fashion/playwright.config.ts +0 -48
  167. package/templates/storefront-fashion/postcss.config.mjs +0 -7
  168. package/templates/storefront-fashion/tsconfig.json +0 -23
  169. package/templates/storefront-fashion/vitest.config.ts +0 -9
  170. package/templates/storefront-grocery/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  171. package/templates/storefront-grocery/.cursor/rules/cimplify-storefront.mdc +0 -25
  172. package/templates/storefront-grocery/.env.example +0 -16
  173. package/templates/storefront-grocery/AGENTS.md +0 -96
  174. package/templates/storefront-grocery/CLAUDE.md +0 -22
  175. package/templates/storefront-grocery/README.md +0 -73
  176. package/templates/storefront-grocery/__tests__/brand.test.ts +0 -4
  177. package/templates/storefront-grocery/__tests__/cart-flow.test.ts +0 -4
  178. package/templates/storefront-grocery/__tests__/contract.test.ts +0 -4
  179. package/templates/storefront-grocery/app/about/page.tsx +0 -38
  180. package/templates/storefront-grocery/app/accessibility/page.tsx +0 -11
  181. package/templates/storefront-grocery/app/account/addresses/page.tsx +0 -21
  182. package/templates/storefront-grocery/app/account/orders/page.tsx +0 -21
  183. package/templates/storefront-grocery/app/account/page.tsx +0 -22
  184. package/templates/storefront-grocery/app/account/settings/page.tsx +0 -21
  185. package/templates/storefront-grocery/app/cart/page.tsx +0 -9
  186. package/templates/storefront-grocery/app/categories/[slug]/listing-client.tsx +0 -19
  187. package/templates/storefront-grocery/app/categories/[slug]/page.tsx +0 -118
  188. package/templates/storefront-grocery/app/checkout/page.tsx +0 -17
  189. package/templates/storefront-grocery/app/collections/[slug]/listing-client.tsx +0 -20
  190. package/templates/storefront-grocery/app/collections/[slug]/page.tsx +0 -118
  191. package/templates/storefront-grocery/app/contact/contact-form.tsx +0 -109
  192. package/templates/storefront-grocery/app/contact/page.tsx +0 -54
  193. package/templates/storefront-grocery/app/error.tsx +0 -60
  194. package/templates/storefront-grocery/app/faq/page.tsx +0 -46
  195. package/templates/storefront-grocery/app/globals.css +0 -45
  196. package/templates/storefront-grocery/app/layout.tsx +0 -77
  197. package/templates/storefront-grocery/app/llms.txt/route.ts +0 -94
  198. package/templates/storefront-grocery/app/login/page.tsx +0 -17
  199. package/templates/storefront-grocery/app/not-found.tsx +0 -39
  200. package/templates/storefront-grocery/app/opensearch.xml/route.ts +0 -37
  201. package/templates/storefront-grocery/app/orders/[id]/page.tsx +0 -21
  202. package/templates/storefront-grocery/app/page.tsx +0 -97
  203. package/templates/storefront-grocery/app/privacy/page.tsx +0 -44
  204. package/templates/storefront-grocery/app/returns/page.tsx +0 -11
  205. package/templates/storefront-grocery/app/robots.ts +0 -18
  206. package/templates/storefront-grocery/app/search/page.tsx +0 -38
  207. package/templates/storefront-grocery/app/search/search-client.tsx +0 -7
  208. package/templates/storefront-grocery/app/shipping/page.tsx +0 -16
  209. package/templates/storefront-grocery/app/shop/page.tsx +0 -31
  210. package/templates/storefront-grocery/app/shop/shop-client.tsx +0 -27
  211. package/templates/storefront-grocery/app/signup/page.tsx +0 -17
  212. package/templates/storefront-grocery/app/sitemap-page/page.tsx +0 -167
  213. package/templates/storefront-grocery/app/sitemap.ts +0 -62
  214. package/templates/storefront-grocery/app/terms/page.tsx +0 -44
  215. package/templates/storefront-grocery/app/track-order/page.tsx +0 -24
  216. package/templates/storefront-grocery/app/track-order/track-order-form.tsx +0 -69
  217. package/templates/storefront-grocery/components/account-iframe.tsx +0 -13
  218. package/templates/storefront-grocery/components/cart-drawer.tsx +0 -14
  219. package/templates/storefront-grocery/components/cart-pill.tsx +0 -36
  220. package/templates/storefront-grocery/components/category-grid.tsx +0 -28
  221. package/templates/storefront-grocery/components/collection-strip.tsx +0 -45
  222. package/templates/storefront-grocery/components/footer.tsx +0 -148
  223. package/templates/storefront-grocery/components/header.tsx +0 -43
  224. package/templates/storefront-grocery/components/hero.tsx +0 -25
  225. package/templates/storefront-grocery/components/nav-link.tsx +0 -20
  226. package/templates/storefront-grocery/components/policy-page.tsx +0 -49
  227. package/templates/storefront-grocery/components/product-modal.tsx +0 -104
  228. package/templates/storefront-grocery/components/providers.tsx +0 -35
  229. package/templates/storefront-grocery/components/store-product-card.tsx +0 -87
  230. package/templates/storefront-grocery/lib/brand.ts +0 -375
  231. package/templates/storefront-grocery/lib/cart.ts +0 -12
  232. package/templates/storefront-grocery/next.config.ts +0 -42
  233. package/templates/storefront-grocery/package.json +0 -35
  234. package/templates/storefront-grocery/postcss.config.mjs +0 -7
  235. package/templates/storefront-grocery/tsconfig.json +0 -23
  236. package/templates/storefront-grocery/vitest.config.ts +0 -9
  237. package/templates/storefront-restaurant/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  238. package/templates/storefront-restaurant/.cursor/rules/cimplify-storefront.mdc +0 -25
  239. package/templates/storefront-restaurant/.env.example +0 -16
  240. package/templates/storefront-restaurant/AGENTS.md +0 -102
  241. package/templates/storefront-restaurant/CLAUDE.md +0 -22
  242. package/templates/storefront-restaurant/README.md +0 -73
  243. package/templates/storefront-restaurant/__tests__/brand.test.ts +0 -4
  244. package/templates/storefront-restaurant/__tests__/cart-flow.test.ts +0 -4
  245. package/templates/storefront-restaurant/__tests__/contract.test.ts +0 -4
  246. package/templates/storefront-restaurant/app/about/page.tsx +0 -38
  247. package/templates/storefront-restaurant/app/accessibility/page.tsx +0 -11
  248. package/templates/storefront-restaurant/app/account/addresses/page.tsx +0 -21
  249. package/templates/storefront-restaurant/app/account/orders/page.tsx +0 -21
  250. package/templates/storefront-restaurant/app/account/page.tsx +0 -22
  251. package/templates/storefront-restaurant/app/account/settings/page.tsx +0 -21
  252. package/templates/storefront-restaurant/app/cart/page.tsx +0 -9
  253. package/templates/storefront-restaurant/app/categories/[slug]/listing-client.tsx +0 -19
  254. package/templates/storefront-restaurant/app/categories/[slug]/page.tsx +0 -118
  255. package/templates/storefront-restaurant/app/checkout/page.tsx +0 -17
  256. package/templates/storefront-restaurant/app/collections/[slug]/listing-client.tsx +0 -20
  257. package/templates/storefront-restaurant/app/collections/[slug]/page.tsx +0 -118
  258. package/templates/storefront-restaurant/app/contact/contact-form.tsx +0 -109
  259. package/templates/storefront-restaurant/app/contact/page.tsx +0 -54
  260. package/templates/storefront-restaurant/app/error.tsx +0 -60
  261. package/templates/storefront-restaurant/app/faq/page.tsx +0 -46
  262. package/templates/storefront-restaurant/app/globals.css +0 -44
  263. package/templates/storefront-restaurant/app/layout.tsx +0 -82
  264. package/templates/storefront-restaurant/app/llms.txt/route.ts +0 -94
  265. package/templates/storefront-restaurant/app/login/page.tsx +0 -17
  266. package/templates/storefront-restaurant/app/not-found.tsx +0 -39
  267. package/templates/storefront-restaurant/app/opensearch.xml/route.ts +0 -37
  268. package/templates/storefront-restaurant/app/orders/[id]/page.tsx +0 -21
  269. package/templates/storefront-restaurant/app/page.tsx +0 -97
  270. package/templates/storefront-restaurant/app/privacy/page.tsx +0 -44
  271. package/templates/storefront-restaurant/app/reservations/page.tsx +0 -66
  272. package/templates/storefront-restaurant/app/reservations/reservations-client.tsx +0 -234
  273. package/templates/storefront-restaurant/app/returns/page.tsx +0 -11
  274. package/templates/storefront-restaurant/app/robots.ts +0 -18
  275. package/templates/storefront-restaurant/app/search/page.tsx +0 -38
  276. package/templates/storefront-restaurant/app/search/search-client.tsx +0 -7
  277. package/templates/storefront-restaurant/app/shipping/page.tsx +0 -16
  278. package/templates/storefront-restaurant/app/shop/page.tsx +0 -31
  279. package/templates/storefront-restaurant/app/shop/shop-client.tsx +0 -27
  280. package/templates/storefront-restaurant/app/signup/page.tsx +0 -17
  281. package/templates/storefront-restaurant/app/sitemap-page/page.tsx +0 -167
  282. package/templates/storefront-restaurant/app/sitemap.ts +0 -62
  283. package/templates/storefront-restaurant/app/terms/page.tsx +0 -44
  284. package/templates/storefront-restaurant/app/track-order/page.tsx +0 -24
  285. package/templates/storefront-restaurant/app/track-order/track-order-form.tsx +0 -69
  286. package/templates/storefront-restaurant/components/account-iframe.tsx +0 -13
  287. package/templates/storefront-restaurant/components/cart-drawer.tsx +0 -14
  288. package/templates/storefront-restaurant/components/cart-pill.tsx +0 -36
  289. package/templates/storefront-restaurant/components/category-grid.tsx +0 -28
  290. package/templates/storefront-restaurant/components/collection-strip.tsx +0 -45
  291. package/templates/storefront-restaurant/components/footer.tsx +0 -148
  292. package/templates/storefront-restaurant/components/header.tsx +0 -43
  293. package/templates/storefront-restaurant/components/hero.tsx +0 -25
  294. package/templates/storefront-restaurant/components/nav-link.tsx +0 -20
  295. package/templates/storefront-restaurant/components/policy-page.tsx +0 -49
  296. package/templates/storefront-restaurant/components/product-modal.tsx +0 -104
  297. package/templates/storefront-restaurant/components/providers.tsx +0 -35
  298. package/templates/storefront-restaurant/components/store-product-card.tsx +0 -87
  299. package/templates/storefront-restaurant/lib/brand.ts +0 -377
  300. package/templates/storefront-restaurant/lib/cart.ts +0 -12
  301. package/templates/storefront-restaurant/next.config.ts +0 -42
  302. package/templates/storefront-restaurant/package.json +0 -35
  303. package/templates/storefront-restaurant/postcss.config.mjs +0 -7
  304. package/templates/storefront-restaurant/tsconfig.json +0 -23
  305. package/templates/storefront-restaurant/vitest.config.ts +0 -9
  306. package/templates/storefront-retail/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  307. package/templates/storefront-retail/.cursor/rules/cimplify-storefront.mdc +0 -25
  308. package/templates/storefront-retail/.env.example +0 -16
  309. package/templates/storefront-retail/AGENTS.md +0 -117
  310. package/templates/storefront-retail/CLAUDE.md +0 -22
  311. package/templates/storefront-retail/README.md +0 -77
  312. package/templates/storefront-retail/__tests__/brand.test.ts +0 -4
  313. package/templates/storefront-retail/__tests__/cart-flow.test.ts +0 -4
  314. package/templates/storefront-retail/__tests__/contract.test.ts +0 -4
  315. package/templates/storefront-retail/app/about/page.tsx +0 -41
  316. package/templates/storefront-retail/app/accessibility/page.tsx +0 -11
  317. package/templates/storefront-retail/app/account/addresses/page.tsx +0 -21
  318. package/templates/storefront-retail/app/account/orders/page.tsx +0 -21
  319. package/templates/storefront-retail/app/account/page.tsx +0 -22
  320. package/templates/storefront-retail/app/account/settings/page.tsx +0 -21
  321. package/templates/storefront-retail/app/cart/page.tsx +0 -9
  322. package/templates/storefront-retail/app/categories/[slug]/listing-client.tsx +0 -19
  323. package/templates/storefront-retail/app/categories/[slug]/page.tsx +0 -130
  324. package/templates/storefront-retail/app/checkout/page.tsx +0 -17
  325. package/templates/storefront-retail/app/collections/[slug]/listing-client.tsx +0 -20
  326. package/templates/storefront-retail/app/collections/[slug]/page.tsx +0 -130
  327. package/templates/storefront-retail/app/contact/contact-form.tsx +0 -109
  328. package/templates/storefront-retail/app/contact/page.tsx +0 -54
  329. package/templates/storefront-retail/app/error.tsx +0 -61
  330. package/templates/storefront-retail/app/faq/page.tsx +0 -46
  331. package/templates/storefront-retail/app/globals.css +0 -47
  332. package/templates/storefront-retail/app/layout.tsx +0 -77
  333. package/templates/storefront-retail/app/llms.txt/route.ts +0 -94
  334. package/templates/storefront-retail/app/login/page.tsx +0 -17
  335. package/templates/storefront-retail/app/not-found.tsx +0 -39
  336. package/templates/storefront-retail/app/opensearch.xml/route.ts +0 -37
  337. package/templates/storefront-retail/app/orders/[id]/page.tsx +0 -24
  338. package/templates/storefront-retail/app/page.tsx +0 -182
  339. package/templates/storefront-retail/app/privacy/page.tsx +0 -44
  340. package/templates/storefront-retail/app/products/[slug]/page.tsx +0 -165
  341. package/templates/storefront-retail/app/products/[slug]/product-detail.tsx +0 -70
  342. package/templates/storefront-retail/app/returns/page.tsx +0 -11
  343. package/templates/storefront-retail/app/robots.ts +0 -18
  344. package/templates/storefront-retail/app/search/page.tsx +0 -38
  345. package/templates/storefront-retail/app/search/search-client.tsx +0 -7
  346. package/templates/storefront-retail/app/shipping/page.tsx +0 -16
  347. package/templates/storefront-retail/app/shop/page.tsx +0 -63
  348. package/templates/storefront-retail/app/shop/shop-client.tsx +0 -32
  349. package/templates/storefront-retail/app/signup/page.tsx +0 -17
  350. package/templates/storefront-retail/app/sitemap-page/page.tsx +0 -167
  351. package/templates/storefront-retail/app/sitemap.ts +0 -59
  352. package/templates/storefront-retail/app/terms/page.tsx +0 -44
  353. package/templates/storefront-retail/app/track-order/page.tsx +0 -24
  354. package/templates/storefront-retail/app/track-order/track-order-form.tsx +0 -69
  355. package/templates/storefront-retail/components/account-iframe.tsx +0 -13
  356. package/templates/storefront-retail/components/brand-marquee.tsx +0 -27
  357. package/templates/storefront-retail/components/cart-drawer.tsx +0 -14
  358. package/templates/storefront-retail/components/cart-pill.tsx +0 -36
  359. package/templates/storefront-retail/components/category-grid.tsx +0 -28
  360. package/templates/storefront-retail/components/category-tiles.tsx +0 -104
  361. package/templates/storefront-retail/components/collection-strip.tsx +0 -45
  362. package/templates/storefront-retail/components/feature-hero.tsx +0 -84
  363. package/templates/storefront-retail/components/footer.tsx +0 -153
  364. package/templates/storefront-retail/components/header.tsx +0 -45
  365. package/templates/storefront-retail/components/hero.tsx +0 -28
  366. package/templates/storefront-retail/components/nav-link.tsx +0 -20
  367. package/templates/storefront-retail/components/newsletter.tsx +0 -50
  368. package/templates/storefront-retail/components/policy-page.tsx +0 -49
  369. package/templates/storefront-retail/components/promo-banner.tsx +0 -41
  370. package/templates/storefront-retail/components/providers.tsx +0 -35
  371. package/templates/storefront-retail/components/section-heading.tsx +0 -37
  372. package/templates/storefront-retail/components/store-product-card.tsx +0 -87
  373. package/templates/storefront-retail/components/trade-in-cta.tsx +0 -54
  374. package/templates/storefront-retail/components/trust-bar.tsx +0 -66
  375. package/templates/storefront-retail/lib/brand.ts +0 -664
  376. package/templates/storefront-retail/lib/cart.ts +0 -12
  377. package/templates/storefront-retail/next.config.ts +0 -42
  378. package/templates/storefront-retail/package.json +0 -35
  379. package/templates/storefront-retail/postcss.config.mjs +0 -7
  380. package/templates/storefront-retail/tsconfig.json +0 -23
  381. package/templates/storefront-retail/vitest.config.ts +0 -9
  382. package/templates/storefront-services/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  383. package/templates/storefront-services/.cursor/rules/cimplify-storefront.mdc +0 -25
  384. package/templates/storefront-services/.env.example +0 -16
  385. package/templates/storefront-services/AGENTS.md +0 -101
  386. package/templates/storefront-services/CLAUDE.md +0 -22
  387. package/templates/storefront-services/README.md +0 -73
  388. package/templates/storefront-services/__tests__/brand.test.ts +0 -4
  389. package/templates/storefront-services/__tests__/cart-flow.test.ts +0 -4
  390. package/templates/storefront-services/__tests__/contract.test.ts +0 -4
  391. package/templates/storefront-services/app/about/page.tsx +0 -38
  392. package/templates/storefront-services/app/accessibility/page.tsx +0 -11
  393. package/templates/storefront-services/app/account/addresses/page.tsx +0 -21
  394. package/templates/storefront-services/app/account/orders/page.tsx +0 -21
  395. package/templates/storefront-services/app/account/page.tsx +0 -22
  396. package/templates/storefront-services/app/account/settings/page.tsx +0 -21
  397. package/templates/storefront-services/app/book/book-client.tsx +0 -195
  398. package/templates/storefront-services/app/book/page.tsx +0 -65
  399. package/templates/storefront-services/app/cart/page.tsx +0 -9
  400. package/templates/storefront-services/app/categories/[slug]/listing-client.tsx +0 -19
  401. package/templates/storefront-services/app/categories/[slug]/page.tsx +0 -118
  402. package/templates/storefront-services/app/checkout/page.tsx +0 -17
  403. package/templates/storefront-services/app/collections/[slug]/listing-client.tsx +0 -20
  404. package/templates/storefront-services/app/collections/[slug]/page.tsx +0 -118
  405. package/templates/storefront-services/app/contact/contact-form.tsx +0 -109
  406. package/templates/storefront-services/app/contact/page.tsx +0 -54
  407. package/templates/storefront-services/app/error.tsx +0 -60
  408. package/templates/storefront-services/app/faq/page.tsx +0 -46
  409. package/templates/storefront-services/app/globals.css +0 -45
  410. package/templates/storefront-services/app/layout.tsx +0 -82
  411. package/templates/storefront-services/app/llms.txt/route.ts +0 -94
  412. package/templates/storefront-services/app/login/page.tsx +0 -17
  413. package/templates/storefront-services/app/not-found.tsx +0 -39
  414. package/templates/storefront-services/app/opensearch.xml/route.ts +0 -37
  415. package/templates/storefront-services/app/orders/[id]/page.tsx +0 -21
  416. package/templates/storefront-services/app/page.tsx +0 -97
  417. package/templates/storefront-services/app/privacy/page.tsx +0 -44
  418. package/templates/storefront-services/app/returns/page.tsx +0 -11
  419. package/templates/storefront-services/app/robots.ts +0 -18
  420. package/templates/storefront-services/app/search/page.tsx +0 -38
  421. package/templates/storefront-services/app/search/search-client.tsx +0 -7
  422. package/templates/storefront-services/app/shipping/page.tsx +0 -16
  423. package/templates/storefront-services/app/shop/page.tsx +0 -31
  424. package/templates/storefront-services/app/shop/shop-client.tsx +0 -27
  425. package/templates/storefront-services/app/signup/page.tsx +0 -17
  426. package/templates/storefront-services/app/sitemap-page/page.tsx +0 -167
  427. package/templates/storefront-services/app/sitemap.ts +0 -62
  428. package/templates/storefront-services/app/terms/page.tsx +0 -44
  429. package/templates/storefront-services/app/track-order/page.tsx +0 -24
  430. package/templates/storefront-services/app/track-order/track-order-form.tsx +0 -69
  431. package/templates/storefront-services/components/account-iframe.tsx +0 -13
  432. package/templates/storefront-services/components/cart-drawer.tsx +0 -14
  433. package/templates/storefront-services/components/cart-pill.tsx +0 -36
  434. package/templates/storefront-services/components/category-grid.tsx +0 -28
  435. package/templates/storefront-services/components/collection-strip.tsx +0 -45
  436. package/templates/storefront-services/components/footer.tsx +0 -148
  437. package/templates/storefront-services/components/header.tsx +0 -43
  438. package/templates/storefront-services/components/hero.tsx +0 -25
  439. package/templates/storefront-services/components/nav-link.tsx +0 -20
  440. package/templates/storefront-services/components/policy-page.tsx +0 -49
  441. package/templates/storefront-services/components/product-modal.tsx +0 -104
  442. package/templates/storefront-services/components/providers.tsx +0 -35
  443. package/templates/storefront-services/components/store-product-card.tsx +0 -87
  444. package/templates/storefront-services/lib/brand.ts +0 -396
  445. package/templates/storefront-services/lib/cart.ts +0 -12
  446. package/templates/storefront-services/next.config.ts +0 -42
  447. package/templates/storefront-services/package.json +0 -35
  448. package/templates/storefront-services/postcss.config.mjs +0 -7
  449. package/templates/storefront-services/tsconfig.json +0 -23
  450. package/templates/storefront-services/vitest.config.ts +0 -9
@@ -1,21 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { AccountIframe } from "@/components/account-iframe";
3
- import { brand } from "@/lib/brand";
4
-
5
- export const metadata: Metadata = {
6
- title: `Orders — ${brand.name}`,
7
- };
8
-
9
- export default function OrdersPage() {
10
- return (
11
- <article className="max-w-5xl mx-auto px-6 sm:px-8 py-12">
12
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-2">
13
- Account
14
- </p>
15
- <h1 className="font-serif text-[clamp(2rem,4vw,2.75rem)] font-semibold mb-8 -tracking-[0.02em]">
16
- Your orders
17
- </h1>
18
- <AccountIframe section="orders" />
19
- </article>
20
- );
21
- }
@@ -1,22 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { AccountIframe } from "@/components/account-iframe";
3
- import { brand } from "@/lib/brand";
4
-
5
- export const metadata: Metadata = {
6
- title: `Account — ${brand.name}`,
7
- description: brand.account.signupSubtitle,
8
- };
9
-
10
- export default function AccountPage() {
11
- return (
12
- <article className="max-w-5xl mx-auto px-6 sm:px-8 py-12">
13
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-2">
14
- {brand.account.accountEyebrow}
15
- </p>
16
- <h1 className="font-serif text-[clamp(2rem,4vw,2.75rem)] font-semibold mb-8 -tracking-[0.02em]">
17
- {brand.account.accountTitle}
18
- </h1>
19
- <AccountIframe />
20
- </article>
21
- );
22
- }
@@ -1,21 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { AccountIframe } from "@/components/account-iframe";
3
- import { brand } from "@/lib/brand";
4
-
5
- export const metadata: Metadata = {
6
- title: `Settings — ${brand.name}`,
7
- };
8
-
9
- export default function SettingsPage() {
10
- return (
11
- <article className="max-w-5xl mx-auto px-6 sm:px-8 py-12">
12
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-2">
13
- Account
14
- </p>
15
- <h1 className="font-serif text-[clamp(2rem,4vw,2.75rem)] font-semibold mb-8 -tracking-[0.02em]">
16
- Settings
17
- </h1>
18
- <AccountIframe section="settings" />
19
- </article>
20
- );
21
- }
@@ -1,9 +0,0 @@
1
- "use client";
2
-
3
- import { useRouter } from "next/navigation";
4
- import { CartPage as SdkCartPage } from "@cimplify/sdk/react";
5
-
6
- export default function CartPage() {
7
- const router = useRouter();
8
- return <SdkCartPage onCheckout={() => router.push("/checkout")} />;
9
- }
@@ -1,19 +0,0 @@
1
- "use client";
2
-
3
- import { ProductGrid } from "@cimplify/sdk/react";
4
- import type { Product } from "@cimplify/sdk";
5
- import { StoreProductCard } from "@/components/store-product-card";
6
-
7
- /**
8
- * Client island for the category listing. Receives server-fetched products
9
- * as props (serializable) and owns the `renderCard` function.
10
- */
11
- export function ListingClient({ products }: { products: Product[] }) {
12
- return (
13
- <ProductGrid
14
- products={products}
15
- emptyMessage="No products in this category yet."
16
- renderCard={(p) => <StoreProductCard product={p} />}
17
- />
18
- );
19
- }
@@ -1,118 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { Suspense } from "react";
3
- import Link from "next/link";
4
- import { notFound } from "next/navigation";
5
- import { cacheTag, cacheLife } from "next/cache";
6
- import {
7
- getServerClient,
8
- tags,
9
- type Category,
10
- type Product,
11
- } from "@cimplify/sdk/server";
12
- import { ListingClient } from "./listing-client";
13
- import { brand } from "@/lib/brand";
14
-
15
- interface CategoryData {
16
- category: Category;
17
- products: Product[];
18
- }
19
-
20
- async function getCategory(slug: string): Promise<CategoryData | null> {
21
- "use cache";
22
- cacheTag(tags.categories());
23
- cacheLife("hours");
24
-
25
- const client = getServerClient();
26
- const catRes = await client.catalogue.getCategoryBySlug(slug);
27
- if (!catRes.ok) return null;
28
-
29
- cacheTag(tags.category(catRes.value.id), tags.categoryProducts(catRes.value.id));
30
- const r = await client.catalogue.getCategoryProducts(catRes.value.id);
31
- const products = r.ok
32
- ? ((r.value as { items?: Product[] }).items ?? (r.value as Product[]))
33
- : [];
34
- return { category: catRes.value, products };
35
- }
36
-
37
- export async function generateMetadata({
38
- params,
39
- }: {
40
- params: Promise<{ slug: string }>;
41
- }): Promise<Metadata> {
42
- const { slug } = await params;
43
- const data = await getCategory(slug);
44
- if (!data) return {};
45
- return {
46
- title: `${data.category.name} — ${brand.name}`,
47
- description: data.category.description ?? undefined,
48
- };
49
- }
50
-
51
- export default async function CategoryPage({
52
- params,
53
- }: {
54
- params: Promise<{ slug: string }>;
55
- }) {
56
- return (
57
- <Suspense fallback={<CategorySkeleton />}>
58
- <CategoryContent params={params} />
59
- </Suspense>
60
- );
61
- }
62
-
63
- async function CategoryContent({
64
- params,
65
- }: {
66
- params: Promise<{ slug: string }>;
67
- }) {
68
- const { slug } = await params;
69
- const data = await getCategory(slug);
70
- if (!data) notFound();
71
-
72
- const { category, products } = data;
73
- return (
74
- <section className="max-w-7xl mx-auto px-8 pt-12">
75
- <header className="mb-8 text-center">
76
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-2">
77
- Category
78
- </p>
79
- <h1 className="font-serif text-[clamp(2rem,4vw,2.75rem)] font-semibold mb-2">
80
- {category.name}
81
- </h1>
82
- {category.description && (
83
- <p className="mx-auto mb-2 max-w-xl text-muted-foreground">
84
- {category.description}
85
- </p>
86
- )}
87
- <p className="text-sm text-muted-foreground">
88
- {products.length} item{products.length === 1 ? "" : "s"}
89
- </p>
90
- </header>
91
- <ListingClient products={products} />
92
- {products.length === 0 && (
93
- <p className="text-center mt-8">
94
- <Link href="/" className="text-primary font-semibold">
95
- ← Back home
96
- </Link>
97
- </p>
98
- )}
99
- </section>
100
- );
101
- }
102
-
103
- function CategorySkeleton() {
104
- return (
105
- <section className="max-w-7xl mx-auto px-8 pt-12">
106
- <header className="mb-8 text-center">
107
- <div className="mx-auto h-3 w-20 bg-muted rounded mb-2 animate-pulse" />
108
- <div className="mx-auto h-10 w-64 bg-muted rounded mb-2 animate-pulse" />
109
- <div className="mx-auto h-4 w-80 bg-muted rounded animate-pulse" />
110
- </header>
111
- <div className="grid grid-cols-2 md:grid-cols-3 gap-4">
112
- {Array.from({ length: 6 }).map((_, i) => (
113
- <div key={i} className="aspect-square bg-muted rounded-2xl animate-pulse" />
114
- ))}
115
- </div>
116
- </section>
117
- );
118
- }
@@ -1,17 +0,0 @@
1
- "use client";
2
-
3
- import { useRouter } from "next/navigation";
4
- import { CheckoutPage as SdkCheckoutPage } from "@cimplify/sdk/react";
5
-
6
- export default function CheckoutPage() {
7
- const router = useRouter();
8
- return (
9
- <SdkCheckoutPage
10
- onComplete={(result) => {
11
- if (result.success && result.order) {
12
- router.push(`/orders/${result.order.id}`);
13
- }
14
- }}
15
- />
16
- );
17
- }
@@ -1,20 +0,0 @@
1
- "use client";
2
-
3
- import { ProductGrid } from "@cimplify/sdk/react";
4
- import type { Product } from "@cimplify/sdk";
5
- import { StoreProductCard } from "@/components/store-product-card";
6
-
7
- /**
8
- * Client island for the collection listing. Receives server-fetched
9
- * products as props (serializable) and owns the `renderCard` function
10
- * (which can't cross the server/client boundary).
11
- */
12
- export function ListingClient({ products }: { products: Product[] }) {
13
- return (
14
- <ProductGrid
15
- products={products}
16
- emptyMessage="No products in this collection yet."
17
- renderCard={(p) => <StoreProductCard product={p} />}
18
- />
19
- );
20
- }
@@ -1,118 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { Suspense } from "react";
3
- import Link from "next/link";
4
- import { notFound } from "next/navigation";
5
- import { cacheTag, cacheLife } from "next/cache";
6
- import {
7
- getServerClient,
8
- tags,
9
- type Collection,
10
- type Product,
11
- } from "@cimplify/sdk/server";
12
- import { ListingClient } from "./listing-client";
13
- import { brand } from "@/lib/brand";
14
-
15
- interface CollectionData {
16
- collection: Collection;
17
- products: Product[];
18
- }
19
-
20
- async function getCollection(slug: string): Promise<CollectionData | null> {
21
- "use cache";
22
- cacheTag(tags.collections());
23
- cacheLife("hours");
24
-
25
- const client = getServerClient();
26
- const colRes = await client.catalogue.getCollectionBySlug(slug);
27
- if (!colRes.ok) return null;
28
-
29
- cacheTag(tags.collection(colRes.value.id), tags.collectionProducts(colRes.value.id));
30
- const r = await client.catalogue.getCollectionProducts(colRes.value.id);
31
- const products = r.ok
32
- ? ((r.value as { items?: Product[] }).items ?? (r.value as Product[]))
33
- : [];
34
- return { collection: colRes.value, products };
35
- }
36
-
37
- export async function generateMetadata({
38
- params,
39
- }: {
40
- params: Promise<{ slug: string }>;
41
- }): Promise<Metadata> {
42
- const { slug } = await params;
43
- const data = await getCollection(slug);
44
- if (!data) return {};
45
- return {
46
- title: `${data.collection.name} — ${brand.name}`,
47
- description: data.collection.description ?? undefined,
48
- };
49
- }
50
-
51
- export default async function CollectionPage({
52
- params,
53
- }: {
54
- params: Promise<{ slug: string }>;
55
- }) {
56
- return (
57
- <Suspense fallback={<CollectionSkeleton />}>
58
- <CollectionContent params={params} />
59
- </Suspense>
60
- );
61
- }
62
-
63
- async function CollectionContent({
64
- params,
65
- }: {
66
- params: Promise<{ slug: string }>;
67
- }) {
68
- const { slug } = await params;
69
- const data = await getCollection(slug);
70
- if (!data) notFound();
71
-
72
- const { collection, products } = data;
73
- return (
74
- <section className="max-w-7xl mx-auto px-8 pt-12">
75
- <header className="mb-8 text-center">
76
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-2">
77
- Collection
78
- </p>
79
- <h1 className="font-serif text-[clamp(2rem,4vw,2.75rem)] font-semibold mb-2">
80
- {collection.name}
81
- </h1>
82
- {collection.description && (
83
- <p className="mx-auto mb-2 max-w-xl text-muted-foreground">
84
- {collection.description}
85
- </p>
86
- )}
87
- <p className="text-sm text-muted-foreground">
88
- {products.length} item{products.length === 1 ? "" : "s"}
89
- </p>
90
- </header>
91
- <ListingClient products={products} />
92
- {products.length === 0 && (
93
- <p className="text-center mt-8">
94
- <Link href="/" className="text-primary font-semibold">
95
- ← Back home
96
- </Link>
97
- </p>
98
- )}
99
- </section>
100
- );
101
- }
102
-
103
- function CollectionSkeleton() {
104
- return (
105
- <section className="max-w-7xl mx-auto px-8 pt-12">
106
- <header className="mb-8 text-center">
107
- <div className="mx-auto h-3 w-20 bg-muted rounded mb-2 animate-pulse" />
108
- <div className="mx-auto h-10 w-64 bg-muted rounded mb-2 animate-pulse" />
109
- <div className="mx-auto h-4 w-80 bg-muted rounded animate-pulse" />
110
- </header>
111
- <div className="grid grid-cols-2 md:grid-cols-3 gap-4">
112
- {Array.from({ length: 6 }).map((_, i) => (
113
- <div key={i} className="aspect-square bg-muted rounded-2xl animate-pulse" />
114
- ))}
115
- </div>
116
- </section>
117
- );
118
- }
@@ -1,109 +0,0 @@
1
- "use client";
2
-
3
- import { useState } from "react";
4
-
5
- /**
6
- * Local-only contact form. On submit, fakes a successful response so the
7
- * template ships a usable interaction. Wire to a real handler (Server
8
- * Action posting to your CRM, support inbox, or Cimplify Support API)
9
- * before going to production.
10
- */
11
- export function ContactForm({ reasons }: { reasons: string[] }) {
12
- const [submitted, setSubmitted] = useState(false);
13
- const [reason, setReason] = useState(reasons[0] ?? "");
14
-
15
- if (submitted) {
16
- return (
17
- <div className="rounded-2xl border border-border bg-card p-8">
18
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-2">
19
- ✓ Sent
20
- </p>
21
- <h2 className="font-serif text-2xl font-semibold mb-2">Thanks — we'll be in touch.</h2>
22
- <p className="text-muted-foreground">
23
- We respond within one business day. Check your spam folder if you don't see a
24
- reply by tomorrow.
25
- </p>
26
- </div>
27
- );
28
- }
29
-
30
- return (
31
- <form
32
- onSubmit={(e) => {
33
- e.preventDefault();
34
- setSubmitted(true);
35
- }}
36
- className="space-y-5"
37
- >
38
- <div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
39
- <Field label="Your name" name="name" required />
40
- <Field label="Email" name="email" type="email" required />
41
- </div>
42
- <div>
43
- <label className="text-xs font-semibold uppercase tracking-wider text-muted-foreground block mb-1.5">
44
- What's it about?
45
- </label>
46
- <select
47
- name="reason"
48
- value={reason}
49
- onChange={(e) => setReason(e.target.value)}
50
- className="w-full px-4 py-2.5 rounded-md bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none text-sm"
51
- >
52
- {reasons.map((r) => (
53
- <option key={r} value={r}>
54
- {r}
55
- </option>
56
- ))}
57
- </select>
58
- </div>
59
- <Field label="Order number (optional)" name="order" />
60
- <div>
61
- <label className="text-xs font-semibold uppercase tracking-wider text-muted-foreground block mb-1.5">
62
- Message
63
- </label>
64
- <textarea
65
- name="message"
66
- required
67
- rows={6}
68
- className="w-full px-4 py-2.5 rounded-md bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none text-sm resize-y"
69
- />
70
- </div>
71
- <button
72
- type="submit"
73
- className="inline-flex items-center justify-center px-5 py-3 rounded-md bg-primary text-primary-foreground font-semibold text-sm hover:bg-primary/90 transition-colors"
74
- >
75
- Send message
76
- </button>
77
- </form>
78
- );
79
- }
80
-
81
- function Field({
82
- label,
83
- name,
84
- type = "text",
85
- required,
86
- }: {
87
- label: string;
88
- name: string;
89
- type?: string;
90
- required?: boolean;
91
- }) {
92
- return (
93
- <div>
94
- <label
95
- htmlFor={name}
96
- className="text-xs font-semibold uppercase tracking-wider text-muted-foreground block mb-1.5"
97
- >
98
- {label}
99
- </label>
100
- <input
101
- id={name}
102
- name={name}
103
- type={type}
104
- required={required}
105
- className="w-full px-4 py-2.5 rounded-md bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none text-sm"
106
- />
107
- </div>
108
- );
109
- }
@@ -1,54 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { ContactForm } from "./contact-form";
3
- import { brand } from "@/lib/brand";
4
-
5
- export const metadata: Metadata = {
6
- title: `Contact — ${brand.name}`,
7
- description: brand.contactPage.body,
8
- };
9
-
10
- export default function ContactPage() {
11
- const c = brand.contactPage;
12
- return (
13
- <article className="max-w-5xl 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
- {c.eyebrow}
16
- </p>
17
- <h1 className="font-serif text-[clamp(2.25rem,5vw,3.5rem)] font-semibold mb-4 -tracking-[0.02em]">
18
- {c.title}
19
- </h1>
20
- <p className="text-lg text-muted-foreground max-w-2xl mb-12 leading-relaxed">{c.body}</p>
21
-
22
- <div className="grid grid-cols-1 lg:grid-cols-[1.5fr_1fr] gap-10 items-start">
23
- <ContactForm reasons={c.reasons} />
24
- <aside className="space-y-5 lg:pl-10 lg:border-l border-border">
25
- <div>
26
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground mb-3">
27
- Direct lines
28
- </p>
29
- <ul className="space-y-3 list-none p-0 m-0">
30
- {c.directLines.map((line) => (
31
- <li key={line.label}>
32
- <p className="text-xs text-muted-foreground m-0">{line.label}</p>
33
- <a
34
- href={line.href}
35
- className="text-foreground hover:text-primary transition-colors"
36
- >
37
- {line.value}
38
- </a>
39
- </li>
40
- ))}
41
- </ul>
42
- </div>
43
- <div>
44
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground mb-3">
45
- Visit
46
- </p>
47
- <p className="text-foreground m-0">{brand.contact.address}</p>
48
- <p className="text-xs text-muted-foreground mt-1">{brand.contact.hours}</p>
49
- </div>
50
- </aside>
51
- </div>
52
- </article>
53
- );
54
- }
@@ -1,60 +0,0 @@
1
- "use client";
2
-
3
- import { useEffect } from "react";
4
- import Link from "next/link";
5
-
6
- /**
7
- * Root error boundary. Next.js calls this whenever a thrown error escapes
8
- * a Server Component without being caught by a closer `error.tsx`.
9
- *
10
- * Wire `reportError` (Sentry, Datadog, etc.) here so production failures
11
- * surface — silently recovering hides real bugs.
12
- */
13
- export default function GlobalError({
14
- error,
15
- reset,
16
- }: {
17
- error: Error & { digest?: string };
18
- reset: () => void;
19
- }) {
20
- useEffect(() => {
21
- // TODO: replace with your error reporter
22
- // eslint-disable-next-line no-console
23
- console.error("Storefront error:", error);
24
- }, [error]);
25
-
26
- return (
27
- <section className="max-w-2xl mx-auto px-8 py-20 text-center">
28
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-3">
29
- Something broke
30
- </p>
31
- <h1 className="font-serif text-[clamp(2rem,4vw,2.75rem)] font-semibold mb-4">
32
- That wasn&apos;t supposed to happen.
33
- </h1>
34
- <p className="text-muted-foreground leading-relaxed mb-8">
35
- We&apos;ve been notified. Refresh the page, or head back home —
36
- most of the time the second try just works.
37
- </p>
38
- {error.digest && (
39
- <p className="text-xs font-mono text-muted-foreground mb-6">
40
- Reference: <code className="text-foreground">{error.digest}</code>
41
- </p>
42
- )}
43
- <div className="flex flex-wrap items-center justify-center gap-3">
44
- <button
45
- type="button"
46
- onClick={reset}
47
- className="inline-block px-6 py-3 rounded-full bg-primary text-primary-foreground font-semibold text-sm transition-colors hover:bg-primary/90"
48
- >
49
- Try again
50
- </button>
51
- <Link
52
- href="/"
53
- className="inline-block px-6 py-3 rounded-full border border-border hover:bg-muted transition-colors text-sm font-medium"
54
- >
55
- Back home
56
- </Link>
57
- </div>
58
- </section>
59
- );
60
- }
@@ -1,46 +0,0 @@
1
- import type { Metadata } from "next";
2
- import { brand } from "@/lib/brand";
3
-
4
- export const metadata: Metadata = {
5
- title: `FAQ — ${brand.name}`,
6
- description: "Delivery, pickup, custom cakes, allergens, payment — answers to the questions we hear most often.",
7
- };
8
-
9
- export default function FaqPage() {
10
- const f = brand.faq;
11
- return (
12
- <article className="max-w-3xl mx-auto px-8 py-16">
13
- <p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-2">
14
- {f.eyebrow}
15
- </p>
16
- <h1 className="font-serif text-[clamp(2.25rem,5vw,3.5rem)] font-semibold mb-10 -tracking-[0.02em]">
17
- {f.title}
18
- </h1>
19
- <div className="space-y-12">
20
- {f.sections.map((section) => (
21
- <section key={section.title}>
22
- <h2 className="font-serif text-2xl font-semibold mb-5">{section.title}</h2>
23
- <dl className="space-y-6">
24
- {section.items.map((item) => (
25
- <div key={item.q}>
26
- <dt className="font-medium text-foreground mb-1.5">{item.q}</dt>
27
- <dd className="text-muted-foreground leading-relaxed">{item.a}</dd>
28
- </div>
29
- ))}
30
- </dl>
31
- </section>
32
- ))}
33
- </div>
34
- <p className="mt-12 pt-8 border-t border-border text-sm text-muted-foreground">
35
- {f.contactPrompt}{" "}
36
- <a
37
- href={`mailto:${f.contactEmail}`}
38
- className="text-primary font-semibold hover:underline"
39
- >
40
- {f.contactEmail}
41
- </a>{" "}
42
- and a real human will reply within 24 hours.
43
- </p>
44
- </article>
45
- );
46
- }