Skip to main content

Forking the Starter

The recommended approach is to fork the repository so you can customize freely while pulling upstream updates.

1. Fork on GitHub

Go to github.com/spree/storefront and click Fork.

2. Clone Your Fork

3. Add Upstream Remote

4. Pull Upstream Updates

When the official starter gets updates, pull them into your fork:
Resolve any conflicts in your customized files, then commit.

Styling

The storefront uses Tailwind CSS 4, which replaces the traditional tailwind.config.ts with CSS-native configuration via the @theme directive in src/app/globals.css.

Theme Customization

Edit the @theme inline block in src/app/globals.css to change colors, fonts, and other design tokens:
Variables defined in @theme inline become Tailwind utilities automatically — for example, --color-primary-500 maps to bg-primary-500, text-primary-500, etc.

Components

All components live in src/components/ and can be customized or replaced:
Components use standard React patterns — modify them directly or replace them entirely with your own implementations.

Data Layer

To customize API behavior, modify the server actions in src/lib/data/. Each file handles a specific domain: These server actions call @spree/sdk directly, using helpers in src/lib/spree/ for auth cookies and locale resolution. You can add custom logic, caching strategies, or additional transformations as needed.

Adding New Pages

Follow the existing App Router pattern with localized routes. Place pages under the (storefront) route group to inherit the shared header/footer layout:

Transactional Emails

Customer-facing emails are rendered in the storefront using react-email and sent via Resend. The Spree backend delivers order/shipment/password events to the storefront via webhooks.

Templates

Email templates are React components in src/lib/emails/: Customize templates by editing these files directly. They use @react-email/components for email-safe layout primitives.

Previewing

Opens the react-email dev server with mock data for all templates at http://localhost:3000.

Webhook Handler

The webhook route (src/app/api/webhooks/spree/route.ts) uses createWebhookHandler from src/lib/spree/webhooks:
To add a new email type:
  1. Create a template in src/lib/emails/
  2. Add a handler function in src/lib/webhooks/handlers.ts
  3. Register the event in route.ts
  4. Subscribe to the event in Spree Admin → Webhooks

Local Development

In dev, emails are written to .next/emails/ as HTML files — no Resend key needed. Use Cloudflare Tunnel to receive webhooks locally:
For full setup details, see Sending out Emails.

Building a Custom Storefront

If you prefer to build from scratch instead of forking the starter, you can use the @spree/sdk package directly in any Next.js application. The storefront’s src/lib/spree/ directory contains reusable helpers for cookie-based auth, locale resolution, middleware, and webhook verification that you can copy into your own project.