@cimplify/sdk 0.44.33 → 0.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -16
- package/dist/styles.css +1 -1
- package/package.json +5 -9
- package/dist/cli/commands/deploy.mjs +0 -569
- package/dist/cli/commands/dev.mjs +0 -434
- package/dist/cli/commands/domains.mjs +0 -653
- package/dist/cli/commands/env.mjs +0 -610
- package/dist/cli/commands/link.mjs +0 -325
- package/dist/cli/commands/login.mjs +0 -515
- package/dist/cli/commands/logout.mjs +0 -54
- package/dist/cli/commands/logs.mjs +0 -358
- package/dist/cli/commands/projects.mjs +0 -327
- package/dist/cli/commands/rollback.mjs +0 -477
- package/dist/cli/commands/status.mjs +0 -380
- package/dist/cli/commands/unlink.mjs +0 -58
- package/dist/cli/commands/whoami.mjs +0 -234
- package/dist/cli.js +0 -184
- package/dist/dispatcher.mjs +0 -286
- package/registry/booking-page.json +0 -18
- package/registry/bookings-page.json +0 -17
- package/registry/service-card.json +0 -16
- package/registry/service-grid.json +0 -16
- package/templates/storefront-bakery/.claude/skills/cimplify-storefront/SKILL.md +0 -145
- package/templates/storefront-bakery/.cursor/rules/cimplify-storefront.mdc +0 -25
- package/templates/storefront-bakery/.env.example +0 -16
- package/templates/storefront-bakery/AGENTS.md +0 -120
- package/templates/storefront-bakery/CLAUDE.md +0 -22
- package/templates/storefront-bakery/README.md +0 -73
- package/templates/storefront-bakery/__tests__/brand.test.ts +0 -4
- package/templates/storefront-bakery/__tests__/cart-flow.test.ts +0 -4
- package/templates/storefront-bakery/__tests__/contract.test.ts +0 -4
- package/templates/storefront-bakery/app/about/page.tsx +0 -38
- package/templates/storefront-bakery/app/accessibility/page.tsx +0 -11
- package/templates/storefront-bakery/app/account/addresses/page.tsx +0 -21
- package/templates/storefront-bakery/app/account/orders/page.tsx +0 -21
- package/templates/storefront-bakery/app/account/page.tsx +0 -22
- package/templates/storefront-bakery/app/account/settings/page.tsx +0 -21
- package/templates/storefront-bakery/app/cart/page.tsx +0 -9
- package/templates/storefront-bakery/app/categories/[slug]/listing-client.tsx +0 -19
- package/templates/storefront-bakery/app/categories/[slug]/page.tsx +0 -118
- package/templates/storefront-bakery/app/checkout/page.tsx +0 -17
- package/templates/storefront-bakery/app/collections/[slug]/listing-client.tsx +0 -20
- package/templates/storefront-bakery/app/collections/[slug]/page.tsx +0 -118
- package/templates/storefront-bakery/app/contact/contact-form.tsx +0 -109
- package/templates/storefront-bakery/app/contact/page.tsx +0 -54
- package/templates/storefront-bakery/app/error.tsx +0 -60
- package/templates/storefront-bakery/app/faq/page.tsx +0 -46
- package/templates/storefront-bakery/app/globals.css +0 -47
- package/templates/storefront-bakery/app/layout.tsx +0 -82
- package/templates/storefront-bakery/app/llms.txt/route.ts +0 -94
- package/templates/storefront-bakery/app/login/page.tsx +0 -17
- package/templates/storefront-bakery/app/not-found.tsx +0 -39
- package/templates/storefront-bakery/app/opensearch.xml/route.ts +0 -37
- package/templates/storefront-bakery/app/orders/[id]/page.tsx +0 -21
- package/templates/storefront-bakery/app/page.tsx +0 -97
- package/templates/storefront-bakery/app/privacy/page.tsx +0 -44
- package/templates/storefront-bakery/app/returns/page.tsx +0 -11
- package/templates/storefront-bakery/app/robots.ts +0 -18
- package/templates/storefront-bakery/app/search/page.tsx +0 -38
- package/templates/storefront-bakery/app/search/search-client.tsx +0 -7
- package/templates/storefront-bakery/app/shipping/page.tsx +0 -16
- package/templates/storefront-bakery/app/shop/page.tsx +0 -31
- package/templates/storefront-bakery/app/shop/shop-client.tsx +0 -27
- package/templates/storefront-bakery/app/signup/page.tsx +0 -17
- package/templates/storefront-bakery/app/sitemap-page/page.tsx +0 -167
- package/templates/storefront-bakery/app/sitemap.ts +0 -62
- package/templates/storefront-bakery/app/terms/page.tsx +0 -44
- package/templates/storefront-bakery/app/track-order/page.tsx +0 -24
- package/templates/storefront-bakery/app/track-order/track-order-form.tsx +0 -69
- package/templates/storefront-bakery/components/account-iframe.tsx +0 -13
- package/templates/storefront-bakery/components/cart-drawer.tsx +0 -14
- package/templates/storefront-bakery/components/cart-pill.tsx +0 -36
- package/templates/storefront-bakery/components/category-grid.tsx +0 -28
- package/templates/storefront-bakery/components/collection-strip.tsx +0 -45
- package/templates/storefront-bakery/components/footer.tsx +0 -148
- package/templates/storefront-bakery/components/header.tsx +0 -43
- package/templates/storefront-bakery/components/hero.tsx +0 -25
- package/templates/storefront-bakery/components/nav-link.tsx +0 -20
- package/templates/storefront-bakery/components/policy-page.tsx +0 -49
- package/templates/storefront-bakery/components/product-modal.tsx +0 -104
- package/templates/storefront-bakery/components/providers.tsx +0 -35
- package/templates/storefront-bakery/components/store-product-card.tsx +0 -87
- package/templates/storefront-bakery/lib/brand.ts +0 -570
- package/templates/storefront-bakery/lib/cart.ts +0 -12
- package/templates/storefront-bakery/next.config.ts +0 -42
- package/templates/storefront-bakery/package.json +0 -35
- package/templates/storefront-bakery/postcss.config.mjs +0 -7
- package/templates/storefront-bakery/tsconfig.json +0 -23
- package/templates/storefront-bakery/vitest.config.ts +0 -9
- package/templates/storefront-fashion/.claude/skills/cimplify-storefront/SKILL.md +0 -145
- package/templates/storefront-fashion/.cursor/rules/cimplify-storefront.mdc +0 -25
- package/templates/storefront-fashion/.env.example +0 -16
- package/templates/storefront-fashion/AGENTS.md +0 -126
- package/templates/storefront-fashion/CLAUDE.md +0 -22
- package/templates/storefront-fashion/README.md +0 -77
- package/templates/storefront-fashion/__tests__/brand.test.ts +0 -4
- package/templates/storefront-fashion/__tests__/cart-flow.test.ts +0 -55
- package/templates/storefront-fashion/__tests__/contract.test.ts +0 -4
- package/templates/storefront-fashion/app/about/page.tsx +0 -41
- package/templates/storefront-fashion/app/accessibility/page.tsx +0 -11
- package/templates/storefront-fashion/app/account/addresses/page.tsx +0 -21
- package/templates/storefront-fashion/app/account/orders/page.tsx +0 -21
- package/templates/storefront-fashion/app/account/page.tsx +0 -22
- package/templates/storefront-fashion/app/account/settings/page.tsx +0 -21
- package/templates/storefront-fashion/app/cart/page.tsx +0 -9
- package/templates/storefront-fashion/app/categories/[slug]/listing-client.tsx +0 -19
- package/templates/storefront-fashion/app/categories/[slug]/page.tsx +0 -130
- package/templates/storefront-fashion/app/checkout/page.tsx +0 -17
- package/templates/storefront-fashion/app/collections/[slug]/listing-client.tsx +0 -20
- package/templates/storefront-fashion/app/collections/[slug]/page.tsx +0 -130
- package/templates/storefront-fashion/app/contact/contact-form.tsx +0 -109
- package/templates/storefront-fashion/app/contact/page.tsx +0 -54
- package/templates/storefront-fashion/app/error.tsx +0 -61
- package/templates/storefront-fashion/app/faq/page.tsx +0 -46
- package/templates/storefront-fashion/app/globals.css +0 -46
- package/templates/storefront-fashion/app/layout.tsx +0 -78
- package/templates/storefront-fashion/app/llms.txt/route.ts +0 -94
- package/templates/storefront-fashion/app/login/page.tsx +0 -17
- package/templates/storefront-fashion/app/lookbook/page.tsx +0 -132
- package/templates/storefront-fashion/app/not-found.tsx +0 -39
- package/templates/storefront-fashion/app/opensearch.xml/route.ts +0 -37
- package/templates/storefront-fashion/app/orders/[id]/page.tsx +0 -24
- package/templates/storefront-fashion/app/page.tsx +0 -183
- package/templates/storefront-fashion/app/privacy/page.tsx +0 -44
- package/templates/storefront-fashion/app/products/[slug]/page.tsx +0 -165
- package/templates/storefront-fashion/app/products/[slug]/product-detail.tsx +0 -70
- package/templates/storefront-fashion/app/returns/page.tsx +0 -11
- package/templates/storefront-fashion/app/robots.ts +0 -18
- package/templates/storefront-fashion/app/search/page.tsx +0 -38
- package/templates/storefront-fashion/app/search/search-client.tsx +0 -7
- package/templates/storefront-fashion/app/shipping/page.tsx +0 -16
- package/templates/storefront-fashion/app/shop/page.tsx +0 -63
- package/templates/storefront-fashion/app/shop/shop-client.tsx +0 -32
- package/templates/storefront-fashion/app/signup/page.tsx +0 -17
- package/templates/storefront-fashion/app/sitemap-page/page.tsx +0 -167
- package/templates/storefront-fashion/app/sitemap.ts +0 -59
- package/templates/storefront-fashion/app/size-guide/page.tsx +0 -155
- package/templates/storefront-fashion/app/terms/page.tsx +0 -44
- package/templates/storefront-fashion/app/track-order/page.tsx +0 -24
- package/templates/storefront-fashion/app/track-order/track-order-form.tsx +0 -69
- package/templates/storefront-fashion/components/account-iframe.tsx +0 -13
- package/templates/storefront-fashion/components/brand-marquee.tsx +0 -27
- package/templates/storefront-fashion/components/cart-drawer.tsx +0 -14
- package/templates/storefront-fashion/components/cart-pill.tsx +0 -36
- package/templates/storefront-fashion/components/category-grid.tsx +0 -28
- package/templates/storefront-fashion/components/category-tiles.tsx +0 -104
- package/templates/storefront-fashion/components/collection-strip.tsx +0 -45
- package/templates/storefront-fashion/components/feature-hero.tsx +0 -82
- package/templates/storefront-fashion/components/footer.tsx +0 -153
- package/templates/storefront-fashion/components/header.tsx +0 -43
- package/templates/storefront-fashion/components/hero.tsx +0 -28
- package/templates/storefront-fashion/components/nav-link.tsx +0 -20
- package/templates/storefront-fashion/components/newsletter.tsx +0 -50
- package/templates/storefront-fashion/components/policy-page.tsx +0 -49
- package/templates/storefront-fashion/components/promo-banner.tsx +0 -41
- package/templates/storefront-fashion/components/providers.tsx +0 -35
- package/templates/storefront-fashion/components/section-heading.tsx +0 -37
- package/templates/storefront-fashion/components/store-product-card.tsx +0 -87
- package/templates/storefront-fashion/components/trade-in-cta.tsx +0 -54
- package/templates/storefront-fashion/components/trust-bar.tsx +0 -66
- package/templates/storefront-fashion/e2e/visual.spec.ts +0 -52
- package/templates/storefront-fashion/lib/brand.ts +0 -518
- package/templates/storefront-fashion/lib/cart.ts +0 -12
- package/templates/storefront-fashion/next.config.ts +0 -42
- package/templates/storefront-fashion/package.json +0 -38
- package/templates/storefront-fashion/playwright.config.ts +0 -48
- package/templates/storefront-fashion/postcss.config.mjs +0 -7
- package/templates/storefront-fashion/tsconfig.json +0 -23
- package/templates/storefront-fashion/vitest.config.ts +0 -9
- package/templates/storefront-grocery/.claude/skills/cimplify-storefront/SKILL.md +0 -145
- package/templates/storefront-grocery/.cursor/rules/cimplify-storefront.mdc +0 -25
- package/templates/storefront-grocery/.env.example +0 -16
- package/templates/storefront-grocery/AGENTS.md +0 -96
- package/templates/storefront-grocery/CLAUDE.md +0 -22
- package/templates/storefront-grocery/README.md +0 -73
- package/templates/storefront-grocery/__tests__/brand.test.ts +0 -4
- package/templates/storefront-grocery/__tests__/cart-flow.test.ts +0 -4
- package/templates/storefront-grocery/__tests__/contract.test.ts +0 -4
- package/templates/storefront-grocery/app/about/page.tsx +0 -38
- package/templates/storefront-grocery/app/accessibility/page.tsx +0 -11
- package/templates/storefront-grocery/app/account/addresses/page.tsx +0 -21
- package/templates/storefront-grocery/app/account/orders/page.tsx +0 -21
- package/templates/storefront-grocery/app/account/page.tsx +0 -22
- package/templates/storefront-grocery/app/account/settings/page.tsx +0 -21
- package/templates/storefront-grocery/app/cart/page.tsx +0 -9
- package/templates/storefront-grocery/app/categories/[slug]/listing-client.tsx +0 -19
- package/templates/storefront-grocery/app/categories/[slug]/page.tsx +0 -118
- package/templates/storefront-grocery/app/checkout/page.tsx +0 -17
- package/templates/storefront-grocery/app/collections/[slug]/listing-client.tsx +0 -20
- package/templates/storefront-grocery/app/collections/[slug]/page.tsx +0 -118
- package/templates/storefront-grocery/app/contact/contact-form.tsx +0 -109
- package/templates/storefront-grocery/app/contact/page.tsx +0 -54
- package/templates/storefront-grocery/app/error.tsx +0 -60
- package/templates/storefront-grocery/app/faq/page.tsx +0 -46
- package/templates/storefront-grocery/app/globals.css +0 -45
- package/templates/storefront-grocery/app/layout.tsx +0 -77
- package/templates/storefront-grocery/app/llms.txt/route.ts +0 -94
- package/templates/storefront-grocery/app/login/page.tsx +0 -17
- package/templates/storefront-grocery/app/not-found.tsx +0 -39
- package/templates/storefront-grocery/app/opensearch.xml/route.ts +0 -37
- package/templates/storefront-grocery/app/orders/[id]/page.tsx +0 -21
- package/templates/storefront-grocery/app/page.tsx +0 -97
- package/templates/storefront-grocery/app/privacy/page.tsx +0 -44
- package/templates/storefront-grocery/app/returns/page.tsx +0 -11
- package/templates/storefront-grocery/app/robots.ts +0 -18
- package/templates/storefront-grocery/app/search/page.tsx +0 -38
- package/templates/storefront-grocery/app/search/search-client.tsx +0 -7
- package/templates/storefront-grocery/app/shipping/page.tsx +0 -16
- package/templates/storefront-grocery/app/shop/page.tsx +0 -31
- package/templates/storefront-grocery/app/shop/shop-client.tsx +0 -27
- package/templates/storefront-grocery/app/signup/page.tsx +0 -17
- package/templates/storefront-grocery/app/sitemap-page/page.tsx +0 -167
- package/templates/storefront-grocery/app/sitemap.ts +0 -62
- package/templates/storefront-grocery/app/terms/page.tsx +0 -44
- package/templates/storefront-grocery/app/track-order/page.tsx +0 -24
- package/templates/storefront-grocery/app/track-order/track-order-form.tsx +0 -69
- package/templates/storefront-grocery/components/account-iframe.tsx +0 -13
- package/templates/storefront-grocery/components/cart-drawer.tsx +0 -14
- package/templates/storefront-grocery/components/cart-pill.tsx +0 -36
- package/templates/storefront-grocery/components/category-grid.tsx +0 -28
- package/templates/storefront-grocery/components/collection-strip.tsx +0 -45
- package/templates/storefront-grocery/components/footer.tsx +0 -148
- package/templates/storefront-grocery/components/header.tsx +0 -43
- package/templates/storefront-grocery/components/hero.tsx +0 -25
- package/templates/storefront-grocery/components/nav-link.tsx +0 -20
- package/templates/storefront-grocery/components/policy-page.tsx +0 -49
- package/templates/storefront-grocery/components/product-modal.tsx +0 -104
- package/templates/storefront-grocery/components/providers.tsx +0 -35
- package/templates/storefront-grocery/components/store-product-card.tsx +0 -87
- package/templates/storefront-grocery/lib/brand.ts +0 -375
- package/templates/storefront-grocery/lib/cart.ts +0 -12
- package/templates/storefront-grocery/next.config.ts +0 -42
- package/templates/storefront-grocery/package.json +0 -35
- package/templates/storefront-grocery/postcss.config.mjs +0 -7
- package/templates/storefront-grocery/tsconfig.json +0 -23
- package/templates/storefront-grocery/vitest.config.ts +0 -9
- package/templates/storefront-restaurant/.claude/skills/cimplify-storefront/SKILL.md +0 -145
- package/templates/storefront-restaurant/.cursor/rules/cimplify-storefront.mdc +0 -25
- package/templates/storefront-restaurant/.env.example +0 -16
- package/templates/storefront-restaurant/AGENTS.md +0 -102
- package/templates/storefront-restaurant/CLAUDE.md +0 -22
- package/templates/storefront-restaurant/README.md +0 -73
- package/templates/storefront-restaurant/__tests__/brand.test.ts +0 -4
- package/templates/storefront-restaurant/__tests__/cart-flow.test.ts +0 -4
- package/templates/storefront-restaurant/__tests__/contract.test.ts +0 -4
- package/templates/storefront-restaurant/app/about/page.tsx +0 -38
- package/templates/storefront-restaurant/app/accessibility/page.tsx +0 -11
- package/templates/storefront-restaurant/app/account/addresses/page.tsx +0 -21
- package/templates/storefront-restaurant/app/account/orders/page.tsx +0 -21
- package/templates/storefront-restaurant/app/account/page.tsx +0 -22
- package/templates/storefront-restaurant/app/account/settings/page.tsx +0 -21
- package/templates/storefront-restaurant/app/cart/page.tsx +0 -9
- package/templates/storefront-restaurant/app/categories/[slug]/listing-client.tsx +0 -19
- package/templates/storefront-restaurant/app/categories/[slug]/page.tsx +0 -118
- package/templates/storefront-restaurant/app/checkout/page.tsx +0 -17
- package/templates/storefront-restaurant/app/collections/[slug]/listing-client.tsx +0 -20
- package/templates/storefront-restaurant/app/collections/[slug]/page.tsx +0 -118
- package/templates/storefront-restaurant/app/contact/contact-form.tsx +0 -109
- package/templates/storefront-restaurant/app/contact/page.tsx +0 -54
- package/templates/storefront-restaurant/app/error.tsx +0 -60
- package/templates/storefront-restaurant/app/faq/page.tsx +0 -46
- package/templates/storefront-restaurant/app/globals.css +0 -44
- package/templates/storefront-restaurant/app/layout.tsx +0 -82
- package/templates/storefront-restaurant/app/llms.txt/route.ts +0 -94
- package/templates/storefront-restaurant/app/login/page.tsx +0 -17
- package/templates/storefront-restaurant/app/not-found.tsx +0 -39
- package/templates/storefront-restaurant/app/opensearch.xml/route.ts +0 -37
- package/templates/storefront-restaurant/app/orders/[id]/page.tsx +0 -21
- package/templates/storefront-restaurant/app/page.tsx +0 -97
- package/templates/storefront-restaurant/app/privacy/page.tsx +0 -44
- package/templates/storefront-restaurant/app/reservations/page.tsx +0 -66
- package/templates/storefront-restaurant/app/reservations/reservations-client.tsx +0 -234
- package/templates/storefront-restaurant/app/returns/page.tsx +0 -11
- package/templates/storefront-restaurant/app/robots.ts +0 -18
- package/templates/storefront-restaurant/app/search/page.tsx +0 -38
- package/templates/storefront-restaurant/app/search/search-client.tsx +0 -7
- package/templates/storefront-restaurant/app/shipping/page.tsx +0 -16
- package/templates/storefront-restaurant/app/shop/page.tsx +0 -31
- package/templates/storefront-restaurant/app/shop/shop-client.tsx +0 -27
- package/templates/storefront-restaurant/app/signup/page.tsx +0 -17
- package/templates/storefront-restaurant/app/sitemap-page/page.tsx +0 -167
- package/templates/storefront-restaurant/app/sitemap.ts +0 -62
- package/templates/storefront-restaurant/app/terms/page.tsx +0 -44
- package/templates/storefront-restaurant/app/track-order/page.tsx +0 -24
- package/templates/storefront-restaurant/app/track-order/track-order-form.tsx +0 -69
- package/templates/storefront-restaurant/components/account-iframe.tsx +0 -13
- package/templates/storefront-restaurant/components/cart-drawer.tsx +0 -14
- package/templates/storefront-restaurant/components/cart-pill.tsx +0 -36
- package/templates/storefront-restaurant/components/category-grid.tsx +0 -28
- package/templates/storefront-restaurant/components/collection-strip.tsx +0 -45
- package/templates/storefront-restaurant/components/footer.tsx +0 -148
- package/templates/storefront-restaurant/components/header.tsx +0 -43
- package/templates/storefront-restaurant/components/hero.tsx +0 -25
- package/templates/storefront-restaurant/components/nav-link.tsx +0 -20
- package/templates/storefront-restaurant/components/policy-page.tsx +0 -49
- package/templates/storefront-restaurant/components/product-modal.tsx +0 -104
- package/templates/storefront-restaurant/components/providers.tsx +0 -35
- package/templates/storefront-restaurant/components/store-product-card.tsx +0 -87
- package/templates/storefront-restaurant/lib/brand.ts +0 -377
- package/templates/storefront-restaurant/lib/cart.ts +0 -12
- package/templates/storefront-restaurant/next.config.ts +0 -42
- package/templates/storefront-restaurant/package.json +0 -35
- package/templates/storefront-restaurant/postcss.config.mjs +0 -7
- package/templates/storefront-restaurant/tsconfig.json +0 -23
- package/templates/storefront-restaurant/vitest.config.ts +0 -9
- package/templates/storefront-retail/.claude/skills/cimplify-storefront/SKILL.md +0 -145
- package/templates/storefront-retail/.cursor/rules/cimplify-storefront.mdc +0 -25
- package/templates/storefront-retail/.env.example +0 -16
- package/templates/storefront-retail/AGENTS.md +0 -117
- package/templates/storefront-retail/CLAUDE.md +0 -22
- package/templates/storefront-retail/README.md +0 -77
- package/templates/storefront-retail/__tests__/brand.test.ts +0 -4
- package/templates/storefront-retail/__tests__/cart-flow.test.ts +0 -4
- package/templates/storefront-retail/__tests__/contract.test.ts +0 -4
- package/templates/storefront-retail/app/about/page.tsx +0 -41
- package/templates/storefront-retail/app/accessibility/page.tsx +0 -11
- package/templates/storefront-retail/app/account/addresses/page.tsx +0 -21
- package/templates/storefront-retail/app/account/orders/page.tsx +0 -21
- package/templates/storefront-retail/app/account/page.tsx +0 -22
- package/templates/storefront-retail/app/account/settings/page.tsx +0 -21
- package/templates/storefront-retail/app/cart/page.tsx +0 -9
- package/templates/storefront-retail/app/categories/[slug]/listing-client.tsx +0 -19
- package/templates/storefront-retail/app/categories/[slug]/page.tsx +0 -130
- package/templates/storefront-retail/app/checkout/page.tsx +0 -17
- package/templates/storefront-retail/app/collections/[slug]/listing-client.tsx +0 -20
- package/templates/storefront-retail/app/collections/[slug]/page.tsx +0 -130
- package/templates/storefront-retail/app/contact/contact-form.tsx +0 -109
- package/templates/storefront-retail/app/contact/page.tsx +0 -54
- package/templates/storefront-retail/app/error.tsx +0 -61
- package/templates/storefront-retail/app/faq/page.tsx +0 -46
- package/templates/storefront-retail/app/globals.css +0 -47
- package/templates/storefront-retail/app/layout.tsx +0 -77
- package/templates/storefront-retail/app/llms.txt/route.ts +0 -94
- package/templates/storefront-retail/app/login/page.tsx +0 -17
- package/templates/storefront-retail/app/not-found.tsx +0 -39
- package/templates/storefront-retail/app/opensearch.xml/route.ts +0 -37
- package/templates/storefront-retail/app/orders/[id]/page.tsx +0 -24
- package/templates/storefront-retail/app/page.tsx +0 -182
- package/templates/storefront-retail/app/privacy/page.tsx +0 -44
- package/templates/storefront-retail/app/products/[slug]/page.tsx +0 -165
- package/templates/storefront-retail/app/products/[slug]/product-detail.tsx +0 -70
- package/templates/storefront-retail/app/returns/page.tsx +0 -11
- package/templates/storefront-retail/app/robots.ts +0 -18
- package/templates/storefront-retail/app/search/page.tsx +0 -38
- package/templates/storefront-retail/app/search/search-client.tsx +0 -7
- package/templates/storefront-retail/app/shipping/page.tsx +0 -16
- package/templates/storefront-retail/app/shop/page.tsx +0 -63
- package/templates/storefront-retail/app/shop/shop-client.tsx +0 -32
- package/templates/storefront-retail/app/signup/page.tsx +0 -17
- package/templates/storefront-retail/app/sitemap-page/page.tsx +0 -167
- package/templates/storefront-retail/app/sitemap.ts +0 -59
- package/templates/storefront-retail/app/terms/page.tsx +0 -44
- package/templates/storefront-retail/app/track-order/page.tsx +0 -24
- package/templates/storefront-retail/app/track-order/track-order-form.tsx +0 -69
- package/templates/storefront-retail/components/account-iframe.tsx +0 -13
- package/templates/storefront-retail/components/brand-marquee.tsx +0 -27
- package/templates/storefront-retail/components/cart-drawer.tsx +0 -14
- package/templates/storefront-retail/components/cart-pill.tsx +0 -36
- package/templates/storefront-retail/components/category-grid.tsx +0 -28
- package/templates/storefront-retail/components/category-tiles.tsx +0 -104
- package/templates/storefront-retail/components/collection-strip.tsx +0 -45
- package/templates/storefront-retail/components/feature-hero.tsx +0 -84
- package/templates/storefront-retail/components/footer.tsx +0 -153
- package/templates/storefront-retail/components/header.tsx +0 -45
- package/templates/storefront-retail/components/hero.tsx +0 -28
- package/templates/storefront-retail/components/nav-link.tsx +0 -20
- package/templates/storefront-retail/components/newsletter.tsx +0 -50
- package/templates/storefront-retail/components/policy-page.tsx +0 -49
- package/templates/storefront-retail/components/promo-banner.tsx +0 -41
- package/templates/storefront-retail/components/providers.tsx +0 -35
- package/templates/storefront-retail/components/section-heading.tsx +0 -37
- package/templates/storefront-retail/components/store-product-card.tsx +0 -87
- package/templates/storefront-retail/components/trade-in-cta.tsx +0 -54
- package/templates/storefront-retail/components/trust-bar.tsx +0 -66
- package/templates/storefront-retail/lib/brand.ts +0 -664
- package/templates/storefront-retail/lib/cart.ts +0 -12
- package/templates/storefront-retail/next.config.ts +0 -42
- package/templates/storefront-retail/package.json +0 -35
- package/templates/storefront-retail/postcss.config.mjs +0 -7
- package/templates/storefront-retail/tsconfig.json +0 -23
- package/templates/storefront-retail/vitest.config.ts +0 -9
- package/templates/storefront-services/.claude/skills/cimplify-storefront/SKILL.md +0 -145
- package/templates/storefront-services/.cursor/rules/cimplify-storefront.mdc +0 -25
- package/templates/storefront-services/.env.example +0 -16
- package/templates/storefront-services/AGENTS.md +0 -101
- package/templates/storefront-services/CLAUDE.md +0 -22
- package/templates/storefront-services/README.md +0 -73
- package/templates/storefront-services/__tests__/brand.test.ts +0 -4
- package/templates/storefront-services/__tests__/cart-flow.test.ts +0 -4
- package/templates/storefront-services/__tests__/contract.test.ts +0 -4
- package/templates/storefront-services/app/about/page.tsx +0 -38
- package/templates/storefront-services/app/accessibility/page.tsx +0 -11
- package/templates/storefront-services/app/account/addresses/page.tsx +0 -21
- package/templates/storefront-services/app/account/orders/page.tsx +0 -21
- package/templates/storefront-services/app/account/page.tsx +0 -22
- package/templates/storefront-services/app/account/settings/page.tsx +0 -21
- package/templates/storefront-services/app/book/book-client.tsx +0 -195
- package/templates/storefront-services/app/book/page.tsx +0 -65
- package/templates/storefront-services/app/cart/page.tsx +0 -9
- package/templates/storefront-services/app/categories/[slug]/listing-client.tsx +0 -19
- package/templates/storefront-services/app/categories/[slug]/page.tsx +0 -118
- package/templates/storefront-services/app/checkout/page.tsx +0 -17
- package/templates/storefront-services/app/collections/[slug]/listing-client.tsx +0 -20
- package/templates/storefront-services/app/collections/[slug]/page.tsx +0 -118
- package/templates/storefront-services/app/contact/contact-form.tsx +0 -109
- package/templates/storefront-services/app/contact/page.tsx +0 -54
- package/templates/storefront-services/app/error.tsx +0 -60
- package/templates/storefront-services/app/faq/page.tsx +0 -46
- package/templates/storefront-services/app/globals.css +0 -45
- package/templates/storefront-services/app/layout.tsx +0 -82
- package/templates/storefront-services/app/llms.txt/route.ts +0 -94
- package/templates/storefront-services/app/login/page.tsx +0 -17
- package/templates/storefront-services/app/not-found.tsx +0 -39
- package/templates/storefront-services/app/opensearch.xml/route.ts +0 -37
- package/templates/storefront-services/app/orders/[id]/page.tsx +0 -21
- package/templates/storefront-services/app/page.tsx +0 -97
- package/templates/storefront-services/app/privacy/page.tsx +0 -44
- package/templates/storefront-services/app/returns/page.tsx +0 -11
- package/templates/storefront-services/app/robots.ts +0 -18
- package/templates/storefront-services/app/search/page.tsx +0 -38
- package/templates/storefront-services/app/search/search-client.tsx +0 -7
- package/templates/storefront-services/app/shipping/page.tsx +0 -16
- package/templates/storefront-services/app/shop/page.tsx +0 -31
- package/templates/storefront-services/app/shop/shop-client.tsx +0 -27
- package/templates/storefront-services/app/signup/page.tsx +0 -17
- package/templates/storefront-services/app/sitemap-page/page.tsx +0 -167
- package/templates/storefront-services/app/sitemap.ts +0 -62
- package/templates/storefront-services/app/terms/page.tsx +0 -44
- package/templates/storefront-services/app/track-order/page.tsx +0 -24
- package/templates/storefront-services/app/track-order/track-order-form.tsx +0 -69
- package/templates/storefront-services/components/account-iframe.tsx +0 -13
- package/templates/storefront-services/components/cart-drawer.tsx +0 -14
- package/templates/storefront-services/components/cart-pill.tsx +0 -36
- package/templates/storefront-services/components/category-grid.tsx +0 -28
- package/templates/storefront-services/components/collection-strip.tsx +0 -45
- package/templates/storefront-services/components/footer.tsx +0 -148
- package/templates/storefront-services/components/header.tsx +0 -43
- package/templates/storefront-services/components/hero.tsx +0 -25
- package/templates/storefront-services/components/nav-link.tsx +0 -20
- package/templates/storefront-services/components/policy-page.tsx +0 -49
- package/templates/storefront-services/components/product-modal.tsx +0 -104
- package/templates/storefront-services/components/providers.tsx +0 -35
- package/templates/storefront-services/components/store-product-card.tsx +0 -87
- package/templates/storefront-services/lib/brand.ts +0 -396
- package/templates/storefront-services/lib/cart.ts +0 -12
- package/templates/storefront-services/next.config.ts +0 -42
- package/templates/storefront-services/package.json +0 -35
- package/templates/storefront-services/postcss.config.mjs +0 -7
- package/templates/storefront-services/tsconfig.json +0 -23
- package/templates/storefront-services/vitest.config.ts +0 -9
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import type { Metadata } from "next";
|
|
2
|
-
import { brand } from "@/lib/brand";
|
|
3
|
-
|
|
4
|
-
export const metadata: Metadata = {
|
|
5
|
-
title: `Size Guide — ${brand.name}`,
|
|
6
|
-
description: "Chest, length, and shoulder measurements for every Studio FRX piece.",
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
interface SizeRow {
|
|
10
|
-
size: string;
|
|
11
|
-
chest: string;
|
|
12
|
-
length: string;
|
|
13
|
-
shoulder: string;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const TOPS_CHART: SizeRow[] = [
|
|
17
|
-
{ size: "XS", chest: "104 cm / 41 in", length: "68 cm / 26.8 in", shoulder: "50 cm / 19.7 in" },
|
|
18
|
-
{ size: "S", chest: "110 cm / 43.3 in", length: "70 cm / 27.5 in", shoulder: "52 cm / 20.5 in" },
|
|
19
|
-
{ size: "M", chest: "116 cm / 45.7 in", length: "72 cm / 28.3 in", shoulder: "54 cm / 21.3 in" },
|
|
20
|
-
{ size: "L", chest: "122 cm / 48 in", length: "74 cm / 29.1 in", shoulder: "56 cm / 22 in" },
|
|
21
|
-
{ size: "XL", chest: "128 cm / 50.4 in", length: "76 cm / 29.9 in", shoulder: "58 cm / 22.8 in" },
|
|
22
|
-
{ size: "2XL", chest: "134 cm / 52.7 in", length: "78 cm / 30.7 in", shoulder: "60 cm / 23.6 in" },
|
|
23
|
-
{ size: "3XL", chest: "140 cm / 55.1 in", length: "80 cm / 31.5 in", shoulder: "62 cm / 24.4 in" },
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
const BOTTOMS_CHART: { size: string; waist: string; hip: string; inseam: string }[] = [
|
|
27
|
-
{ size: "XS", waist: "72 cm / 28 in", hip: "92 cm / 36 in", inseam: "78 cm / 30.7 in" },
|
|
28
|
-
{ size: "S", waist: "76 cm / 30 in", hip: "96 cm / 38 in", inseam: "78 cm / 30.7 in" },
|
|
29
|
-
{ size: "M", waist: "82 cm / 32 in", hip: "102 cm / 40 in", inseam: "80 cm / 31.5 in" },
|
|
30
|
-
{ size: "L", waist: "88 cm / 35 in", hip: "108 cm / 42.5 in", inseam: "80 cm / 31.5 in" },
|
|
31
|
-
{ size: "XL", waist: "94 cm / 37 in", hip: "114 cm / 45 in", inseam: "82 cm / 32.3 in" },
|
|
32
|
-
{ size: "2XL", waist: "102 cm / 40 in", hip: "122 cm / 48 in", inseam: "82 cm / 32.3 in" },
|
|
33
|
-
];
|
|
34
|
-
|
|
35
|
-
export default function SizeGuidePage() {
|
|
36
|
-
return (
|
|
37
|
-
<article className="max-w-4xl mx-auto px-6 sm:px-8 py-16">
|
|
38
|
-
<p className="text-[11px] font-mono uppercase tracking-[0.2em] text-primary mb-2">
|
|
39
|
-
Size guide
|
|
40
|
-
</p>
|
|
41
|
-
<h1 className="font-display text-[clamp(2.5rem,7vw,5rem)] uppercase mb-4 -tracking-[0.04em] leading-[0.95]">
|
|
42
|
-
Find your fit.
|
|
43
|
-
</h1>
|
|
44
|
-
<p className="text-base text-muted-foreground leading-relaxed max-w-2xl mb-12">
|
|
45
|
-
Our pieces are cut for an oversized, dropped-shoulder fit. Order true to size for
|
|
46
|
-
the intended fit; size down for a regular cut. All measurements are flat-laid
|
|
47
|
-
garment measurements.
|
|
48
|
-
</p>
|
|
49
|
-
|
|
50
|
-
<section className="mb-14">
|
|
51
|
-
<h2 className="text-2xl font-bold mb-2 -tracking-[0.025em]">Tops & outerwear</h2>
|
|
52
|
-
<p className="text-sm text-muted-foreground mb-4">
|
|
53
|
-
Hoodies, tees, sweats, jackets. Chest measured pit-to-pit, doubled. Length
|
|
54
|
-
measured from highest shoulder seam to hem.
|
|
55
|
-
</p>
|
|
56
|
-
<SizeTable
|
|
57
|
-
headings={["Size", "Chest", "Length", "Shoulder"]}
|
|
58
|
-
rows={TOPS_CHART.map((r) => [r.size, r.chest, r.length, r.shoulder])}
|
|
59
|
-
/>
|
|
60
|
-
</section>
|
|
61
|
-
|
|
62
|
-
<section className="mb-14">
|
|
63
|
-
<h2 className="text-2xl font-bold mb-2 -tracking-[0.025em]">Bottoms</h2>
|
|
64
|
-
<p className="text-sm text-muted-foreground mb-4">
|
|
65
|
-
Trousers, shorts, sweats. Waist measured flat across the top of the
|
|
66
|
-
waistband, doubled.
|
|
67
|
-
</p>
|
|
68
|
-
<SizeTable
|
|
69
|
-
headings={["Size", "Waist", "Hip", "Inseam"]}
|
|
70
|
-
rows={BOTTOMS_CHART.map((r) => [r.size, r.waist, r.hip, r.inseam])}
|
|
71
|
-
/>
|
|
72
|
-
</section>
|
|
73
|
-
|
|
74
|
-
<section className="rounded-2xl bg-foreground text-background p-8">
|
|
75
|
-
<h2 className="text-xl font-bold mb-3 -tracking-[0.025em]">How to measure yourself</h2>
|
|
76
|
-
<ul className="space-y-3 text-background/85 leading-relaxed">
|
|
77
|
-
<li>
|
|
78
|
-
<strong className="text-background">Chest</strong> — Wrap a soft tape around
|
|
79
|
-
the fullest part of your chest, under the arms, keeping the tape level.
|
|
80
|
-
</li>
|
|
81
|
-
<li>
|
|
82
|
-
<strong className="text-background">Waist</strong> — Around the narrowest part
|
|
83
|
-
of your waist, just above the navel.
|
|
84
|
-
</li>
|
|
85
|
-
<li>
|
|
86
|
-
<strong className="text-background">Hip</strong> — Around the fullest part of
|
|
87
|
-
your hips, feet together.
|
|
88
|
-
</li>
|
|
89
|
-
<li>
|
|
90
|
-
<strong className="text-background">Inseam</strong> — From the very top of the
|
|
91
|
-
inside of your leg down to the floor (no shoes).
|
|
92
|
-
</li>
|
|
93
|
-
</ul>
|
|
94
|
-
</section>
|
|
95
|
-
|
|
96
|
-
<p className="mt-12 text-sm text-muted-foreground">
|
|
97
|
-
Still unsure?{" "}
|
|
98
|
-
<a
|
|
99
|
-
href={`mailto:${brand.faq.contactEmail}`}
|
|
100
|
-
className="text-primary font-semibold hover:underline"
|
|
101
|
-
>
|
|
102
|
-
Email us your usual size in another brand
|
|
103
|
-
</a>{" "}
|
|
104
|
-
and we'll recommend a fit.
|
|
105
|
-
</p>
|
|
106
|
-
</article>
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
function SizeTable({
|
|
111
|
-
headings,
|
|
112
|
-
rows,
|
|
113
|
-
}: {
|
|
114
|
-
headings: string[];
|
|
115
|
-
rows: string[][];
|
|
116
|
-
}) {
|
|
117
|
-
return (
|
|
118
|
-
<div className="overflow-x-auto rounded-2xl border border-border">
|
|
119
|
-
<table className="w-full text-sm">
|
|
120
|
-
<thead className="bg-muted">
|
|
121
|
-
<tr>
|
|
122
|
-
{headings.map((h) => (
|
|
123
|
-
<th
|
|
124
|
-
key={h}
|
|
125
|
-
className="text-left font-semibold uppercase tracking-wider text-[11px] text-muted-foreground px-4 py-3"
|
|
126
|
-
>
|
|
127
|
-
{h}
|
|
128
|
-
</th>
|
|
129
|
-
))}
|
|
130
|
-
</tr>
|
|
131
|
-
</thead>
|
|
132
|
-
<tbody>
|
|
133
|
-
{rows.map((r, i) => (
|
|
134
|
-
<tr
|
|
135
|
-
key={r[0]}
|
|
136
|
-
className={i % 2 === 0 ? "bg-background" : "bg-muted/30"}
|
|
137
|
-
>
|
|
138
|
-
{r.map((cell, j) => (
|
|
139
|
-
<td
|
|
140
|
-
key={j}
|
|
141
|
-
className={[
|
|
142
|
-
"px-4 py-3 tabular-nums",
|
|
143
|
-
j === 0 ? "font-semibold text-foreground" : "text-foreground/80",
|
|
144
|
-
].join(" ")}
|
|
145
|
-
>
|
|
146
|
-
{cell}
|
|
147
|
-
</td>
|
|
148
|
-
))}
|
|
149
|
-
</tr>
|
|
150
|
-
))}
|
|
151
|
-
</tbody>
|
|
152
|
-
</table>
|
|
153
|
-
</div>
|
|
154
|
-
);
|
|
155
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { Metadata } from "next";
|
|
2
|
-
import { brand } from "@/lib/brand";
|
|
3
|
-
|
|
4
|
-
export const metadata: Metadata = {
|
|
5
|
-
title: `Terms of Service — ${brand.name}`,
|
|
6
|
-
description: `The rules of the road for ordering from ${brand.name}.`,
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
export default function TermsPage() {
|
|
10
|
-
const t = brand.terms;
|
|
11
|
-
return (
|
|
12
|
-
<article className="max-w-3xl mx-auto px-8 py-16 prose prose-lg max-w-none">
|
|
13
|
-
<p className="text-[11px] font-mono uppercase tracking-[0.16em] text-primary mb-2 not-prose">
|
|
14
|
-
{t.eyebrow}
|
|
15
|
-
</p>
|
|
16
|
-
<h1 className="text-[clamp(2.25rem,5vw,3.5rem)] font-bold mb-2 -tracking-[0.025em]">
|
|
17
|
-
{t.title}
|
|
18
|
-
</h1>
|
|
19
|
-
<p className="text-sm text-muted-foreground not-prose mb-10">
|
|
20
|
-
Last updated: {t.lastUpdated}
|
|
21
|
-
</p>
|
|
22
|
-
|
|
23
|
-
<section className="space-y-5 leading-relaxed text-foreground/90">
|
|
24
|
-
{t.sections.map((s) => (
|
|
25
|
-
<div key={s.heading}>
|
|
26
|
-
<h2 className="text-2xl font-semibold mt-0 -tracking-[0.02em]">{s.heading}</h2>
|
|
27
|
-
{typeof s.body === "string" ? (
|
|
28
|
-
<p>{s.body}</p>
|
|
29
|
-
) : (
|
|
30
|
-
<>
|
|
31
|
-
<p>{s.body.intro}</p>
|
|
32
|
-
<ul className="list-disc pl-6 space-y-2">
|
|
33
|
-
{s.body.bullets.map((b) => (
|
|
34
|
-
<li key={b}>{b}</li>
|
|
35
|
-
))}
|
|
36
|
-
</ul>
|
|
37
|
-
</>
|
|
38
|
-
)}
|
|
39
|
-
</div>
|
|
40
|
-
))}
|
|
41
|
-
</section>
|
|
42
|
-
</article>
|
|
43
|
-
);
|
|
44
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { Metadata } from "next";
|
|
2
|
-
import { TrackOrderForm } from "./track-order-form";
|
|
3
|
-
import { brand } from "@/lib/brand";
|
|
4
|
-
|
|
5
|
-
export const metadata: Metadata = {
|
|
6
|
-
title: `Track an order — ${brand.name}`,
|
|
7
|
-
description: brand.trackOrder.body,
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export default function TrackOrderPage() {
|
|
11
|
-
const t = brand.trackOrder;
|
|
12
|
-
return (
|
|
13
|
-
<article className="max-w-2xl mx-auto px-6 sm:px-8 py-16">
|
|
14
|
-
<p className="text-[11px] font-semibold uppercase tracking-[0.16em] text-primary mb-2">
|
|
15
|
-
{t.eyebrow}
|
|
16
|
-
</p>
|
|
17
|
-
<h1 className="font-serif text-[clamp(2rem,5vw,3rem)] font-semibold mb-4 -tracking-[0.02em]">
|
|
18
|
-
{t.title}
|
|
19
|
-
</h1>
|
|
20
|
-
<p className="text-muted-foreground leading-relaxed mb-8">{t.body}</p>
|
|
21
|
-
<TrackOrderForm />
|
|
22
|
-
</article>
|
|
23
|
-
);
|
|
24
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { useState } from "react";
|
|
4
|
-
import { useRouter } from "next/navigation";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Guest order tracker. Routes /orders/<id> with the entered id; the
|
|
8
|
-
* post-checkout confirmation page already lives at /orders/[id] so this
|
|
9
|
-
* just sends the visitor there. Replace the redirect with a real lookup
|
|
10
|
-
* (e.g. Cimplify orders API + email-match guard) for production.
|
|
11
|
-
*/
|
|
12
|
-
export function TrackOrderForm() {
|
|
13
|
-
const router = useRouter();
|
|
14
|
-
const [orderId, setOrderId] = useState("");
|
|
15
|
-
const [email, setEmail] = useState("");
|
|
16
|
-
|
|
17
|
-
return (
|
|
18
|
-
<form
|
|
19
|
-
onSubmit={(e) => {
|
|
20
|
-
e.preventDefault();
|
|
21
|
-
if (!orderId.trim()) return;
|
|
22
|
-
router.push(`/orders/${encodeURIComponent(orderId.trim())}`);
|
|
23
|
-
}}
|
|
24
|
-
className="space-y-4 rounded-2xl border border-border bg-card p-6"
|
|
25
|
-
>
|
|
26
|
-
<div>
|
|
27
|
-
<label
|
|
28
|
-
htmlFor="orderId"
|
|
29
|
-
className="text-xs font-semibold uppercase tracking-wider text-muted-foreground block mb-1.5"
|
|
30
|
-
>
|
|
31
|
-
Order number
|
|
32
|
-
</label>
|
|
33
|
-
<input
|
|
34
|
-
id="orderId"
|
|
35
|
-
name="orderId"
|
|
36
|
-
required
|
|
37
|
-
value={orderId}
|
|
38
|
-
onChange={(e) => setOrderId(e.target.value)}
|
|
39
|
-
placeholder="ord_abc123…"
|
|
40
|
-
className="w-full px-4 py-3 rounded-md bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none text-sm"
|
|
41
|
-
/>
|
|
42
|
-
</div>
|
|
43
|
-
<div>
|
|
44
|
-
<label
|
|
45
|
-
htmlFor="email"
|
|
46
|
-
className="text-xs font-semibold uppercase tracking-wider text-muted-foreground block mb-1.5"
|
|
47
|
-
>
|
|
48
|
-
Order email
|
|
49
|
-
</label>
|
|
50
|
-
<input
|
|
51
|
-
id="email"
|
|
52
|
-
name="email"
|
|
53
|
-
type="email"
|
|
54
|
-
required
|
|
55
|
-
value={email}
|
|
56
|
-
onChange={(e) => setEmail(e.target.value)}
|
|
57
|
-
placeholder="you@email.com"
|
|
58
|
-
className="w-full px-4 py-3 rounded-md bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none text-sm"
|
|
59
|
-
/>
|
|
60
|
-
</div>
|
|
61
|
-
<button
|
|
62
|
-
type="submit"
|
|
63
|
-
className="w-full inline-flex items-center justify-center px-5 py-3 rounded-md bg-primary text-primary-foreground font-semibold text-sm hover:bg-primary/90 transition-colors"
|
|
64
|
-
>
|
|
65
|
-
Track order
|
|
66
|
-
</button>
|
|
67
|
-
</form>
|
|
68
|
-
);
|
|
69
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { CimplifyAccount } from "@cimplify/sdk/react";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Cimplify Account portal — iframe-mounted UI hosted by Cimplify Link.
|
|
7
|
-
* Handles sign-in, sign-up, OTP, addresses, payment methods, sessions,
|
|
8
|
-
* and order history. The iframe owns auth state; we just choose which
|
|
9
|
-
* `section` to land on.
|
|
10
|
-
*/
|
|
11
|
-
export function AccountIframe({ section }: { section?: string }) {
|
|
12
|
-
return <CimplifyAccount section={section} />;
|
|
13
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { brand } from "@/lib/brand";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Brand authority strip. Wordmark-only (avoids licensing issues with real
|
|
5
|
-
* logos), monospaced for the brand-as-typography aesthetic.
|
|
6
|
-
*/
|
|
7
|
-
export function BrandMarquee() {
|
|
8
|
-
const strip = brand.brandStrip;
|
|
9
|
-
if (!strip || strip.brands.length === 0) return null;
|
|
10
|
-
return (
|
|
11
|
-
<section className="border-y border-border bg-background py-8 sm:py-10 overflow-hidden">
|
|
12
|
-
<p className="text-center text-[11px] font-mono uppercase tracking-[0.2em] text-muted-foreground mb-6">
|
|
13
|
-
{strip.headline}
|
|
14
|
-
</p>
|
|
15
|
-
<div className="flex items-center justify-around gap-10 sm:gap-14 flex-wrap px-6">
|
|
16
|
-
{strip.brands.map((b) => (
|
|
17
|
-
<span
|
|
18
|
-
key={b}
|
|
19
|
-
className="text-[clamp(1.25rem,2vw,1.75rem)] font-semibold text-muted-foreground hover:text-foreground transition-colors -tracking-[0.025em] opacity-70 hover:opacity-100"
|
|
20
|
-
>
|
|
21
|
-
{b}
|
|
22
|
-
</span>
|
|
23
|
-
))}
|
|
24
|
-
</div>
|
|
25
|
-
</section>
|
|
26
|
-
);
|
|
27
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { useRouter } from "next/navigation";
|
|
4
|
-
import { CartDrawer as SdkCartDrawer } from "@cimplify/sdk/react";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Side-drawer cart. Auto-opens when an item is added (via
|
|
8
|
-
* `<CartDrawerProvider>` in `providers.tsx`). The header's cart pill
|
|
9
|
-
* also calls `useCartDrawer().open()` to reveal it on click.
|
|
10
|
-
*/
|
|
11
|
-
export function CartDrawer() {
|
|
12
|
-
const router = useRouter();
|
|
13
|
-
return <SdkCartDrawer onCheckout={() => router.push("/checkout")} />;
|
|
14
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { useCartDrawer } from "@cimplify/sdk/react";
|
|
4
|
-
import { useCartCount } from "@/lib/cart";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Cart pill — dynamic island. Reads the live cart count via the SDK and
|
|
8
|
-
* opens the side cart drawer on click (instead of navigating to /cart).
|
|
9
|
-
* Wrap in `<Suspense fallback={<CartPillSkeleton/>}>` so the cached
|
|
10
|
-
* header chrome streams without blocking on the cart fetch.
|
|
11
|
-
*/
|
|
12
|
-
export function CartPill() {
|
|
13
|
-
const { count } = useCartCount();
|
|
14
|
-
const { open } = useCartDrawer();
|
|
15
|
-
return (
|
|
16
|
-
<button
|
|
17
|
-
type="button"
|
|
18
|
-
onClick={open}
|
|
19
|
-
aria-label={`Open cart, ${count} ${count === 1 ? "item" : "items"}`}
|
|
20
|
-
className="inline-flex items-center gap-1.5 px-3.5 py-2 rounded-full bg-foreground text-background text-xs font-semibold tracking-wide transition-transform hover:scale-105 cursor-pointer"
|
|
21
|
-
>
|
|
22
|
-
Cart · {count}
|
|
23
|
-
</button>
|
|
24
|
-
);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export function CartPillSkeleton() {
|
|
28
|
-
return (
|
|
29
|
-
<span
|
|
30
|
-
aria-hidden
|
|
31
|
-
className="inline-flex items-center gap-1.5 px-3.5 py-2 rounded-full bg-foreground/80 text-background text-xs font-semibold tracking-wide"
|
|
32
|
-
>
|
|
33
|
-
Cart · …
|
|
34
|
-
</span>
|
|
35
|
-
);
|
|
36
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { useRouter } from "next/navigation";
|
|
4
|
-
import { CategoryGrid as SdkCategoryGrid } from "@cimplify/sdk/react";
|
|
5
|
-
import type { Category } from "@cimplify/sdk";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Homepage category tiles — defers to the SDK's <CategoryGrid/> for layout
|
|
9
|
-
* and accessibility, and routes selections to /categories/:slug.
|
|
10
|
-
*/
|
|
11
|
-
export function CategoryGrid({ categories }: { categories?: Category[] }) {
|
|
12
|
-
const router = useRouter();
|
|
13
|
-
return (
|
|
14
|
-
<section className="max-w-7xl mx-auto px-8 pt-14">
|
|
15
|
-
<h2 className="font-serif text-[28px] font-semibold m-0 mb-5">Browse the menu</h2>
|
|
16
|
-
<SdkCategoryGrid
|
|
17
|
-
categories={categories}
|
|
18
|
-
onSelect={(c) => router.push(`/categories/${c.slug}`)}
|
|
19
|
-
classNames={{
|
|
20
|
-
item: "flex flex-col gap-1 p-6 bg-card border border-border rounded-2xl cursor-pointer text-left transition-all hover:border-primary hover:-translate-y-0.5",
|
|
21
|
-
name: "font-serif text-lg font-semibold text-foreground",
|
|
22
|
-
description: "text-xs text-muted-foreground",
|
|
23
|
-
count: "text-xs text-muted-foreground mt-1",
|
|
24
|
-
}}
|
|
25
|
-
/>
|
|
26
|
-
</section>
|
|
27
|
-
);
|
|
28
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import Link from "next/link";
|
|
2
|
-
import Image from "next/image";
|
|
3
|
-
import type { Category } from "@cimplify/sdk";
|
|
4
|
-
|
|
5
|
-
interface CategoryTilesProps {
|
|
6
|
-
categories: Category[];
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
const ICONS: Record<string, React.ReactNode> = {
|
|
10
|
-
phones: (
|
|
11
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" className="w-7 h-7" aria-hidden>
|
|
12
|
-
<rect x="6" y="2" width="12" height="20" rx="2.5" />
|
|
13
|
-
<line x1="12" y1="18" x2="12" y2="18" strokeWidth="2.5" strokeLinecap="round" />
|
|
14
|
-
</svg>
|
|
15
|
-
),
|
|
16
|
-
laptops: (
|
|
17
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" className="w-7 h-7" aria-hidden>
|
|
18
|
-
<rect x="3" y="4" width="18" height="12" rx="1.5" />
|
|
19
|
-
<line x1="2" y1="20" x2="22" y2="20" strokeLinecap="round" />
|
|
20
|
-
</svg>
|
|
21
|
-
),
|
|
22
|
-
audio: (
|
|
23
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" className="w-7 h-7" aria-hidden>
|
|
24
|
-
<path d="M3 14v-2a9 9 0 0 1 18 0v2" />
|
|
25
|
-
<rect x="2" y="14" width="5" height="6" rx="1.5" />
|
|
26
|
-
<rect x="17" y="14" width="5" height="6" rx="1.5" />
|
|
27
|
-
</svg>
|
|
28
|
-
),
|
|
29
|
-
accessories: (
|
|
30
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" className="w-7 h-7" aria-hidden>
|
|
31
|
-
<rect x="2" y="6" width="14" height="10" rx="2" />
|
|
32
|
-
<path d="M16 12h4l2 2v0l-2 2h-4" />
|
|
33
|
-
</svg>
|
|
34
|
-
),
|
|
35
|
-
gaming: (
|
|
36
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" className="w-7 h-7" aria-hidden>
|
|
37
|
-
<path d="M5 7h14a3 3 0 0 1 3 3v4a3 3 0 0 1-3 3h-1l-2-3H8l-2 3H5a3 3 0 0 1-3-3v-4a3 3 0 0 1 3-3z" />
|
|
38
|
-
<line x1="9" y1="11" x2="9" y2="13" strokeLinecap="round" />
|
|
39
|
-
<line x1="8" y1="12" x2="10" y2="12" strokeLinecap="round" />
|
|
40
|
-
<circle cx="15" cy="11" r="0.75" fill="currentColor" />
|
|
41
|
-
<circle cx="17" cy="13" r="0.75" fill="currentColor" />
|
|
42
|
-
</svg>
|
|
43
|
-
),
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
export function CategoryTiles({ categories }: CategoryTilesProps) {
|
|
47
|
-
if (categories.length === 0) return null;
|
|
48
|
-
return (
|
|
49
|
-
<section className="max-w-7xl mx-auto px-6 sm:px-8 py-14 sm:py-20">
|
|
50
|
-
<div className="flex items-end justify-between gap-6 mb-8">
|
|
51
|
-
<div>
|
|
52
|
-
<p className="text-[11px] font-mono uppercase tracking-[0.16em] text-primary mb-2">
|
|
53
|
-
Shop the catalogue
|
|
54
|
-
</p>
|
|
55
|
-
<h2 className="text-[clamp(1.75rem,3vw,2.25rem)] font-bold -tracking-[0.025em]">
|
|
56
|
-
Pick your category.
|
|
57
|
-
</h2>
|
|
58
|
-
</div>
|
|
59
|
-
<Link
|
|
60
|
-
href="/shop"
|
|
61
|
-
className="text-sm font-semibold text-primary hover:underline whitespace-nowrap hidden sm:inline-flex items-center gap-1"
|
|
62
|
-
>
|
|
63
|
-
See everything
|
|
64
|
-
<svg viewBox="0 0 12 12" className="w-3 h-3" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden>
|
|
65
|
-
<path d="M3 6h7m0 0L7 3m3 3L7 9" strokeLinecap="round" strokeLinejoin="round" />
|
|
66
|
-
</svg>
|
|
67
|
-
</Link>
|
|
68
|
-
</div>
|
|
69
|
-
<div className="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-3 sm:gap-4">
|
|
70
|
-
{categories.map((c, i) => (
|
|
71
|
-
<Link
|
|
72
|
-
key={c.id}
|
|
73
|
-
href={`/categories/${c.slug}`}
|
|
74
|
-
className="group relative overflow-hidden rounded-2xl bg-card border border-border p-5 hover:border-primary hover:-translate-y-0.5 transition-all"
|
|
75
|
-
>
|
|
76
|
-
<div className="flex items-start justify-between mb-12">
|
|
77
|
-
<div className="grid place-items-center w-10 h-10 rounded-lg bg-primary/10 text-primary">
|
|
78
|
-
{ICONS[c.slug] ?? (
|
|
79
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" className="w-7 h-7" aria-hidden>
|
|
80
|
-
<rect x="3" y="3" width="18" height="18" rx="2" />
|
|
81
|
-
</svg>
|
|
82
|
-
)}
|
|
83
|
-
</div>
|
|
84
|
-
<span className="text-[10px] font-mono text-muted-foreground tabular-nums">
|
|
85
|
-
{String(i + 1).padStart(2, "0")}
|
|
86
|
-
</span>
|
|
87
|
-
</div>
|
|
88
|
-
<p className="text-base font-semibold mb-1 -tracking-[0.015em]">{c.name}</p>
|
|
89
|
-
{c.product_count != null && (
|
|
90
|
-
<p className="text-xs text-muted-foreground">
|
|
91
|
-
{c.product_count} {c.product_count === 1 ? "product" : "products"}
|
|
92
|
-
</p>
|
|
93
|
-
)}
|
|
94
|
-
<span className="absolute right-4 bottom-4 grid place-items-center w-7 h-7 rounded-full bg-foreground text-background opacity-0 group-hover:opacity-100 transition-opacity">
|
|
95
|
-
<svg viewBox="0 0 12 12" className="w-3 h-3" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden>
|
|
96
|
-
<path d="M3 6h7m0 0L7 3m3 3L7 9" strokeLinecap="round" strokeLinejoin="round" />
|
|
97
|
-
</svg>
|
|
98
|
-
</span>
|
|
99
|
-
</Link>
|
|
100
|
-
))}
|
|
101
|
-
</div>
|
|
102
|
-
</section>
|
|
103
|
-
);
|
|
104
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import Link from "next/link";
|
|
2
|
-
import type { Collection, Product } from "@cimplify/sdk";
|
|
3
|
-
import { StoreProductCard } from "./store-product-card";
|
|
4
|
-
|
|
5
|
-
interface CollectionStripProps {
|
|
6
|
-
collection: Collection;
|
|
7
|
-
products: Product[];
|
|
8
|
-
collectionHref?: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Horizontal strip of products under a collection title. Cards come from the
|
|
13
|
-
* SDK so every variant (Food, Bundle, Composite, Service, …) renders
|
|
14
|
-
* correctly; clicks open the shared URL-driven product modal.
|
|
15
|
-
*/
|
|
16
|
-
export function CollectionStrip({ collection, products, collectionHref }: CollectionStripProps) {
|
|
17
|
-
if (products.length === 0) return null;
|
|
18
|
-
return (
|
|
19
|
-
<section className="max-w-7xl mx-auto px-8 pt-12">
|
|
20
|
-
<header className="grid grid-cols-[1fr_auto] items-end gap-4 mb-5">
|
|
21
|
-
<h2 className="font-serif text-[28px] font-semibold m-0">{collection.name}</h2>
|
|
22
|
-
{collectionHref && (
|
|
23
|
-
<Link
|
|
24
|
-
href={collectionHref}
|
|
25
|
-
className="text-[13px] font-semibold text-primary hover:underline"
|
|
26
|
-
>
|
|
27
|
-
See all →
|
|
28
|
-
</Link>
|
|
29
|
-
)}
|
|
30
|
-
{collection.description && (
|
|
31
|
-
<p className="col-span-full m-0 mt-1 text-sm text-muted-foreground">
|
|
32
|
-
{collection.description}
|
|
33
|
-
</p>
|
|
34
|
-
)}
|
|
35
|
-
</header>
|
|
36
|
-
<div className="grid grid-flow-col auto-cols-[minmax(220px,1fr)] gap-4 overflow-x-auto snap-x snap-mandatory pb-2">
|
|
37
|
-
{products.slice(0, 8).map((p) => (
|
|
38
|
-
<div key={p.id} className="snap-start">
|
|
39
|
-
<StoreProductCard product={p} />
|
|
40
|
-
</div>
|
|
41
|
-
))}
|
|
42
|
-
</div>
|
|
43
|
-
</section>
|
|
44
|
-
);
|
|
45
|
-
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import Link from "next/link";
|
|
2
|
-
import Image from "next/image";
|
|
3
|
-
|
|
4
|
-
interface FeatureHeroProps {
|
|
5
|
-
eyebrow: string;
|
|
6
|
-
title: React.ReactNode;
|
|
7
|
-
description: string;
|
|
8
|
-
primaryCta: { label: string; href: string };
|
|
9
|
-
secondaryCta?: { label: string; href: string };
|
|
10
|
-
imageUrl: string;
|
|
11
|
-
imageAlt: string;
|
|
12
|
-
badge?: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Editorial full-bleed fashion hero. Image fills the viewport; copy sits
|
|
17
|
-
* over a dark gradient. Strings come from `brand.hero` at the call site.
|
|
18
|
-
*/
|
|
19
|
-
export function FeatureHero({
|
|
20
|
-
eyebrow,
|
|
21
|
-
title,
|
|
22
|
-
description,
|
|
23
|
-
primaryCta,
|
|
24
|
-
secondaryCta,
|
|
25
|
-
imageUrl,
|
|
26
|
-
imageAlt,
|
|
27
|
-
badge,
|
|
28
|
-
}: FeatureHeroProps) {
|
|
29
|
-
return (
|
|
30
|
-
<section className="relative w-full h-[clamp(560px,80vh,820px)] overflow-hidden bg-foreground text-background">
|
|
31
|
-
<Image
|
|
32
|
-
src={imageUrl}
|
|
33
|
-
alt={imageAlt}
|
|
34
|
-
fill
|
|
35
|
-
sizes="100vw"
|
|
36
|
-
className="object-cover"
|
|
37
|
-
priority
|
|
38
|
-
/>
|
|
39
|
-
<div className="absolute inset-0 bg-gradient-to-t from-foreground via-foreground/40 to-foreground/0 pointer-events-none" />
|
|
40
|
-
<div className="absolute inset-0 flex items-end">
|
|
41
|
-
<div className="w-full max-w-7xl mx-auto px-6 sm:px-10 pb-12 sm:pb-16 lg:pb-20">
|
|
42
|
-
{badge && (
|
|
43
|
-
<span className="inline-flex items-center gap-2 mb-5 px-3 py-1.5 rounded-full bg-background/10 border border-background/30 backdrop-blur-md text-[11px] uppercase tracking-[0.2em] font-medium">
|
|
44
|
-
<span className="w-1.5 h-1.5 rounded-full bg-primary animate-pulse" />
|
|
45
|
-
{badge}
|
|
46
|
-
</span>
|
|
47
|
-
)}
|
|
48
|
-
{eyebrow && (
|
|
49
|
-
<p className="text-[12px] uppercase tracking-[0.3em] text-background/70 mb-3">
|
|
50
|
-
{eyebrow}
|
|
51
|
-
</p>
|
|
52
|
-
)}
|
|
53
|
-
<h1 className="font-display text-[clamp(3.5rem,11vw,9rem)] m-0 mb-4 -tracking-[0.04em] leading-[0.92] uppercase">
|
|
54
|
-
{title}
|
|
55
|
-
</h1>
|
|
56
|
-
<p className="max-w-xl text-base sm:text-lg text-background/85 leading-relaxed mb-8">
|
|
57
|
-
{description}
|
|
58
|
-
</p>
|
|
59
|
-
<div className="flex flex-wrap items-center gap-3">
|
|
60
|
-
<Link
|
|
61
|
-
href={primaryCta.href}
|
|
62
|
-
className="inline-flex items-center gap-2 px-7 py-3.5 bg-background text-foreground font-bold text-sm uppercase tracking-wider hover:bg-primary hover:text-primary-foreground transition-colors"
|
|
63
|
-
>
|
|
64
|
-
{primaryCta.label}
|
|
65
|
-
<svg viewBox="0 0 12 12" className="w-3 h-3" fill="none" stroke="currentColor" strokeWidth="2.5" aria-hidden>
|
|
66
|
-
<path d="M3 6h7m0 0L7 3m3 3L7 9" strokeLinecap="round" strokeLinejoin="round" />
|
|
67
|
-
</svg>
|
|
68
|
-
</Link>
|
|
69
|
-
{secondaryCta && (
|
|
70
|
-
<Link
|
|
71
|
-
href={secondaryCta.href}
|
|
72
|
-
className="inline-flex items-center gap-2 px-7 py-3.5 border border-background/40 text-background hover:bg-background/10 transition-colors text-sm uppercase tracking-wider font-medium"
|
|
73
|
-
>
|
|
74
|
-
{secondaryCta.label}
|
|
75
|
-
</Link>
|
|
76
|
-
)}
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
</div>
|
|
80
|
-
</section>
|
|
81
|
-
);
|
|
82
|
-
}
|