START

What is My Store

A platform for running online shops. Someone types a name, and a minute later they have a live storefront, an admin console, and a database of their own.

It is built for many shops on one installation. Each gets its own address, its own catalogue, and its own design — none of them can see each other's data.


What a shop gets

Its own address. acme.my-store.shop from the moment it is created. No DNS change, no deployment, no waiting.

Its own database. Not a shared table with a tenant column — a real, separate MySQL database, created and populated the moment the store is. Isolation is structural rather than something the query layer has to remember.

A storefront that works on both surfaces. One responsive app: an editorial desktop site, and a mobile layout with a bottom tab bar, a full-bleed Discover feed and bottom sheets. Not a scaled-down desktop page.

An admin console for the catalogue, stock, orders, customers and design.


Selling

Products carry a SKU, price, category, colour swatches, a description and a status. Only Live products reach the storefront; Draft and Archived are invisible to customers, including on a direct link.

Stock is tracked per size. XS through XXL each hold their own count, so "sold out in XS" is a real state rather than a guess. The inventory grid adjusts any size in one click, with a low-stock threshold you set and a bulk restock for everything under it.

Orders move through five stages — Placed, Paid, Packed, Shipped, Delivered — advanced one step at a time from the console. Customers see the same progress in friendlier words on their account page.

Checkout reserves stock inside a transaction. If one line in a basket is short, the whole order fails and nothing is decremented. A customer record is created or matched by email as the order is placed.

Customers are grouped into VIP, Returning and New, with lifetime spend, average order value and full order history.


Design

The look of a shop is data, not code. A theme holds nine colour tokens, a display font, the header menu, the home banner and the footer.

Themes are switchable. The console shows them as a gallery of cards, each rendering a live preview of the real storefront in that theme's tokens — you compare designs by looking at them, not by reading names. Activating one restyles the shop on the next page load. Nothing is rebuilt.

Themes are files. Export any theme as a small JSON file and import it into another shop, or hand it to someone else. An imported theme arrives inactive, so bringing one in never changes what customers are seeing.

Themes are hand-writable. The format is documented and validated field by field, so a designer can author one in a text editor without touching the codebase.


Merchandising

Categories are created and renamed by the shop owner. Renaming one rewrites every product that references it, in a single transaction, so the two can never drift. A category with products in it cannot be deleted by accident.

Filters are configurable. Groups can be derived — categories, sizes and colours built from the catalogue itself, so a filter can never offer something no product has — or hand-written, like price bands. Selections combine as AND across groups and OR within one, and a size filter only matches products that actually have that size in stock.


Images

Storage is a separate service. It owns the bucket and hands back an id and a URL; nothing else in the system knows how files are stored. Uploads go straight from the browser, and images are served through a CDN.

A product can carry a single photo or three distinct gallery shots — front, detail, on-model. An empty frame falls back to the main image, and a product with no photography at all shows a labelled placeholder describing the shot it is waiting for, rather than a broken image.


Accounts

Two kinds of people sign in, and they are kept apart.

Staff run the shop. The first account created owns the store and becomes its admin; further users are invited as staff.

Shoppers have accounts of their own — order history, saved addresses, payment methods and notification settings, each belonging to one person. Someone who ordered as a guest and later registers under the same email claims that record, history included.

Both sign in with a password or with Google, and a shopper's session can never open the admin: the two carry different tokens and each is refused by the other's routes.

Sessions are store-scoped: a token issued for one shop is refused by another, so an admin of one store cannot reach another's console by changing a URL.


What is not built yet

Being straight about the edges:

  • No payment processing. Checkout records the order and reserves stock; no money moves.
  • No password reset. A locked-out owner or shopper needs an operator, or a Google account on the same email.
    • Refunds are a button that does nothing in the order drawer.
  • No email. Nothing sends order confirmations or notifications.