cimplify
CLI

cimplify init

Scaffold a working Next.js App Router storefront from one of seven industry templates. After `bun install`, `bun dev` boots the local mock API alongside Next, and you have a real shop in 60 seconds.

Usage

cimplify init [dir] [-t <template>]

# Pick a target directory and template
cimplify init my-store -t retail
cimplify init bakery-shop --template bakery

Arguments & flags

FlagDescription
[dir]Target directory. Must be empty or non-existent. Defaults to my-storefront.
--template <name>, -tOne of bakery (default), restaurant, retail, services, grocery, fashion, pharmacy.

Templates

TemplateBest forIndustry-specific routes
bakeryWarm food storefront with product modal.
restaurantMenu-driven, with reservations./reservations
retailVariant-aware retail shop./products/[slug] with full PDP
servicesBookable services with calendar./book
groceryHigh-SKU grocery with quick-add.
fashionEditorial multi-drop fashion./lookbook, /size-guide
pharmacyLicensed pharmacy with prescription uploads + pharmacist consults.Prescription-input fields on PDP

What ships

Every template is a Next.js 16 App Router project with the same architectural shape. Server Components are cached via Next 16 ISR (export const revalidate per page + cacheOptions: { revalidate, tags } on SDK reads); cart, checkout, and orders are client islands.

Directory structure (retail)
my-store/
├── app/
│   ├── layout.tsx              Root layout, JSON-LD, providers
│   ├── page.tsx                Home (Server Component, cached)
│   ├── globals.css             Tailwind v4 + @theme tokens
│   ├── error.tsx, not-found.tsx
│   ├── shop/page.tsx           CataloguePage
│   ├── products/[slug]/page.tsx ProductPage with JSON-LD
│   ├── search/page.tsx         SearchPage
│   ├── cart/page.tsx           CartPage
│   ├── checkout/page.tsx       CheckoutPage
│   ├── orders/[id]/page.tsx    Order confirmation
│   ├── account/                SDK-rendered account pages
│   ├── collections/[slug]/
│   ├── categories/[slug]/
│   ├── about, faq, contact, track-order
│   ├── shipping, returns, accessibility, terms, privacy
│   ├── sitemap.ts, robots.ts, llms.txt/route.ts
│   └── opensearch.xml/route.ts
├── components/
│   ├── providers.tsx           CimplifyProvider + CartDrawerProvider
│   ├── header.tsx, footer.tsx
│   ├── cart-pill.tsx, cart-drawer.tsx
│   ├── store-product-card.tsx
│   ├── account-pages.tsx
│   └── policy-page.tsx
├── lib/
│   ├── brand.ts                ⭐ Single source of truth for content
│   └── cart.ts
├── __tests__/
│   ├── brand.test.ts           assertBrand(brand) + placeholder check
│   ├── cart-flow.test.ts       Add → dedupe → remove against the mock
│   └── contract.test.ts        Validates outbound + inbound shapes
├── .env.example                NEXT_PUBLIC_CIMPLIFY_* placeholders
├── next.config.ts              cacheComponents off, ISR Previous Model
├── postcss.config.mjs
├── tsconfig.json
├── vitest.config.ts
└── package.json                bun dev / build / check / check:cart / ...

After init

cd my-store
bun dev          # boots the mock API on :8787 + Next on :3000
# open http://localhost:3000

Rebrand checklist

Every visible string flows from lib/brand.ts, every visible color from app/globals.css's @theme block. Do not edit pages or components for content changes.

FileEdits for
lib/brand.tsName, contact, hero, header nav, FAQ, policy bodies, account copy.
app/globals.css @themePalette, radius, fonts.
.env.localNEXT_PUBLIC_CIMPLIFY_PUBLIC_KEY (required). NEXT_PUBLIC_SITE_URL is optional; only set it to override the canonical URL the storefront derives from the request Host.
app/layout.tsx(Optional) next/font/google swap.

Test scripts

ScriptRunsTime
bun run check:brandassertBrand(brand) + placeholder detector.<2s
bun run check:cartAdd / dedupe / remove against the in-process mock.~5s
bun run check:contractZod-validates outbound and inbound shapes.~3s
bun run checktypecheck + lint + all suites.~15s

Where next

On this page