Three storefronts to build from
Complete shops in Next.js, Nuxt and Astro with Alpine: catalogue, search, basket, Stripe checkout and accounts, already wired to the Elara One API.
Autumn at home
Sort: Price, high to low
Oak desk lamp
£89.00
- SALE
Linen cushion
£29.00£34.00
- 3 for 2
Stoneware mug
£18.00
Walnut tray
£46.00
cp .env.example .env.local
npm ci
npm run dev
# ready on http://localhost:3004
Pick your framework
Same shop, three ways to build it
Each starter is a backend-for-frontend: your server talks to the API, and the browser only talks to your server.
Next.js
Next.js 16.3 · React 19.2
App Router pages with a backend-for-frontend of Route Handlers, served by a small custom server that sees the shopper’s real IP.
~/storefront-react cp .env.example .env.local npm ci npm run devEnvironment
- ELARAONE_ENGINE_URL
- ELARAONE_TENANT_KEY
- ELARAONE_TENANT_SECRET
- Server-rendered catalogue, product and CMS pages with JSON-LD
- Instant search split into lazy chunks: popup, voice and GA4 load on demand
- Strict TypeScript, ESLint, Vitest and Playwright
Public at launchRuns on localhost:3004
Nuxt
Nuxt 3.21 · Vue 3.5
Nuxt server routes as the backend-for-frontend, with the key and secret held in private runtime config.
~/storefront-vue cp .env.example .env npm ci npm run devEnvironment
- NUXT_ENGINE_URL
- NUXT_TENANT_KEY
- NUXT_TENANT_SECRET
- Built on the same stack as our demo store
- Instant search held to 15 KB gzip, checked after every build
- Typed with vue-tsc in strict mode, Vitest and Playwright
Public at launchRuns on localhost:3002
Astro + Alpine
Astro 7 · Alpine.js 3
Every page rendered on the server by Astro, with Alpine.js for the basket, search and checkout. Light enough for any host.
~/storefront-alpine cp .env.example .env npm install npm run devEnvironment
- ELARAONE_ENGINE_URL
- ELARAONE_TENANT_KEY
- ELARAONE_TENANT_SECRET
- Filters, search, sort and pages work before JavaScript loads
- Instant search adds no more than 8 KB gzip
- Lead forms and cookie settings post without JavaScript
Public at launchRuns on localhost:3005
In every starter
A whole shop, not a demo
All three render the same pages from the same API calls, so a customer can browse, search, pay and track an order on day one.
Catalogue and collections
Listings with collection, price and sort filters, and option pickers on every product.
Instant search
Suggestions as you type, facets, synonyms and a full results page.
Basket with promotions
Discount codes, free gifts, “spend £X more” nudges and a tax breakdown.
Stripe card checkout
Stripe’s Payment Element on the store’s own Stripe account, delivery or click and collect.
Customer accounts
Sign in, register, verify email, reset password, order history and an address book.
Guest order tracking
Look up an order by reference and email, with dispatch and tracking links.
CMS pages and lead forms
Every block type rendered, forms with Turnstile spam checks and marketing consent.
Web chat
A chat bubble on every page, answered from your inbox (with the Live chat module).
Consent banner
A first-party consent record, and Google Analytics only after the shopper agrees.
Tests you can run
Vitest unit tests and Playwright end-to-end tests, including against a locked store.
PayPal buttonsNot yet
The API takes PayPal today; the starters do not show PayPal buttons yet.
Built the safe way
Secrets stay on the server
The browser never calls the API directly. Your storefront’s server holds the key and secret, and the shopper only ever sees httpOnly cookies.
Shopper’s browser
- Pages and Alpine, Vue or React
- httpOnly cookies only
Your storefront server
- Holds the key and secret
- Adds the shopper’s IP
- One Idempotency-Key per click
Elara One API
- api.elaraone.app
- Locked to your websites
Refuses to start without the secret
In production, each starter checks for the server secret before it serves a single page.
Fails the build if a secret leaks
npm run check:bundlescans the built files and fails if the key or secret appears in anything a browser can load.Rate limits per shopper
The server passes on each shopper’s IP with the secret, so limits apply to the shopper, not to your whole site.
Tested against a locked store
The Playwright suite can first check that the engine refuses calls without the secret, then run the full shop.
Questions
Starter questions
Something else? Read the developer overview or ask us.
Can I see the source?
Do I have to use a starter?
Can shoppers pay with PayPal?
Where can I host a starter?
Which one should I pick?
Want a look at the code?
Get started and have your store ready for launch day, or book a demo and we will walk your developers through a starter.