[!TIP] Questions or issues? Check our Discord for help.
Ship faster, customize everything. Paper is a new releaseβexpect some rough edgesβbut every component is built with real-world e-commerce in mind. This is a foundation you can actually build on.
The checkout is where most storefronts fall apart. Paper's doesn't.
One codebase, many storefronts. Channel-scoped routing means /us/products and /eu/products can serve different catalogs, prices, and shipping optionsβall from the same deployment.
The hard parts are solved. Adapt the look, keep the logic.
Not an afterthought. Focus management on step transitions, keyboard navigation everywhere, semantic HTML, proper ARIA labels. Everyone deserves to shop.
Built for front-end developers and AI agents. The codebase includes:
AGENTS.md β Architecture overview and quick reference for AI assistants.claude/skills/ for GraphQL workflows, component patterns, variant selection, and moreWhether you're pair-programming with Cursor, Claude, or Copilotβthe codebase is designed to help them help you.
| Feature | Description |
|---|---|
| Checkout | Multi-step flow with guest/auth support, address selector, international forms |
| Cart | Slide-over drawer with real-time updates, quantity editing |
| Product Pages | Multi-attribute variants, image gallery, sticky add-to-cart |
| Product Listings | Category & collection pages with pagination |
| Navigation | Dynamic menus from Saleor, mobile hamburger |
| SEO | Metadata, JSON-LD, Open Graph images |
| Caching | ISR with on-demand revalidation via webhooks |
| Authentication | Login, register, password reset, order history |
| API Resilience | Automatic retries, rate limiting, timeoutsβhandles flaky connections gracefully |
Paper uses Cache Components (Partial Prerendering) for optimal performanceβstatic shells load instantly while dynamic content streams in. Learn more in the Next.js documentation or see .claude/skills/caching-strategy/SKILL.md for project-specific implementation details.
The display-cached, checkout-live model ensures fast browsing with accurate checkout:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ DATA FRESHNESS ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Product Pages Cart / Checkout Payment ββ ββββββββββββββ ββββββββββββββ βββββββ ββ ββ βββββββββββββ βββββββββββββ βββββββββββββ ββ β CACHED ββββββββββΆβ LIVE βββββββββββΆβ LIVE β ββ β 5 min β Add β Always β Pay β Always β ββ βββββββββββββ to βββββββββββββ βββββββββββββ ββ Cart ββ Fast page loads Real-time prices Saleor validates ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Component | Freshness | Why |
|---|---|---|
| Product pages | Cached (5 min TTL) | Instant loads, great Core Web Vitals |
| Category/Collection | Cached (5 min TTL) | Fast browsing experience |
| Cart drawer | Always live | Saleor API with cache: "no-cache" |
| Checkout | Always live | Direct API calls, real-time totals |
Configure Saleor webhooks to invalidate cache immediately when data changes:
https://your-store.com/api/revalidatePRODUCT_UPDATED, CATEGORY_UPDATED, etc.SALEOR_WEBHOOK_SECRET env varWithout webhooks? TTL handles itβcached data expires naturally after 5 minutes.
checkoutLinesAdd calculates prices server-sidecheckoutComplete uses real-time dataπ Deep dive: See
.claude/skills/caching-strategy/SKILL.mdfor the full architecture, Cache Components (PPR), webhook setup, and debugging guide.
Option A: Free Saleor Cloud account (recommended)
Option B: Run locally with Docker
# Using Saleor CLI (recommended)npm i -g @saleor/cli@latestsaleor storefront create --url https://{YOUR_INSTANCE}/graphql/# Or manuallygit clone https://github.com/saleor/storefront.gitcd storefrontcp .env.example .envpnpm install
Edit .env with your Saleor instance details:
NEXT_PUBLIC_SALEOR_API_URL=https://your-instance.saleor.cloud/graphql/NEXT_PUBLIC_DEFAULT_CHANNEL=default-channel # Your Saleor channel slug
Finding your channel slug: In Saleor Dashboard β Configuration β Channels β copy the slug
pnpm dev
Open localhost:3000. That's it.
pnpm dev # Start dev serverpnpm build # Production buildpnpm run generate # Regenerate GraphQL types (storefront)pnpm run generate:checkout # Regenerate GraphQL types (checkout)
src/βββ app/ # Next.js App Routerβ βββ [channel]/ # Channel-scoped routesβ βββ checkout/ # Checkout pagesβββ checkout/ # Checkout components & logicβββ graphql/ # GraphQL queriesβββ gql/ # Generated types (don't edit)βββ ui/components/ # UI componentsβ βββ pdp/ # Product detail pageβ βββ plp/ # Product listing pageβ βββ cart/ # Cart drawerβ βββ ui/ # Primitives (Button, Badge, etc.)βββ styles/brand.css # Design tokens
If you're working with AI coding assistants, point them to:
AGENTS.md β Architecture, commands, gotchas.claude/skills/ β Task-specific guides (GraphQL, components, checkout, etc.)# RequiredNEXT_PUBLIC_SALEOR_API_URL=https://your-instance.saleor.cloud/graphql/# OptionalNEXT_PUBLIC_STOREFRONT_URL= # For canonical URLs and OG imagesREVALIDATE_SECRET= # Manual cache invalidationSALEOR_WEBHOOK_SECRET= # Webhook HMAC verificationSALEOR_APP_TOKEN= # For channels query
The checkout architecture supports Saleor payment apps like Adyen and Stripe. The heavy lifting is doneβintegrating your gateway requires minimal work compared to building from scratch.
Paper works as a reference implementation and as a starting point for your own storefront. Start here:
src/styles/brand.csssrc/ui/components/src/checkout/views/SaleorCheckout/The design token system uses CSS custom propertiesβswap the entire color palette by editing a few lines.
Features planned for future development:
FSL-1.1-ALv2 (Functional Source License, Version 1.1, ALv2 Future License) β use it, modify it, ship it. Build your storefront, run your business. The license converts to Apache 2.0 after two years.
Want to offer it as a managed service? Let's talk.