Kaya Goods
A shop: products, variants, cart and Stripe checkout.
- Surfaces
- web, admin
- Architecture
- triple
$10 buys this one repository, permanently. Checkout asks for your GitHub username and the invitation arrives within a minute.
What it looks like

A product, with its colour and size variants.

The catalogue, filtered and searched.

The seller's dashboard: takings, orders to ship, low stock.
Screenshots of the running application, with its demo data. Nothing here is a mock-up.
{ What you open it for }
The parts that are actually hard.
Every application shows how to build an application, and that sentence helps nobody choose. These are the specific problems this one has already solved.
Product variants, and the option matrix that generates them
A cart that survives sign-in, and a checkout that survives a retry
Stripe webhooks that are idempotent when Stripe redelivers
{ Run it }
Seven commands, then it is running.
No Docker and no database server. Every blueprint runs on SQLite with files on local disk, so the only thing between a clone and a working application is pnpm install.
What you need first
- Go 1.21 or newer
- Node 20 or newer
- pnpm 10.33.4
- The Grit CLI, 3.312.0 or newer (grit update)
- Stripe test keys, free from the Stripe dashboard, to take a payment
- No Docker: SQLite, local disk, no Redis
What each one does
git clone git@github.com:MUKE-coder/grit-storefront.git && cd grit-storefront
Private. Accept the GitHub invitation first: it arrives within a minute of paying.
grit env
Writes .env from .env.example with every secret freshly generated.
pnpm install
The monorepo: API, the shop and the seller dashboard.
grit migrate
Creates the SQLite database and every table.
grit seed
The admin account.
cd apps/api && go run ./cmd/demo && cd ../..
The shop itself: 3 categories, 12 products with photographs, a month of orders and reviews.
grit start
API on 8080, the shop on 3000, the seller dashboard on 3001.
Then open
http://localhost:3000
amara@demo.example.com / admin123
Browse, add to the basket and look at her past orders. Or make your own account.
http://localhost:3001
admin@example.com / admin123
The seller: products and their variant matrix, orders to ship, low stock and takings.
Worth knowing
Taking a payment
Checkout needs Stripe test keys. Card 4242 4242 4242 4242, any future date, any CVC. Without the Stripe CLI listening, the return page still settles the order: it asks the API, which asks Stripe.
# .env STRIPE_SECRET_KEY=sk_test_... STRIPE_WEBHOOK_SECRET=whsec_... # apps/web/.env.local NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...
Where the stock is taken
When the payment succeeds, never at checkout, with a conditional update so the last one cannot be sold twice. An order that could not take its stock is flagged for the seller instead of failing quietly.
{ Access }
One of them, or every one of them.
$10 buys a single blueprint and keeps it. A membership covers all of them, including the ones that are still on the list, for as long as it runs.
Permanent access to this repository. No renewal, nothing to cancel.
Membership
$20a month
Every blueprint, including the ones added while you are a member.
Membership, yearly
Two months free$200a year
The same thing for the price of ten months.
Lifetime
$400once
Every blueprint there is, and every one there will be. Nothing to renew.
- Or $10 for a single blueprint, kept permanently.
- The invitation reaches your GitHub account within a minute.
- A membership covers every blueprint added while it runs.
- Cancel whenever. What you have already cloned stays yours.
{ Also built }
