A small, content-first storefront template built with Astro and Strapi
It's designed as an example you can copy from, or fork the repo you, customize and deploy
This repo contains a minimal set of pages and components you can reuse:
- /blog — article index and list
- /about — pages and nested pages
- / — home page showing store info and product listing
- /receipt — buyer confirmation page (renders session or payload)
- /newsletter — newsletter landing and subscribe form
The checkout flow in this template is intentionally minimal:
- the product UI opens a checkout modal (client side) that redirects to a payment link
- The receipt page decodes a receipt payload or resolves a Stripe session via your backend
Prerequisites: Node.js (16+), npm or pnpm
- Fork or clone this repository.
- Install dependencies:
npm install- Copy environment variables (example in
.envor your hosting configuration):
PUBLIC_STRAPI_URL=https://api.markket.place # Markket - strapi API
PUBLIC_STORE_SLUG=sell # slug identifier from markket
PUBLIC_POSTHOG_KEY= # Optional analytics key
PUBLIC_URL= # deployment url for canonical and sitemap- Run the dev server:
npm run devOpen http://localhost:3000 and browse the routes above.
-
/ (home)
- Shows store metadata and product listings. Product cards provide a checkout modal or direct-to-payment link.
-
/blog
- Content-driven article index and single article pages powered by Astro content collections.
-
/about
- Simple content pages, supports nested pages.
-
/receipt
- Buyer confirmation page. The client script will either:
- Parse a receipt payload from the URL (?receipt= encoded JSON or ?payload= base64), or
- Resolve a Stripe session by POSTing { action: 'stripe.receipt', session_id } to your backend (configured via PUBLIC_STRAPI_URL or markket.config).
- The page renders amounts, customer info, shipping (if present), and items.
- Buyer confirmation page. The client script will either:
-
/newsletter
- Newsletter landing and a SubscribeForm component (React) that posts to
/api/subscribers.
- Newsletter landing and a SubscribeForm component (React) that posts to
-
Checkout modal: the front-end reads a product's metadata and redirects the buyer to a payment link
-
Receipt resolving: After checkout, markket redirects back to
/receipt?session_id=...
We welcome contributions. A few tips:
- Keep changes small and focused
- Update README and comment code where behaviors are non-obvious
- Implement additional Markket features
- Abstract components
TSL