GitHub

Ten arguments for the same product.

Each variant takes one angle, aims it at one audience, and proves it with store data rather than adjectives.

Ten landings.

The product does not change. What changes is which part of it you lead with.

localhost:3000/admin

Live
Home

Start · what needs clearing today

Customers

4.8k+212

Cash collected

$18.4k+12%

Orders placed

312+48

Avg order

$59+$4

Needs attention

3 to clear
9d

Review fulfilment

Paid orders awaiting fulfilment — oldest 9d.

Ask AI
4d

Draft replies

Customers awaiting a reply — oldest 4d.

Ask AI
4d

Create recovery offer

Carts with items, idle — oldest 4d.

Ask AI

Trends

Live
$18.4k

Revenue

312

Orders

$59

AOV

Revenue by default — overlay orders, customers, or average order value.

Recent activity

Audit log
PS
Priya published Sunset Linen Shirt
Products · 12m ago
Sys
Payment captured for order #1042
Payments · 24m ago
MO
Maya approved 18 AI descriptions
Content · 1h ago
Sys
Stock movement recorded · −3 units
Inventory · 1h ago

Every change recorded, with the person who made it.

All caught up

Discovery

Nothing is waiting. Litestore suggests what to do next instead of showing an empty screen.

Improve AOV

What ships with it.

29

kinds of task the store spots for you

10

block types to build any page from

5 min

and the storefront reorders itself

1,517

tests keeping the money right

70

tables, all yours to query

1

database — nothing to sync

Five commands and it runs.

Five commands. No account, no CLI login, no dashboard in between.

~/litestore

$git clone https://github.com/litestore/litestore

$bun install

$cp .env.example .env.local

$bun run db:push && bun run db:seed

$bun run dev

✓ storefront http://localhost:3000

✓ admin http://localhost:3000/admin

$ _

What it needs
  • Node 20+ and Bun
  • PostgreSQL 15+
  • Redis (or Upstash)
  • S3-compatible storage
  • Resend for email and sign-in
  • Stripe when you turn on checkout

Four screens you will spend the day in.

Orders

24 to fulfil
Paid

Maya Okonkwo · 3 items

$182.40
Packing

Leo Martins · 1 item

$96.00
Shipped

Priya Shah · 5 items

$248.10
Paid

Dana Feld · 2 items

$74.00

Twenty-nine kinds of task. Ship the order and the task disappears.

Orders come in with the work attached

The badge says 24 to fulfil and the list beneath it has 24 rows. Ship one and both drop to 23.

AI content

18 in review

Sunset Linen Shirt

Drafted

Ceramic Pour-Over Set

Drafted

Canvas Weekender Bag

Queued
Descriptions74%
SEO fields52%
Alt text68%

AI writes the drafts, you approve them

It fills in descriptions, SEO fields and alt text. Nothing reaches the storefront until someone says yes.

Product page

5 modules
gallery
details
cart
content-tabsMovable
relatedMovable

Drag them into a new order. No theme file, no deploy.

A page is a list of sections

Reorder them in the admin and the storefront follows. No theme file to edit and nothing to deploy.

Cart recovery

Running

312 carts idle

$9.4k at stake · oldest 4d

SUMMER10
18%

Recovered

$59

AOV

$6.2k

Revenue

Waits three days, then emails them the code once.

The follow-up sends itself

Three days after a cart goes quiet, one email leaves with a code. It sends once, even if you deploy in between.

Two screens you use daily.

The product editor and the order view.

Sunset Linen Shirt

Draft
1

Blue linen shirt, short sleeve

old
2

Breathable European linen, cut for hot days

AI

Variants

4

In stock

128

SEO score

92

Copy, SEO, and alt text drafted · publish when you approve.

AI writes the listing, you approve it

Point Litestore at a product and it drafts the description, SEO fields, and alt text in your brand voice. Every draft lands in review — nothing goes live on its own.

Order #1042

Paid

Maya Okonkwo · returning

Checkout completed in 41 seconds

Fulfill
Payment

Captured via Stripe

Stock

Reserved across 2 locations

Email

Receipt and tracking sent

Total

$182.40

Items

3

Ship

Express

Ready to ship · payment, stock, and address all check out.

Checkout to fulfillment, end to end

Cart, payment, inventory, receipts, and shipping all live in the same app and the same database. No middleware, no per-order platform cut.

Add what you need.

Write it into the same codebase. The compiler checks it fits.

lib/rules/workflows.ts

Durable
{
  event: "cart.abandoned",
  name: "recover-abandoned-cart",
  run: async (payload, step) => {
    await step.sleep("settle", "3d")

    await step.run("send-offer", () =>
      queueEmail({ template: "cart-recovery", to: payload.email })
    )
  },
}

A full cart-recovery flow. The three-day wait survives restarts and deploys, and the email is sent once.

01

Event workflows

React to any domain event in one entry

02

Storefront blocks

Add a block type the compiler then demands you finish

03

Product page modules

Place your own module into a PDP section

04

Admin modules

Inherit list, detail, mutations, activity, and permissions

Plus payment providers, outbound webhooks, swappable services, and checks that fail the build when an extension is wrong.

How extensibility works

These are seams inside your own copy of the code. There is no versioned plugin API.

See how it compares.

Including where the other one is a better fit.

See all comparisons