@cimplify/sdk 0.44.34 → 0.45.0

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