@cimplify/sdk 0.44.34 → 0.45.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/README.md +21 -16
  2. package/dist/advanced.d.mts +1 -1
  3. package/dist/advanced.d.ts +1 -1
  4. package/dist/{client-5B9IPDmf.d.ts → client-Bsd4Vi_y.d.ts} +1 -0
  5. package/dist/{client-CpVMRI8V.d.mts → client-C5LcbNxL.d.mts} +1 -0
  6. package/dist/{client-DMhRxuzm.d.ts → client-DjzIoewX.d.ts} +1 -1
  7. package/dist/{client-Cwb1sMr3.d.mts → client-EM8xKCPO.d.mts} +1 -1
  8. package/dist/index.d.mts +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/react.d.mts +120 -45
  11. package/dist/react.d.ts +120 -45
  12. package/dist/react.js +453 -97
  13. package/dist/react.mjs +452 -98
  14. package/dist/server.d.mts +2 -2
  15. package/dist/server.d.ts +2 -2
  16. package/dist/styles.css +2 -2
  17. package/dist/testing/suite.d.mts +2 -2
  18. package/dist/testing/suite.d.ts +2 -2
  19. package/dist/testing.d.mts +2 -2
  20. package/dist/testing.d.ts +2 -2
  21. package/package.json +5 -9
  22. package/registry/booking-page.json +2 -1
  23. package/registry/bookings-page.json +1 -1
  24. package/registry/index.json +24 -0
  25. package/dist/cli/commands/deploy.mjs +0 -717
  26. package/dist/cli/commands/dev.mjs +0 -479
  27. package/dist/cli/commands/domains.mjs +0 -769
  28. package/dist/cli/commands/env.mjs +0 -705
  29. package/dist/cli/commands/link.mjs +0 -378
  30. package/dist/cli/commands/login.mjs +0 -584
  31. package/dist/cli/commands/logout.mjs +0 -75
  32. package/dist/cli/commands/logs.mjs +0 -432
  33. package/dist/cli/commands/projects.mjs +0 -473
  34. package/dist/cli/commands/repo.mjs +0 -584
  35. package/dist/cli/commands/rollback.mjs +0 -553
  36. package/dist/cli/commands/status.mjs +0 -450
  37. package/dist/cli/commands/unlink.mjs +0 -79
  38. package/dist/cli/commands/whoami.mjs +0 -285
  39. package/dist/cli.js +0 -184
  40. package/dist/dispatcher.mjs +0 -360
  41. package/registry/service-card.json +0 -16
  42. package/registry/service-grid.json +0 -16
  43. package/templates/storefront-bakery/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  44. package/templates/storefront-bakery/.cursor/rules/cimplify-storefront.mdc +0 -25
  45. package/templates/storefront-bakery/.env.example +0 -16
  46. package/templates/storefront-bakery/AGENTS.md +0 -120
  47. package/templates/storefront-bakery/CLAUDE.md +0 -22
  48. package/templates/storefront-bakery/README.md +0 -73
  49. package/templates/storefront-bakery/__tests__/brand.test.ts +0 -4
  50. package/templates/storefront-bakery/__tests__/cart-flow.test.ts +0 -4
  51. package/templates/storefront-bakery/__tests__/contract.test.ts +0 -4
  52. package/templates/storefront-bakery/app/about/page.tsx +0 -38
  53. package/templates/storefront-bakery/app/accessibility/page.tsx +0 -11
  54. package/templates/storefront-bakery/app/account/addresses/page.tsx +0 -21
  55. package/templates/storefront-bakery/app/account/orders/page.tsx +0 -21
  56. package/templates/storefront-bakery/app/account/page.tsx +0 -22
  57. package/templates/storefront-bakery/app/account/settings/page.tsx +0 -21
  58. package/templates/storefront-bakery/app/cart/page.tsx +0 -9
  59. package/templates/storefront-bakery/app/categories/[slug]/listing-client.tsx +0 -19
  60. package/templates/storefront-bakery/app/categories/[slug]/page.tsx +0 -118
  61. package/templates/storefront-bakery/app/checkout/page.tsx +0 -17
  62. package/templates/storefront-bakery/app/collections/[slug]/listing-client.tsx +0 -20
  63. package/templates/storefront-bakery/app/collections/[slug]/page.tsx +0 -118
  64. package/templates/storefront-bakery/app/contact/contact-form.tsx +0 -109
  65. package/templates/storefront-bakery/app/contact/page.tsx +0 -54
  66. package/templates/storefront-bakery/app/error.tsx +0 -60
  67. package/templates/storefront-bakery/app/faq/page.tsx +0 -46
  68. package/templates/storefront-bakery/app/globals.css +0 -47
  69. package/templates/storefront-bakery/app/layout.tsx +0 -82
  70. package/templates/storefront-bakery/app/llms.txt/route.ts +0 -94
  71. package/templates/storefront-bakery/app/login/page.tsx +0 -17
  72. package/templates/storefront-bakery/app/not-found.tsx +0 -39
  73. package/templates/storefront-bakery/app/opensearch.xml/route.ts +0 -37
  74. package/templates/storefront-bakery/app/orders/[id]/page.tsx +0 -21
  75. package/templates/storefront-bakery/app/page.tsx +0 -97
  76. package/templates/storefront-bakery/app/privacy/page.tsx +0 -44
  77. package/templates/storefront-bakery/app/returns/page.tsx +0 -11
  78. package/templates/storefront-bakery/app/robots.ts +0 -18
  79. package/templates/storefront-bakery/app/search/page.tsx +0 -38
  80. package/templates/storefront-bakery/app/search/search-client.tsx +0 -7
  81. package/templates/storefront-bakery/app/shipping/page.tsx +0 -16
  82. package/templates/storefront-bakery/app/shop/page.tsx +0 -31
  83. package/templates/storefront-bakery/app/shop/shop-client.tsx +0 -27
  84. package/templates/storefront-bakery/app/signup/page.tsx +0 -17
  85. package/templates/storefront-bakery/app/sitemap-page/page.tsx +0 -167
  86. package/templates/storefront-bakery/app/sitemap.ts +0 -62
  87. package/templates/storefront-bakery/app/terms/page.tsx +0 -44
  88. package/templates/storefront-bakery/app/track-order/page.tsx +0 -24
  89. package/templates/storefront-bakery/app/track-order/track-order-form.tsx +0 -69
  90. package/templates/storefront-bakery/components/account-iframe.tsx +0 -13
  91. package/templates/storefront-bakery/components/cart-drawer.tsx +0 -14
  92. package/templates/storefront-bakery/components/cart-pill.tsx +0 -36
  93. package/templates/storefront-bakery/components/category-grid.tsx +0 -28
  94. package/templates/storefront-bakery/components/collection-strip.tsx +0 -45
  95. package/templates/storefront-bakery/components/footer.tsx +0 -148
  96. package/templates/storefront-bakery/components/header.tsx +0 -43
  97. package/templates/storefront-bakery/components/hero.tsx +0 -25
  98. package/templates/storefront-bakery/components/nav-link.tsx +0 -20
  99. package/templates/storefront-bakery/components/policy-page.tsx +0 -49
  100. package/templates/storefront-bakery/components/product-modal.tsx +0 -104
  101. package/templates/storefront-bakery/components/providers.tsx +0 -35
  102. package/templates/storefront-bakery/components/store-product-card.tsx +0 -87
  103. package/templates/storefront-bakery/lib/brand.ts +0 -570
  104. package/templates/storefront-bakery/lib/cart.ts +0 -12
  105. package/templates/storefront-bakery/next.config.ts +0 -42
  106. package/templates/storefront-bakery/package.json +0 -35
  107. package/templates/storefront-bakery/postcss.config.mjs +0 -7
  108. package/templates/storefront-bakery/tsconfig.json +0 -23
  109. package/templates/storefront-bakery/vitest.config.ts +0 -9
  110. package/templates/storefront-fashion/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  111. package/templates/storefront-fashion/.cursor/rules/cimplify-storefront.mdc +0 -25
  112. package/templates/storefront-fashion/.env.example +0 -16
  113. package/templates/storefront-fashion/AGENTS.md +0 -126
  114. package/templates/storefront-fashion/CLAUDE.md +0 -22
  115. package/templates/storefront-fashion/README.md +0 -77
  116. package/templates/storefront-fashion/__tests__/brand.test.ts +0 -4
  117. package/templates/storefront-fashion/__tests__/cart-flow.test.ts +0 -55
  118. package/templates/storefront-fashion/__tests__/contract.test.ts +0 -4
  119. package/templates/storefront-fashion/app/about/page.tsx +0 -41
  120. package/templates/storefront-fashion/app/accessibility/page.tsx +0 -11
  121. package/templates/storefront-fashion/app/account/addresses/page.tsx +0 -21
  122. package/templates/storefront-fashion/app/account/orders/page.tsx +0 -21
  123. package/templates/storefront-fashion/app/account/page.tsx +0 -22
  124. package/templates/storefront-fashion/app/account/settings/page.tsx +0 -21
  125. package/templates/storefront-fashion/app/cart/page.tsx +0 -9
  126. package/templates/storefront-fashion/app/categories/[slug]/listing-client.tsx +0 -19
  127. package/templates/storefront-fashion/app/categories/[slug]/page.tsx +0 -130
  128. package/templates/storefront-fashion/app/checkout/page.tsx +0 -17
  129. package/templates/storefront-fashion/app/collections/[slug]/listing-client.tsx +0 -20
  130. package/templates/storefront-fashion/app/collections/[slug]/page.tsx +0 -130
  131. package/templates/storefront-fashion/app/contact/contact-form.tsx +0 -109
  132. package/templates/storefront-fashion/app/contact/page.tsx +0 -54
  133. package/templates/storefront-fashion/app/error.tsx +0 -61
  134. package/templates/storefront-fashion/app/faq/page.tsx +0 -46
  135. package/templates/storefront-fashion/app/globals.css +0 -46
  136. package/templates/storefront-fashion/app/layout.tsx +0 -78
  137. package/templates/storefront-fashion/app/llms.txt/route.ts +0 -94
  138. package/templates/storefront-fashion/app/login/page.tsx +0 -17
  139. package/templates/storefront-fashion/app/lookbook/page.tsx +0 -132
  140. package/templates/storefront-fashion/app/not-found.tsx +0 -39
  141. package/templates/storefront-fashion/app/opensearch.xml/route.ts +0 -37
  142. package/templates/storefront-fashion/app/orders/[id]/page.tsx +0 -24
  143. package/templates/storefront-fashion/app/page.tsx +0 -183
  144. package/templates/storefront-fashion/app/privacy/page.tsx +0 -44
  145. package/templates/storefront-fashion/app/products/[slug]/page.tsx +0 -165
  146. package/templates/storefront-fashion/app/products/[slug]/product-detail.tsx +0 -70
  147. package/templates/storefront-fashion/app/returns/page.tsx +0 -11
  148. package/templates/storefront-fashion/app/robots.ts +0 -18
  149. package/templates/storefront-fashion/app/search/page.tsx +0 -38
  150. package/templates/storefront-fashion/app/search/search-client.tsx +0 -7
  151. package/templates/storefront-fashion/app/shipping/page.tsx +0 -16
  152. package/templates/storefront-fashion/app/shop/page.tsx +0 -63
  153. package/templates/storefront-fashion/app/shop/shop-client.tsx +0 -32
  154. package/templates/storefront-fashion/app/signup/page.tsx +0 -17
  155. package/templates/storefront-fashion/app/sitemap-page/page.tsx +0 -167
  156. package/templates/storefront-fashion/app/sitemap.ts +0 -59
  157. package/templates/storefront-fashion/app/size-guide/page.tsx +0 -155
  158. package/templates/storefront-fashion/app/terms/page.tsx +0 -44
  159. package/templates/storefront-fashion/app/track-order/page.tsx +0 -24
  160. package/templates/storefront-fashion/app/track-order/track-order-form.tsx +0 -69
  161. package/templates/storefront-fashion/components/account-iframe.tsx +0 -13
  162. package/templates/storefront-fashion/components/brand-marquee.tsx +0 -27
  163. package/templates/storefront-fashion/components/cart-drawer.tsx +0 -14
  164. package/templates/storefront-fashion/components/cart-pill.tsx +0 -36
  165. package/templates/storefront-fashion/components/category-grid.tsx +0 -28
  166. package/templates/storefront-fashion/components/category-tiles.tsx +0 -104
  167. package/templates/storefront-fashion/components/collection-strip.tsx +0 -45
  168. package/templates/storefront-fashion/components/feature-hero.tsx +0 -82
  169. package/templates/storefront-fashion/components/footer.tsx +0 -153
  170. package/templates/storefront-fashion/components/header.tsx +0 -43
  171. package/templates/storefront-fashion/components/hero.tsx +0 -28
  172. package/templates/storefront-fashion/components/nav-link.tsx +0 -20
  173. package/templates/storefront-fashion/components/newsletter.tsx +0 -50
  174. package/templates/storefront-fashion/components/policy-page.tsx +0 -49
  175. package/templates/storefront-fashion/components/promo-banner.tsx +0 -41
  176. package/templates/storefront-fashion/components/providers.tsx +0 -35
  177. package/templates/storefront-fashion/components/section-heading.tsx +0 -37
  178. package/templates/storefront-fashion/components/store-product-card.tsx +0 -87
  179. package/templates/storefront-fashion/components/trade-in-cta.tsx +0 -54
  180. package/templates/storefront-fashion/components/trust-bar.tsx +0 -66
  181. package/templates/storefront-fashion/e2e/visual.spec.ts +0 -52
  182. package/templates/storefront-fashion/lib/brand.ts +0 -518
  183. package/templates/storefront-fashion/lib/cart.ts +0 -12
  184. package/templates/storefront-fashion/next.config.ts +0 -42
  185. package/templates/storefront-fashion/package.json +0 -38
  186. package/templates/storefront-fashion/playwright.config.ts +0 -48
  187. package/templates/storefront-fashion/postcss.config.mjs +0 -7
  188. package/templates/storefront-fashion/tsconfig.json +0 -23
  189. package/templates/storefront-fashion/vitest.config.ts +0 -9
  190. package/templates/storefront-grocery/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  191. package/templates/storefront-grocery/.cursor/rules/cimplify-storefront.mdc +0 -25
  192. package/templates/storefront-grocery/.env.example +0 -16
  193. package/templates/storefront-grocery/AGENTS.md +0 -96
  194. package/templates/storefront-grocery/CLAUDE.md +0 -22
  195. package/templates/storefront-grocery/README.md +0 -73
  196. package/templates/storefront-grocery/__tests__/brand.test.ts +0 -4
  197. package/templates/storefront-grocery/__tests__/cart-flow.test.ts +0 -4
  198. package/templates/storefront-grocery/__tests__/contract.test.ts +0 -4
  199. package/templates/storefront-grocery/app/about/page.tsx +0 -38
  200. package/templates/storefront-grocery/app/accessibility/page.tsx +0 -11
  201. package/templates/storefront-grocery/app/account/addresses/page.tsx +0 -21
  202. package/templates/storefront-grocery/app/account/orders/page.tsx +0 -21
  203. package/templates/storefront-grocery/app/account/page.tsx +0 -22
  204. package/templates/storefront-grocery/app/account/settings/page.tsx +0 -21
  205. package/templates/storefront-grocery/app/cart/page.tsx +0 -9
  206. package/templates/storefront-grocery/app/categories/[slug]/listing-client.tsx +0 -19
  207. package/templates/storefront-grocery/app/categories/[slug]/page.tsx +0 -118
  208. package/templates/storefront-grocery/app/checkout/page.tsx +0 -17
  209. package/templates/storefront-grocery/app/collections/[slug]/listing-client.tsx +0 -20
  210. package/templates/storefront-grocery/app/collections/[slug]/page.tsx +0 -118
  211. package/templates/storefront-grocery/app/contact/contact-form.tsx +0 -109
  212. package/templates/storefront-grocery/app/contact/page.tsx +0 -54
  213. package/templates/storefront-grocery/app/error.tsx +0 -60
  214. package/templates/storefront-grocery/app/faq/page.tsx +0 -46
  215. package/templates/storefront-grocery/app/globals.css +0 -45
  216. package/templates/storefront-grocery/app/layout.tsx +0 -77
  217. package/templates/storefront-grocery/app/llms.txt/route.ts +0 -94
  218. package/templates/storefront-grocery/app/login/page.tsx +0 -17
  219. package/templates/storefront-grocery/app/not-found.tsx +0 -39
  220. package/templates/storefront-grocery/app/opensearch.xml/route.ts +0 -37
  221. package/templates/storefront-grocery/app/orders/[id]/page.tsx +0 -21
  222. package/templates/storefront-grocery/app/page.tsx +0 -97
  223. package/templates/storefront-grocery/app/privacy/page.tsx +0 -44
  224. package/templates/storefront-grocery/app/returns/page.tsx +0 -11
  225. package/templates/storefront-grocery/app/robots.ts +0 -18
  226. package/templates/storefront-grocery/app/search/page.tsx +0 -38
  227. package/templates/storefront-grocery/app/search/search-client.tsx +0 -7
  228. package/templates/storefront-grocery/app/shipping/page.tsx +0 -16
  229. package/templates/storefront-grocery/app/shop/page.tsx +0 -31
  230. package/templates/storefront-grocery/app/shop/shop-client.tsx +0 -27
  231. package/templates/storefront-grocery/app/signup/page.tsx +0 -17
  232. package/templates/storefront-grocery/app/sitemap-page/page.tsx +0 -167
  233. package/templates/storefront-grocery/app/sitemap.ts +0 -62
  234. package/templates/storefront-grocery/app/terms/page.tsx +0 -44
  235. package/templates/storefront-grocery/app/track-order/page.tsx +0 -24
  236. package/templates/storefront-grocery/app/track-order/track-order-form.tsx +0 -69
  237. package/templates/storefront-grocery/components/account-iframe.tsx +0 -13
  238. package/templates/storefront-grocery/components/cart-drawer.tsx +0 -14
  239. package/templates/storefront-grocery/components/cart-pill.tsx +0 -36
  240. package/templates/storefront-grocery/components/category-grid.tsx +0 -28
  241. package/templates/storefront-grocery/components/collection-strip.tsx +0 -45
  242. package/templates/storefront-grocery/components/footer.tsx +0 -148
  243. package/templates/storefront-grocery/components/header.tsx +0 -43
  244. package/templates/storefront-grocery/components/hero.tsx +0 -25
  245. package/templates/storefront-grocery/components/nav-link.tsx +0 -20
  246. package/templates/storefront-grocery/components/policy-page.tsx +0 -49
  247. package/templates/storefront-grocery/components/product-modal.tsx +0 -104
  248. package/templates/storefront-grocery/components/providers.tsx +0 -35
  249. package/templates/storefront-grocery/components/store-product-card.tsx +0 -87
  250. package/templates/storefront-grocery/lib/brand.ts +0 -375
  251. package/templates/storefront-grocery/lib/cart.ts +0 -12
  252. package/templates/storefront-grocery/next.config.ts +0 -42
  253. package/templates/storefront-grocery/package.json +0 -35
  254. package/templates/storefront-grocery/postcss.config.mjs +0 -7
  255. package/templates/storefront-grocery/tsconfig.json +0 -23
  256. package/templates/storefront-grocery/vitest.config.ts +0 -9
  257. package/templates/storefront-restaurant/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  258. package/templates/storefront-restaurant/.cursor/rules/cimplify-storefront.mdc +0 -25
  259. package/templates/storefront-restaurant/.env.example +0 -16
  260. package/templates/storefront-restaurant/AGENTS.md +0 -102
  261. package/templates/storefront-restaurant/CLAUDE.md +0 -22
  262. package/templates/storefront-restaurant/README.md +0 -73
  263. package/templates/storefront-restaurant/__tests__/brand.test.ts +0 -4
  264. package/templates/storefront-restaurant/__tests__/cart-flow.test.ts +0 -4
  265. package/templates/storefront-restaurant/__tests__/contract.test.ts +0 -4
  266. package/templates/storefront-restaurant/app/about/page.tsx +0 -38
  267. package/templates/storefront-restaurant/app/accessibility/page.tsx +0 -11
  268. package/templates/storefront-restaurant/app/account/addresses/page.tsx +0 -21
  269. package/templates/storefront-restaurant/app/account/orders/page.tsx +0 -21
  270. package/templates/storefront-restaurant/app/account/page.tsx +0 -22
  271. package/templates/storefront-restaurant/app/account/settings/page.tsx +0 -21
  272. package/templates/storefront-restaurant/app/cart/page.tsx +0 -9
  273. package/templates/storefront-restaurant/app/categories/[slug]/listing-client.tsx +0 -19
  274. package/templates/storefront-restaurant/app/categories/[slug]/page.tsx +0 -118
  275. package/templates/storefront-restaurant/app/checkout/page.tsx +0 -17
  276. package/templates/storefront-restaurant/app/collections/[slug]/listing-client.tsx +0 -20
  277. package/templates/storefront-restaurant/app/collections/[slug]/page.tsx +0 -118
  278. package/templates/storefront-restaurant/app/contact/contact-form.tsx +0 -109
  279. package/templates/storefront-restaurant/app/contact/page.tsx +0 -54
  280. package/templates/storefront-restaurant/app/error.tsx +0 -60
  281. package/templates/storefront-restaurant/app/faq/page.tsx +0 -46
  282. package/templates/storefront-restaurant/app/globals.css +0 -44
  283. package/templates/storefront-restaurant/app/layout.tsx +0 -82
  284. package/templates/storefront-restaurant/app/llms.txt/route.ts +0 -94
  285. package/templates/storefront-restaurant/app/login/page.tsx +0 -17
  286. package/templates/storefront-restaurant/app/not-found.tsx +0 -39
  287. package/templates/storefront-restaurant/app/opensearch.xml/route.ts +0 -37
  288. package/templates/storefront-restaurant/app/orders/[id]/page.tsx +0 -21
  289. package/templates/storefront-restaurant/app/page.tsx +0 -97
  290. package/templates/storefront-restaurant/app/privacy/page.tsx +0 -44
  291. package/templates/storefront-restaurant/app/reservations/page.tsx +0 -66
  292. package/templates/storefront-restaurant/app/reservations/reservations-client.tsx +0 -234
  293. package/templates/storefront-restaurant/app/returns/page.tsx +0 -11
  294. package/templates/storefront-restaurant/app/robots.ts +0 -18
  295. package/templates/storefront-restaurant/app/search/page.tsx +0 -38
  296. package/templates/storefront-restaurant/app/search/search-client.tsx +0 -7
  297. package/templates/storefront-restaurant/app/shipping/page.tsx +0 -16
  298. package/templates/storefront-restaurant/app/shop/page.tsx +0 -31
  299. package/templates/storefront-restaurant/app/shop/shop-client.tsx +0 -27
  300. package/templates/storefront-restaurant/app/signup/page.tsx +0 -17
  301. package/templates/storefront-restaurant/app/sitemap-page/page.tsx +0 -167
  302. package/templates/storefront-restaurant/app/sitemap.ts +0 -62
  303. package/templates/storefront-restaurant/app/terms/page.tsx +0 -44
  304. package/templates/storefront-restaurant/app/track-order/page.tsx +0 -24
  305. package/templates/storefront-restaurant/app/track-order/track-order-form.tsx +0 -69
  306. package/templates/storefront-restaurant/components/account-iframe.tsx +0 -13
  307. package/templates/storefront-restaurant/components/cart-drawer.tsx +0 -14
  308. package/templates/storefront-restaurant/components/cart-pill.tsx +0 -36
  309. package/templates/storefront-restaurant/components/category-grid.tsx +0 -28
  310. package/templates/storefront-restaurant/components/collection-strip.tsx +0 -45
  311. package/templates/storefront-restaurant/components/footer.tsx +0 -148
  312. package/templates/storefront-restaurant/components/header.tsx +0 -43
  313. package/templates/storefront-restaurant/components/hero.tsx +0 -25
  314. package/templates/storefront-restaurant/components/nav-link.tsx +0 -20
  315. package/templates/storefront-restaurant/components/policy-page.tsx +0 -49
  316. package/templates/storefront-restaurant/components/product-modal.tsx +0 -104
  317. package/templates/storefront-restaurant/components/providers.tsx +0 -35
  318. package/templates/storefront-restaurant/components/store-product-card.tsx +0 -87
  319. package/templates/storefront-restaurant/lib/brand.ts +0 -377
  320. package/templates/storefront-restaurant/lib/cart.ts +0 -12
  321. package/templates/storefront-restaurant/next.config.ts +0 -42
  322. package/templates/storefront-restaurant/package.json +0 -35
  323. package/templates/storefront-restaurant/postcss.config.mjs +0 -7
  324. package/templates/storefront-restaurant/tsconfig.json +0 -23
  325. package/templates/storefront-restaurant/vitest.config.ts +0 -9
  326. package/templates/storefront-retail/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  327. package/templates/storefront-retail/.cursor/rules/cimplify-storefront.mdc +0 -25
  328. package/templates/storefront-retail/.env.example +0 -16
  329. package/templates/storefront-retail/AGENTS.md +0 -117
  330. package/templates/storefront-retail/CLAUDE.md +0 -22
  331. package/templates/storefront-retail/README.md +0 -77
  332. package/templates/storefront-retail/__tests__/brand.test.ts +0 -4
  333. package/templates/storefront-retail/__tests__/cart-flow.test.ts +0 -4
  334. package/templates/storefront-retail/__tests__/contract.test.ts +0 -4
  335. package/templates/storefront-retail/app/about/page.tsx +0 -41
  336. package/templates/storefront-retail/app/accessibility/page.tsx +0 -11
  337. package/templates/storefront-retail/app/account/addresses/page.tsx +0 -21
  338. package/templates/storefront-retail/app/account/orders/page.tsx +0 -21
  339. package/templates/storefront-retail/app/account/page.tsx +0 -22
  340. package/templates/storefront-retail/app/account/settings/page.tsx +0 -21
  341. package/templates/storefront-retail/app/cart/page.tsx +0 -9
  342. package/templates/storefront-retail/app/categories/[slug]/listing-client.tsx +0 -19
  343. package/templates/storefront-retail/app/categories/[slug]/page.tsx +0 -130
  344. package/templates/storefront-retail/app/checkout/page.tsx +0 -17
  345. package/templates/storefront-retail/app/collections/[slug]/listing-client.tsx +0 -20
  346. package/templates/storefront-retail/app/collections/[slug]/page.tsx +0 -130
  347. package/templates/storefront-retail/app/contact/contact-form.tsx +0 -109
  348. package/templates/storefront-retail/app/contact/page.tsx +0 -54
  349. package/templates/storefront-retail/app/error.tsx +0 -61
  350. package/templates/storefront-retail/app/faq/page.tsx +0 -46
  351. package/templates/storefront-retail/app/globals.css +0 -47
  352. package/templates/storefront-retail/app/layout.tsx +0 -77
  353. package/templates/storefront-retail/app/llms.txt/route.ts +0 -94
  354. package/templates/storefront-retail/app/login/page.tsx +0 -17
  355. package/templates/storefront-retail/app/not-found.tsx +0 -39
  356. package/templates/storefront-retail/app/opensearch.xml/route.ts +0 -37
  357. package/templates/storefront-retail/app/orders/[id]/page.tsx +0 -24
  358. package/templates/storefront-retail/app/page.tsx +0 -182
  359. package/templates/storefront-retail/app/privacy/page.tsx +0 -44
  360. package/templates/storefront-retail/app/products/[slug]/page.tsx +0 -165
  361. package/templates/storefront-retail/app/products/[slug]/product-detail.tsx +0 -70
  362. package/templates/storefront-retail/app/returns/page.tsx +0 -11
  363. package/templates/storefront-retail/app/robots.ts +0 -18
  364. package/templates/storefront-retail/app/search/page.tsx +0 -38
  365. package/templates/storefront-retail/app/search/search-client.tsx +0 -7
  366. package/templates/storefront-retail/app/shipping/page.tsx +0 -16
  367. package/templates/storefront-retail/app/shop/page.tsx +0 -63
  368. package/templates/storefront-retail/app/shop/shop-client.tsx +0 -32
  369. package/templates/storefront-retail/app/signup/page.tsx +0 -17
  370. package/templates/storefront-retail/app/sitemap-page/page.tsx +0 -167
  371. package/templates/storefront-retail/app/sitemap.ts +0 -59
  372. package/templates/storefront-retail/app/terms/page.tsx +0 -44
  373. package/templates/storefront-retail/app/track-order/page.tsx +0 -24
  374. package/templates/storefront-retail/app/track-order/track-order-form.tsx +0 -69
  375. package/templates/storefront-retail/components/account-iframe.tsx +0 -13
  376. package/templates/storefront-retail/components/brand-marquee.tsx +0 -27
  377. package/templates/storefront-retail/components/cart-drawer.tsx +0 -14
  378. package/templates/storefront-retail/components/cart-pill.tsx +0 -36
  379. package/templates/storefront-retail/components/category-grid.tsx +0 -28
  380. package/templates/storefront-retail/components/category-tiles.tsx +0 -104
  381. package/templates/storefront-retail/components/collection-strip.tsx +0 -45
  382. package/templates/storefront-retail/components/feature-hero.tsx +0 -84
  383. package/templates/storefront-retail/components/footer.tsx +0 -153
  384. package/templates/storefront-retail/components/header.tsx +0 -45
  385. package/templates/storefront-retail/components/hero.tsx +0 -28
  386. package/templates/storefront-retail/components/nav-link.tsx +0 -20
  387. package/templates/storefront-retail/components/newsletter.tsx +0 -50
  388. package/templates/storefront-retail/components/policy-page.tsx +0 -49
  389. package/templates/storefront-retail/components/promo-banner.tsx +0 -41
  390. package/templates/storefront-retail/components/providers.tsx +0 -35
  391. package/templates/storefront-retail/components/section-heading.tsx +0 -37
  392. package/templates/storefront-retail/components/store-product-card.tsx +0 -87
  393. package/templates/storefront-retail/components/trade-in-cta.tsx +0 -54
  394. package/templates/storefront-retail/components/trust-bar.tsx +0 -66
  395. package/templates/storefront-retail/lib/brand.ts +0 -664
  396. package/templates/storefront-retail/lib/cart.ts +0 -12
  397. package/templates/storefront-retail/next.config.ts +0 -42
  398. package/templates/storefront-retail/package.json +0 -35
  399. package/templates/storefront-retail/postcss.config.mjs +0 -7
  400. package/templates/storefront-retail/tsconfig.json +0 -23
  401. package/templates/storefront-retail/vitest.config.ts +0 -9
  402. package/templates/storefront-services/.claude/skills/cimplify-storefront/SKILL.md +0 -145
  403. package/templates/storefront-services/.cursor/rules/cimplify-storefront.mdc +0 -25
  404. package/templates/storefront-services/.env.example +0 -16
  405. package/templates/storefront-services/AGENTS.md +0 -101
  406. package/templates/storefront-services/CLAUDE.md +0 -22
  407. package/templates/storefront-services/README.md +0 -73
  408. package/templates/storefront-services/__tests__/brand.test.ts +0 -4
  409. package/templates/storefront-services/__tests__/cart-flow.test.ts +0 -4
  410. package/templates/storefront-services/__tests__/contract.test.ts +0 -4
  411. package/templates/storefront-services/app/about/page.tsx +0 -38
  412. package/templates/storefront-services/app/accessibility/page.tsx +0 -11
  413. package/templates/storefront-services/app/account/addresses/page.tsx +0 -21
  414. package/templates/storefront-services/app/account/orders/page.tsx +0 -21
  415. package/templates/storefront-services/app/account/page.tsx +0 -22
  416. package/templates/storefront-services/app/account/settings/page.tsx +0 -21
  417. package/templates/storefront-services/app/book/book-client.tsx +0 -195
  418. package/templates/storefront-services/app/book/page.tsx +0 -65
  419. package/templates/storefront-services/app/cart/page.tsx +0 -9
  420. package/templates/storefront-services/app/categories/[slug]/listing-client.tsx +0 -19
  421. package/templates/storefront-services/app/categories/[slug]/page.tsx +0 -118
  422. package/templates/storefront-services/app/checkout/page.tsx +0 -17
  423. package/templates/storefront-services/app/collections/[slug]/listing-client.tsx +0 -20
  424. package/templates/storefront-services/app/collections/[slug]/page.tsx +0 -118
  425. package/templates/storefront-services/app/contact/contact-form.tsx +0 -109
  426. package/templates/storefront-services/app/contact/page.tsx +0 -54
  427. package/templates/storefront-services/app/error.tsx +0 -60
  428. package/templates/storefront-services/app/faq/page.tsx +0 -46
  429. package/templates/storefront-services/app/globals.css +0 -45
  430. package/templates/storefront-services/app/layout.tsx +0 -82
  431. package/templates/storefront-services/app/llms.txt/route.ts +0 -94
  432. package/templates/storefront-services/app/login/page.tsx +0 -17
  433. package/templates/storefront-services/app/not-found.tsx +0 -39
  434. package/templates/storefront-services/app/opensearch.xml/route.ts +0 -37
  435. package/templates/storefront-services/app/orders/[id]/page.tsx +0 -21
  436. package/templates/storefront-services/app/page.tsx +0 -97
  437. package/templates/storefront-services/app/privacy/page.tsx +0 -44
  438. package/templates/storefront-services/app/returns/page.tsx +0 -11
  439. package/templates/storefront-services/app/robots.ts +0 -18
  440. package/templates/storefront-services/app/search/page.tsx +0 -38
  441. package/templates/storefront-services/app/search/search-client.tsx +0 -7
  442. package/templates/storefront-services/app/shipping/page.tsx +0 -16
  443. package/templates/storefront-services/app/shop/page.tsx +0 -31
  444. package/templates/storefront-services/app/shop/shop-client.tsx +0 -27
  445. package/templates/storefront-services/app/signup/page.tsx +0 -17
  446. package/templates/storefront-services/app/sitemap-page/page.tsx +0 -167
  447. package/templates/storefront-services/app/sitemap.ts +0 -62
  448. package/templates/storefront-services/app/terms/page.tsx +0 -44
  449. package/templates/storefront-services/app/track-order/page.tsx +0 -24
  450. package/templates/storefront-services/app/track-order/track-order-form.tsx +0 -69
  451. package/templates/storefront-services/components/account-iframe.tsx +0 -13
  452. package/templates/storefront-services/components/cart-drawer.tsx +0 -14
  453. package/templates/storefront-services/components/cart-pill.tsx +0 -36
  454. package/templates/storefront-services/components/category-grid.tsx +0 -28
  455. package/templates/storefront-services/components/collection-strip.tsx +0 -45
  456. package/templates/storefront-services/components/footer.tsx +0 -148
  457. package/templates/storefront-services/components/header.tsx +0 -43
  458. package/templates/storefront-services/components/hero.tsx +0 -25
  459. package/templates/storefront-services/components/nav-link.tsx +0 -20
  460. package/templates/storefront-services/components/policy-page.tsx +0 -49
  461. package/templates/storefront-services/components/product-modal.tsx +0 -104
  462. package/templates/storefront-services/components/providers.tsx +0 -35
  463. package/templates/storefront-services/components/store-product-card.tsx +0 -87
  464. package/templates/storefront-services/lib/brand.ts +0 -396
  465. package/templates/storefront-services/lib/cart.ts +0 -12
  466. package/templates/storefront-services/next.config.ts +0 -42
  467. package/templates/storefront-services/package.json +0 -35
  468. package/templates/storefront-services/postcss.config.mjs +0 -7
  469. package/templates/storefront-services/tsconfig.json +0 -23
  470. package/templates/storefront-services/vitest.config.ts +0 -9
