GitHub

Twenty-five checks between you and a broken store.

The harness runs in CI and fails the build when a change breaks a rule the codebase depends on — including the code you add.

One commandRuns in CINo networkNo account
~/your-store
$

A fork does not break the day you change it.

It breaks three weeks later, on a page nobody was looking at, for a reason nobody connects to the change. By then the commit that caused it is buried.

The bug you would have shipped on a Friday.

A mutation without a cache invalidation. A nested read that skips the soft-delete filter. A component rebuilt because nobody knew the first one existed. All caught before merge.

What each group catches25 checks
Cache and freshness
3
Database guarantees
4
Dead code
6
Type and boundary safety
4
Convention discipline
5
Events and tests
3
Every check exists because this codebase already paid for the bug it catches.

Six classes of mistake.

Cache and freshness, database guarantees, dead code, type and boundary safety, convention discipline, and the paths where a bug costs real money.

Cache and freshness50%
Database guarantees67%
Dead code100%
Type and boundary safety67%
Convention discipline83%
Events and tests50%

The baseline can only shrink.

Existing offenders are recorded so the harness never blocks you on day one — and a hygiene check watches the harness itself, so allowlists cannot quietly grow.

Baseline over twelve months

Ratcheted
4left
84 offenders
J
79 offenders
F
71 offenders
M
66 offenders
A
52 offenders
M
48 offenders
J
41 offenders
J
33 offenders
A
25 offenders
S
18 offenders
O
11 offenders
N
4 offenders
D

The rules the checks came from.

Around 2,600 lines across eight guides, dropped into .claude so an agent writes changes that match the conventions already in the codebase.

Claude rules8 guides
Design review
checklist
Code style and UI
enforced
Data and API
enforced
New entity
walkthrough

One command, no network.

It reads the source in your repository. Nothing is uploaded and there is nothing to sign into.

bun run lintPassing
Cache invalidation
pass
Dead code
pass
DB guarantees
pass
Client / server
pass

The codebase is free. Why is this not?

Running Litestore costs nothing. What costs something is the twenty-fifth change to a codebase you did not write, made by someone who was not there for the first twenty-four.

What you are buying

Free

Litestore itself. Clone it, run it on any number of stores, sell with it.

Paid

Keeping a fork correct after twelve months of your own changes.

Not required

It is not needed to run a store. It is needed to change one confidently.

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

Built to stay correct.

0%
Checks passingon every push
0%
New offendersbaseline only shrinks
25Checks

Each its own script

2,600Lines of rules

Across eight guides

1,517Tests

In 151 files

$299One-time

For the whole team

The checks catch a forgotten convention. The guides catch the more expensive mistake: building the wrong thing correctly.

Checks that run on every push

Problems that already exist are recorded so the checks never block you on day one.

$ bun install
$ bun dev

Five commands

No account, no CLI login, and no dashboard in between.

One database

Reviews and orders are in the same database, so a verified-buyer badge is checked against a real order.

Change it without holding your breath.

The harness runs in CI on your own code, and the rule set comes with it.

25 checksOne commandNothing phones home