@@ -1,87 +0,0 @@
1
- "use client";
2
-
3
- import Link from "next/link";
4
- import {
5
- CardVariant,
6
- FoodProductCard,
7
- RetailProductCard,
8
- WholesaleProductCard,
9
- DigitalProductCard,
10
- BundleProductCard,
11
- CompositeProductCard,
12
- StandardServiceCard,
13
- CompactServiceCard,
14
- ScheduleServiceCard,
15
- RentalServiceCard,
16
- AccommodationCard,
17
- LeaseServiceCard,
18
- SubscriptionCard,
19
- } from "@cimplify/sdk/react";
20
- import type { CardLayoutProps } from "@cimplify/sdk/react";
21
- import type { Product } from "@cimplify/sdk";
22
- import { PRODUCT_TYPE, RENDER_HINT, DURATION_UNIT } from "@cimplify/sdk";
23
-
24
- const RENTAL_UNITS = new Set<string>([DURATION_UNIT.Days, DURATION_UNIT.Hours]);
25
- const LEASE_UNITS = new Set<string>([DURATION_UNIT.Weeks, DURATION_UNIT.Months, DURATION_UNIT.Years]);
26
-
27
- const VARIANT_CARDS: Record<CardVariant, React.ComponentType<CardLayoutProps>> = {
28
- [CardVariant.Food]: FoodProductCard,
29
- [CardVariant.Retail]: RetailProductCard,
30
- [CardVariant.Wholesale]: WholesaleProductCard,
31
- [CardVariant.Digital]: DigitalProductCard,
32
- [CardVariant.Bundle]: BundleProductCard,
33
- [CardVariant.Composite]: CompositeProductCard,
34
- [CardVariant.Standard]: StandardServiceCard,
35
- [CardVariant.Compact]: CompactServiceCard,
36
- [CardVariant.Schedule]: ScheduleServiceCard,
37
- [CardVariant.Rental]: RentalServiceCard,
38
- [CardVariant.Accommodation]: AccommodationCard,
39
- [CardVariant.Lease]: LeaseServiceCard,
40
- [CardVariant.Subscription]: SubscriptionCard,
41
- };
42
-
43
- function resolveVariant(p: Product): CardVariant {
44
- if (p.type === PRODUCT_TYPE.Bundle) return CardVariant.Bundle;
45
- if (p.type === PRODUCT_TYPE.Composite) return CardVariant.Composite;
46
- if (p.quantity_pricing && p.quantity_pricing.length > 1) return CardVariant.Wholesale;
47
- if (p.type === PRODUCT_TYPE.Digital) return CardVariant.Digital;
48
- if (p.type === PRODUCT_TYPE.Service) {
49
- if (p.duration_unit && RENTAL_UNITS.has(p.duration_unit)) return CardVariant.Rental;
50
- if (p.duration_unit === DURATION_UNIT.Nights) return CardVariant.Accommodation;
51
- if (p.duration_unit && LEASE_UNITS.has(p.duration_unit)) return CardVariant.Lease;
52
- if (p.billing_plans && p.billing_plans.length > 0 && !p.duration_minutes) return CardVariant.Subscription;
53
- return CardVariant.Standard;
54
- }
55
- if (p.render_hint === RENDER_HINT.Food) return CardVariant.Food;
56
- return CardVariant.Retail;
57
- }
58
-
59
- interface Props {
60
- product: Product;
61
- /** Override the auto-detected card variant. */
62
- variant?: CardVariant;
63
- }
64
-
65
- /**
66
- * Variant-aware product card that opens the URL-driven product modal on
67
- * click. Uses `next/link` with `?product=<slug>` so the link is statically
68
- * pre-renderable — no `useSearchParams` dependency means cards don't
69
- * become dynamic islands. The modal (which already reads `useSearchParams`
70
- * inside a Suspense boundary in the root layout) handles the rest.
71
- */
72
- export function StoreProductCard({ product, variant }: Props) {
73
- const slug = product.slug || product.id;
74
- const Card = VARIANT_CARDS[variant ?? resolveVariant(product)];
75
- const href = `?product=${encodeURIComponent(slug)}`;
76
-
77
- return (
78
- <Card
79
- product={product}
80
- renderLink={({ className, children }) => (
81
- <Link href={href} scroll={false} prefetch={false} className={className}>
82
- {children}
83
- </Link>
84
- )}
85
- />
86
- );
87
- }
@@ -1,396 +0,0 @@
1
- /**
2
- * Brand & content configuration — single source of truth for every visible
3
- * string. Edit this file to rebrand. See ../AGENTS.md.
4
- */
5
-
6
- import type { SeedName } from "@cimplify/sdk/testing/suite";
7
-
8
- export interface BrandSocial {
9
- label: string;
10
- href: string;
11
- icon?: "instagram" | "x" | "tiktok" | "facebook" | "youtube" | "linkedin" | "whatsapp";
12
- }
13
-
14
- export interface BrandFaqEntry { q: string; a: string }
15
- export interface BrandFaqSection { title: string; items: BrandFaqEntry[] }
16
- export interface BrandPolicySection {
17
- heading: string;
18
- body: string | { intro: string; bullets: string[] };
19
- }
20
- export interface BrandSitemapSection { title: string; links: { label: string; href: string }[] }
21
-
22
- export interface Brand {
23
- name: string; shortName: string; microTag: string; description: string;
24
- schemaType:
25
- | "Store" | "Bakery" | "Restaurant" | "BeautySalon"
26
- | "GroceryStore" | "LocalBusiness" | "Organization";
27
- currency: string; locale: string;
28
- contact: {
29
- address: string; streetAddress: string; city: string; countryCode: string;
30
- phone: string; phoneTel: string; email: string; privacyEmail: string;
31
- supportEmail?: string; businessEmail?: string; hours: string;
32
- };
33
- socials: BrandSocial[];
34
- header: { nav: { label: string; href: string }[] };
35
- hero: {
36
- badge: string; title: string; subtitle: string;
37
- primaryCtaLabel: string;
38
- secondaryCtaLabel?: string; secondaryCtaHref?: string;
39
- };
40
- trustItems?: { label: string; value: string; description: string; iconKey: string }[];
41
- brandStrip?: { headline: string; brands: string[] };
42
- promo?: { badge: string; title: string; body: string; ctaLabel: string; ctaHref: string };
43
- tradeIn?: {
44
- eyebrow: string; title: string; body: string;
45
- primaryCtaLabel: string; primaryCtaHref: string;
46
- secondaryCtaLabel: string; secondaryCtaHref: string;
47
- steps: { step: string; title: string; body: string }[];
48
- };
49
- newsletter: {
50
- eyebrow: string; title: string; body: string; placeholder: string;
51
- submitLabel: string; successLabel: string;
52
- };
53
- about: {
54
- eyebrow: string; title: string; paragraphs: string[];
55
- sections: { heading: string; body: string }[];
56
- };
57
- faq: {
58
- eyebrow: string; title: string; sections: BrandFaqSection[];
59
- contactPrompt: string; contactEmail: string;
60
- };
61
- terms: { eyebrow: string; title: string; lastUpdated: string; sections: BrandPolicySection[] };
62
- privacy: { eyebrow: string; title: string; lastUpdated: string; sections: BrandPolicySection[] };
63
- shipping: { eyebrow: string; title: string; lastUpdated: string; sections: BrandPolicySection[] };
64
- returns: { eyebrow: string; title: string; lastUpdated: string; sections: BrandPolicySection[] };
65
- accessibility: { eyebrow: string; title: string; lastUpdated: string; sections: BrandPolicySection[] };
66
- account: {
67
- loginEyebrow: string; loginTitle: string; loginSubtitle: string;
68
- signupEyebrow: string; signupTitle: string; signupSubtitle: string;
69
- accountEyebrow: string; accountTitle: string;
70
- };
71
- contactPage: {
72
- eyebrow: string; title: string; body: string;
73
- reasons: string[];
74
- directLines: { label: string; value: string; href: string }[];
75
- };
76
- trackOrder: { eyebrow: string; title: string; body: string };
77
- footer: {
78
- blurb: string; sitemap: BrandSitemapSection[];
79
- poweredBy?: { label: string; href: string };
80
- };
81
- llms: { summary: string };
82
- mock: { seed: SeedName; businessId: string };
83
- }
84
-
85
- export const brand: Brand = {
86
- name: "Serene Spa",
87
- shortName: "Serene",
88
- microTag: "STUDIO · ACCRA",
89
- description:
90
- "Massage, facials, hands & feet — by appointment in Cantonments. Calm, considered, by people who trust touch.",
91
- schemaType: "BeautySalon",
92
-
93
- currency: "GHS",
94
- locale: "en_GH",
95
-
96
- contact: {
97
- address: "5 Ebony Close, Cantonments, Accra",
98
- streetAddress: "5 Ebony Close, Cantonments",
99
- city: "Accra",
100
- countryCode: "GH",
101
- phone: "+233 244 777 222",
102
- phoneTel: "+233244777222",
103
- email: "hello@serenespa.test",
104
- privacyEmail: "privacy@serenespa.test",
105
- hours: "Tue–Sun · 10am–8pm · closed Mondays",
106
- },
107
-
108
- socials: [
109
- { label: "Instagram", href: "https://instagram.com/serenespa", icon: "instagram" },
110
- { label: "Facebook", href: "https://facebook.com/serenespa", icon: "facebook" },
111
- { label: "WhatsApp", href: "https://wa.me/233244777222", icon: "whatsapp" },
112
- ],
113
-
114
- header: {
115
- nav: [
116
- { label: "Treatments", href: "/shop" },
117
- { label: "Memberships", href: "/categories/memberships" },
118
- { label: "About", href: "/about" },
119
- { label: "FAQ", href: "/faq" },
120
- ],
121
- },
122
-
123
- hero: {
124
- badge: "Now booking · April",
125
- title: "Slow down.\nLet us take care.",
126
- subtitle:
127
- "A small studio in Cantonments. Massage, facials, hands and feet — by qualified, kind hands. Couples rooms, infrared sauna, and herbal tea on arrival.",
128
- primaryCtaLabel: "Book a treatment",
129
- secondaryCtaLabel: "See the menu",
130
- secondaryCtaHref: "/shop",
131
- },
132
-
133
- trustItems: [
134
- {
135
- label: "Studio",
136
- value: "Six private rooms",
137
- description: "Two couples rooms, four singles. All en-suite.",
138
- iconKey: "verified",
139
- },
140
- {
141
- label: "Therapists",
142
- value: "8 certified practitioners",
143
- description: "Average 12 years' practice, all ITEC-trained.",
144
- iconKey: "support",
145
- },
146
- {
147
- label: "Members",
148
- value: "20% off · always",
149
- description: "Monthly membership with two treatments included.",
150
- iconKey: "warranty",
151
- },
152
- {
153
- label: "Booking",
154
- value: "Same-week availability",
155
- description: "Free cancellation up to 24 hours.",
156
- iconKey: "delivery",
157
- },
158
- ],
159
-
160
- promo: {
161
- badge: "April only",
162
- title: "The Reset Package — 90 minutes for two.",
163
- body: "Couples massage, infrared sauna, fresh juice, and a debrief. GH₵850 for two when booked together. Through April.",
164
- ctaLabel: "Reserve the Reset",
165
- ctaHref: "/shop",
166
- },
167
-
168
- newsletter: {
169
- eyebrow: "Quiet list",
170
- title: "A short note, once a month.",
171
- body: "Seasonal treatments, new therapists, and the discount codes worth knowing about. We don't email more than monthly. Unsubscribe in one click.",
172
- placeholder: "you@email.com",
173
- submitLabel: "Stay in touch",
174
- successLabel: "On the list ✓",
175
- },
176
-
177
- about: {
178
- eyebrow: "About Serene",
179
- title: "A studio, not a chain.",
180
- paragraphs: [
181
- "Serene opened in 2020 above a flower shop on Ebony Close. Eight therapists, six rooms, and a quiet rule: no upselling, no time pressure, no two-treatment minimums. You book what you need; we bring the same care to a 30-minute scalp massage as to a 3-hour reset.",
182
- "Every therapist is ITEC-trained or holds an equivalent international certification. Several are massage specialists with 15+ years of practice — including post-natal, deep-tissue, and oncology-cleared work.",
183
- "We use locally-sourced shea, baobab, and coconut bases — pressed in Tamale, blended with essential oils we choose ourselves. No hidden synthetic fragrances, ever.",
184
- ],
185
- sections: [
186
- {
187
- heading: "Memberships",
188
- body: "Monthly members get 20% off everything, two treatments included, and priority booking. Pause any month, no questions.",
189
- },
190
- {
191
- heading: "Gift cards",
192
- body: "Available in any amount. Delivered instantly by email — printable, redeemable in person or online, with no expiry.",
193
- },
194
- {
195
- heading: "Visit",
196
- body: "5 Ebony Close, Cantonments · Tue–Sun, 10am–8pm. Mondays the studio rests.",
197
- },
198
- ],
199
- },
200
-
201
- faq: {
202
- eyebrow: "Q&A",
203
- title: "What to expect.",
204
- sections: [
205
- {
206
- title: "Booking & arrival",
207
- items: [
208
- { q: "How do I book?", a: "Online via the Treatments menu, or send a WhatsApp to +233 244 777 222. Most slots are bookable same-week." },
209
- { q: "What's your cancellation policy?", a: "Free cancellation up to 24 hours before your appointment. Within 24 hours we charge 50% of the treatment cost." },
210
- { q: "When should I arrive?", a: "10 minutes early on your first visit (a brief intake form), 5 minutes for return visits." },
211
- { q: "Can I bring a guest?", a: "Couples rooms accommodate two. For solo bookings, guests are welcome to wait in our garden lounge." },
212
- ],
213
- },
214
- {
215
- title: "Treatments",
216
- items: [
217
- { q: "What if I have a medical condition?", a: "Tell us at booking. Some treatments — deep-tissue, hot stone, certain pressure points — aren't suitable during pregnancy, post-surgery, or with specific conditions. Our therapists will adjust or recommend alternatives." },
218
- { q: "Are your products allergen-free?", a: "Our base oils are shea, baobab, and coconut — locally pressed. Essential oils we use are listed on the product page; flag any allergies at booking." },
219
- { q: "Is tipping expected?", a: "Not expected, always appreciated. Cash or via the kiosk after your treatment." },
220
- ],
221
- },
222
- {
223
- title: "Memberships",
224
- items: [
225
- { q: "How does membership work?", a: "GH₵400/month. Includes two 60-minute treatments per month, 20% off everything else, priority booking, and bring-a-guest credits." },
226
- { q: "Can I pause it?", a: "Any month, anytime. Email or message us before the next billing date." },
227
- { q: "Do treatments roll over?", a: "Up to one treatment, for up to 60 days." },
228
- ],
229
- },
230
- ],
231
- contactPrompt: "Other questions? Message us:",
232
- contactEmail: "hello@serenespa.test",
233
- },
234
-
235
- terms: {
236
- eyebrow: "Terms of service",
237
- title: "Terms of Service",
238
- lastUpdated: "1 May 2026",
239
- sections: [
240
- { heading: "1. Who we are", body: "Serene Spa (\"we\", \"us\") is a wellness studio at 5 Ebony Close, Cantonments, Accra. By booking a treatment you (\"you\", \"client\") agree to these terms." },
241
- { heading: "2. Bookings", body: "Slot is held when payment is received (full or 50% deposit). Confirmation by email and SMS." },
242
- { heading: "3. Cancellations", body: "Free cancellation up to 24 hours before your appointment. Within 24 hours, 50% of the treatment cost is charged." },
243
- { heading: "4. Late arrival", body: "Treatments end at the scheduled time. Late arrival shortens the treatment, not the cost." },
244
- { heading: "5. Health & contraindications", body: "You're responsible for declaring relevant medical conditions, allergies, and medications. We may decline or adjust treatment in the interest of your safety." },
245
- { heading: "6. Memberships", body: "Monthly subscriptions auto-renew. Pause or cancel any month before the next billing date." },
246
- { heading: "7. Liability", body: "Maximum liability for any session is the price of that session. We're not liable for items left in the studio." },
247
- { heading: "8. Governing law", body: "These terms are governed by the laws of Ghana." },
248
- ],
249
- },
250
-
251
- privacy: {
252
- eyebrow: "Privacy",
253
- title: "Privacy Policy",
254
- lastUpdated: "1 May 2026",
255
- sections: [
256
- { heading: "What we collect", body: "Booking details (name, phone, email, treatment, time slot), the intake form for health-relevant context, and payment data via our processors. We do not store payment cards." },
257
- { heading: "How we use it", body: { intro: "We use your data to:", bullets: [
258
- "Confirm and run your appointments.",
259
- "Adapt treatments to your stated conditions and preferences.",
260
- "Send appointment reminders by SMS.",
261
- "Send our monthly note (only if you opted in).",
262
- ] } },
263
- { heading: "Health data", body: "Intake-form information is treated as sensitive. Only the therapist scheduled to see you accesses it; we never share with third parties." },
264
- { heading: "Who we share it with", body: "Payment processors (Paystack, Stripe), our SMS provider for reminders. No one else." },
265
- { heading: "Your rights", body: "Under the Ghana Data Protection Act, 2012 (Act 843), you can access, correct, or delete your data. Email privacy@serenespa.test." },
266
- { heading: "Retention", body: "Booking records: 7 years (tax). Intake forms: 3 years from your last visit." },
267
- ],
268
- },
269
-
270
- shipping: {
271
- eyebrow: "At the studio",
272
- title: "What to expect",
273
- lastUpdated: "1 May 2026",
274
- sections: [
275
- { heading: "Arriving", body: "10 minutes early on your first visit (brief intake). 5 minutes for return visits. Tea on arrival." },
276
- { heading: "Parking", body: "Free street parking on Ebony Close. Free guest parking inside the compound for couples bookings." },
277
- { heading: "What we provide", body: "Robe, slippers, towels, locker. Bring nothing." },
278
- { heading: "Couples & guests", body: "Couples rooms accommodate two. For solo bookings, your guest is welcome to wait in the garden lounge." },
279
- ],
280
- },
281
-
282
- returns: {
283
- eyebrow: "Cancellations",
284
- title: "Cancellations & Refunds",
285
- lastUpdated: "1 May 2026",
286
- sections: [
287
- { heading: "Cancellation window", body: "Free cancellation up to 24 hours before your appointment. Within 24 hours, we charge 50% of the treatment cost." },
288
- { heading: "Late arrival", body: "Treatments end at the scheduled time. Late arrival shortens the treatment, not the cost." },
289
- { heading: "Membership pause", body: "Pause any month before the next billing date — no charge, no questions." },
290
- { heading: "Gift cards", body: "Non-refundable, no expiry. Transferable to anyone with the code." },
291
- ],
292
- },
293
-
294
- accessibility: {
295
- eyebrow: "Accessibility",
296
- title: "Accessibility Statement",
297
- lastUpdated: "1 May 2026",
298
- sections: [
299
- { heading: "At the studio", body: "Step-free entrance, accessible bathroom, and a treatment table that lowers to chair-transfer height. Service dogs welcome." },
300
- { heading: "Online", body: "We aim for WCAG 2.1 AA on this site." },
301
- { heading: "Reporting issues", body: "Email accessibility@serenespa.test or WhatsApp the studio. We respond within a business day." },
302
- ],
303
- },
304
-
305
- account: {
306
- loginEyebrow: "Welcome back",
307
- loginTitle: "Sign in to Serene",
308
- loginSubtitle: "Manage your bookings, your membership, and your preferences.",
309
- signupEyebrow: "Welcome",
310
- signupTitle: "Create your account",
311
- signupSubtitle: "Save your treatment history, your therapist preferences, and your favourite blends.",
312
- accountEyebrow: "Your account",
313
- accountTitle: "Welcome back",
314
- },
315
-
316
- contactPage: {
317
- eyebrow: "Contact",
318
- title: "How can we help?",
319
- body: "Booking question, gift-card enquiry, or just want to say hello — we'll respond within a business day.",
320
- reasons: ["Booking question", "Membership", "Gift cards", "Private events", "Press / partnerships", "Something else"],
321
- directLines: [
322
- { label: "Email", value: "hello@serenespa.test", href: "mailto:hello@serenespa.test" },
323
- { label: "Phone", value: "+233 244 777 222", href: "tel:+233244777222" },
324
- { label: "WhatsApp", value: "+233 244 777 222", href: "https://wa.me/233244777222" },
325
- ],
326
- },
327
-
328
- trackOrder: {
329
- eyebrow: "Find a booking",
330
- title: "Look up your booking.",
331
- body: "Enter your booking reference and the email used at booking. We'll show the time, the therapist, and any preparation notes.",
332
- },
333
-
334
- footer: {
335
- blurb:
336
- "A small spa in Cantonments. Massage, facials, hands & feet — by qualified, kind therapists.",
337
- sitemap: [
338
- {
339
- title: "Visit",
340
- links: [
341
- { label: "Treatments", href: "/shop" },
342
- { label: "Memberships", href: "/categories/memberships" },
343
- { label: "Gift cards", href: "/about" },
344
- { label: "Couples", href: "/about" },
345
- ],
346
- },
347
- {
348
- title: "Studio",
349
- links: [
350
- { label: "About", href: "/about" },
351
- { label: "Therapists", href: "/about" },
352
- { label: "Press", href: "mailto:press@serenespa.test" },
353
- ],
354
- },
355
- {
356
- title: "Help",
357
- links: [
358
- { label: "Contact", href: "/contact" },
359
- { label: "Find a booking", href: "/track-order" },
360
- { label: "What to expect", href: "/shipping" },
361
- { label: "Cancellations", href: "/returns" },
362
- { label: "FAQ", href: "/faq" },
363
- ],
364
- },
365
- {
366
- title: "Account",
367
- links: [
368
- { label: "Sign in", href: "/login" },
369
- { label: "Create account", href: "/signup" },
370
- { label: "Your bookings", href: "/account/orders" },
371
- { label: "Settings", href: "/account/settings" },
372
- ],
373
- },
374
- {
375
- title: "Legal",
376
- links: [
377
- { label: "Terms of Service", href: "/terms" },
378
- { label: "Privacy Policy", href: "/privacy" },
379
- { label: "Accessibility", href: "/accessibility" },
380
- { label: "Sitemap", href: "/sitemap-page" },
381
- ],
382
- },
383
- ],
384
- poweredBy: { label: "Cimplify", href: "https://app.cimplify.io" },
385
- },
386
-
387
- llms: {
388
- summary:
389
- "Serene Spa — small wellness studio in Cantonments, Accra. Massage, facials, hands and feet by appointment. Couples rooms, infrared sauna, monthly membership. Booking via website or WhatsApp.",
390
- },
391
-
392
- mock: {
393
- seed: "services",
394
- businessId: "bus_serene_spa",
395
- },
396
- };
@@ -1,12 +0,0 @@
1
- "use client";
2
-
3
- import { useCart } from "@cimplify/sdk/react";
4
-
5
- /**
6
- * Reactive cart count for the header pill. Subscribes to the SDK cart
7
- * state — updates immediately on add / remove / quantity change.
8
- */
9
- export function useCartCount(): { count: number } {
10
- const { itemCount } = useCart();
11
- return { count: itemCount };
12
- }
@@ -1,42 +0,0 @@
1
- import type { NextConfig } from "next";
2
-
3
- const MOCK_URL = process.env.NEXT_PUBLIC_CIMPLIFY_API_URL?.trim() || "http://127.0.0.1:8787";
4
-
5
- /**
6
- * Same-origin proxy to the Cimplify mock so the browser never makes a
7
- * cross-origin request in dev (no CORS preflights, no flaky `Origin`
8
- * mismatches). The SDK's base URL stays empty/relative — requests go to
9
- * `/api/v1/...` on the Next origin, then this rewrite forwards them to
10
- * the mock at `127.0.0.1:8787`.
11
- *
12
- * In production, point `NEXT_PUBLIC_CIMPLIFY_API_URL` at your Cimplify
13
- * host and the rewrite continues to work the same way (or remove it and
14
- * pass the absolute URL through `<CimplifyProvider/>`).
15
- */
16
- const nextConfig: NextConfig = {
17
- // Enable Next 16's `cacheComponents` mode so we can use `'use cache'` +
18
- // `cacheTag` / `cacheLife` for SSR caching. Cached chrome streams first,
19
- // dynamic Suspense boundaries fill in when ready.
20
- cacheComponents: true,
21
- async rewrites() {
22
- return [
23
- { source: "/api/v1/:path*", destination: `${MOCK_URL}/api/v1/:path*` },
24
- { source: "/img/:path*", destination: `${MOCK_URL}/img/:path*` },
25
- { source: "/elements/:path*", destination: `${MOCK_URL}/elements/:path*` },
26
- { source: "/_mock/:path*", destination: `${MOCK_URL}/_mock/:path*` },
27
- ];
28
- },
29
- images: {
30
- remotePatterns: [
31
- { protocol: "http", hostname: "127.0.0.1", port: "8787", pathname: "/img/**" },
32
- { protocol: "http", hostname: "localhost", port: "8787", pathname: "/img/**" },
33
- { protocol: "http", hostname: "localhost", port: "3000", pathname: "/img/**" },
34
- { protocol: "https", hostname: "loremflickr.com", pathname: "/**" },
35
- { protocol: "https", hostname: "images.unsplash.com", pathname: "/**" },
36
- { protocol: "https", hostname: "static-tmp.cimplify.io", pathname: "/**" },
37
- { protocol: "https", hostname: "cdn.cimplify.io", pathname: "/**" },
38
- ],
39
- },
40
- };
41
-
42
- export default nextConfig;
@@ -1,35 +0,0 @@
1
- {
2
- "name": "__STOREFRONT_NAME__",
3
- "private": true,
4
- "version": "0.0.0",
5
- "scripts": {
6
- "dev": "concurrently -k -n mock,next -c blue,magenta \"bunx @cimplify/sdk --seed services --quiet\" \"next dev\"",
7
- "dev:storefront": "next dev",
8
- "dev:mock": "bunx @cimplify/sdk --seed services",
9
- "build": "next build",
10
- "start": "next start",
11
- "typecheck": "tsc --noEmit",
12
- "test": "vitest",
13
- "test:run": "vitest run",
14
- "check:brand": "vitest run __tests__/brand.test.ts",
15
- "check:cart": "vitest run __tests__/cart-flow.test.ts",
16
- "check:contract": "vitest run __tests__/contract.test.ts",
17
- "check": "bun run typecheck && bun run test:run"
18
- },
19
- "dependencies": {
20
- "@cimplify/sdk": "^0.44.34",
21
- "next": "^16.2.4",
22
- "react": "^19.0.0",
23
- "react-dom": "^19.0.0"
24
- },
25
- "devDependencies": {
26
- "@tailwindcss/postcss": "^4.2.4",
27
- "@types/node": "^22.10.0",
28
- "@types/react": "^19.0.0",
29
- "@types/react-dom": "^19.0.0",
30
- "concurrently": "^9.0.0",
31
- "tailwindcss": "^4.2.4",
32
- "typescript": "^5.9.3",
33
- "vitest": "^4.1.5"
34
- }
35
- }
@@ -1,7 +0,0 @@
1
- const config = {
2
- plugins: {
3
- "@tailwindcss/postcss": {},
4
- },
5
- };
6
-
7
- export default config;
@@ -1,23 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "lib": ["dom", "dom.iterable", "esnext"],
5
- "allowJs": false,
6
- "skipLibCheck": true,
7
- "strict": true,
8
- "noEmit": true,
9
- "esModuleInterop": true,
10
- "module": "esnext",
11
- "moduleResolution": "bundler",
12
- "resolveJsonModule": true,
13
- "isolatedModules": true,
14
- "jsx": "preserve",
15
- "incremental": true,
16
- "plugins": [{ "name": "next" }],
17
- "paths": {
18
- "@/*": ["./*"]
19
- }
20
- },
21
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", ".next/dev/types/**/*.ts"],
22
- "exclude": ["node_modules"]
23
- }
@@ -1,9 +0,0 @@
1
- import { defineConfig } from "vitest/config";
2
-
3
- export default defineConfig({
4
- test: {
5
- environment: "node",
6
- include: ["__tests__/**/*.test.ts"],
7
- globals: false,
8
- },
9
- });