NANO//CART github →

OPEN-SOURCE · MIT · v1.0.0 · COMING SOON

The catalogue
system your
static site
has been waiting for.

~4,500 LOC · ~350KB deployed · PHP 8.1+ · MIT

~4,500
lines of code
~350 KB
deployed
0
database engines
0
cart backends

// what it is

Products as files on disk. Checkout handled by your processor of choice.

Nano Cart solves a specific problem: small businesses that want a beautifully-presented product catalogue on their static site, but don't need a full e-commerce platform. 20-50 products is the sweet spot. Scales to 150+ if needed.

It is deliberately not a general-purpose shop. Single-purchase only. No variants. No quantity selectors. No inventory tracking. No cart aggregation. Each product links to one external checkout URL — Stripe Payment Link, PayPal hosted button, Square checkout, Gumroad, Ko-fi, anything that produces a URL. If you sell t-shirts in five sizes and twelve colours, Nano Cart isn't for you. If you sell hand-thrown pottery, books, prints, services, or anything else where each product is bought one at a time at a fixed price, this is for you.

// how it works

Two codebases. One on-disk format.

// 01
permanent

Frontend

Lives inside the client's webroot at /shop/. Renders product pages, category grids, the homepage. Outputs full SEO metadata including JSON-LD Product schema on every URL. Once it's there it never needs touching.

// 02
portable / ephemeral

Admin

A universal folder, identical for every site. Upload it via SFTP when you manage products. Configure your shop. Remove the folder when done. No persistent admin = drastically reduced attack surface.

// 03
outside webroot

Config

Password hash, licence key and shop settings live in a JSON file outside the document root, structurally unreachable via HTTP. Backup is rsync /products/ /media/ /config.json. That's the entire shop state.

/public_html/shop/                  // permanent
 ├── products/    JSON files (the "database")
 ├── categories/  Category metadata
 ├── media/       Uploaded product images
 ├── core.php     Parser, renderer, ~600 lines
 ├── index.php    Homepage with featured products
 ├── product.php  Single product page
 ├── category.php Category browsing
 └── template.php Per-site HTML wrapper

/shop-config/                       // OUTSIDE webroot
 ├── config.json     Password, licence key, shop mode
 └── rate-limit.json Login attempt tracking

/public_html/shop/admin/            // ephemeral
 Uploaded via SFTP to manage products, removed after.

// modes

Two modes. Same product. One config flag.

// mode
checkout

Sell directly

Each product gets a checkout_url pointing to your processor of choice. Nano Cart renders its own styled buy button linking to external checkout — Stripe, PayPal, Square, Gumroad, Lemon Squeezy, Ko-fi, Bandcamp, anything that produces a URL. No payment processing on your server. No PCI compliance to worry about. No customer data stored. Set shop_mode: 'checkout' in config. Done.

// mode
catalogue

Showcase + enquire

For businesses where products are sold through enquiry rather than direct purchase. Galleries. Consultancies with service packages. B2B suppliers. Restaurants with menus. Property listings. Pre-launch products. The buy button is replaced with a configurable enquiry action — a mailto link with the product name pre-filled, or a URL to your contact form, Calendly, or WhatsApp. Set shop_mode: 'catalogue' in config.

// features

Everything a small blog needs.
Nothing it doesn't.

Flat-file by design

Product JSON files with frontmatter. No SQLite, no MySQL. Backups are an rsync.

Clean URLs

/shop/<category>/<slug>/ via .htaccess. No ?product_id=42 nonsense, ever.

Image manager

Drag-drop upload, multi-image per product, drag-to-reorder galleries, alt text editing. Thumbnails generated on upload.

Featured products

Curated homepage with featured product slots. You choose what leads — no algorithmic noise.

Mobile-first templates

Designed for 375px from the ground up. Product pages, category grids and homepage all work beautifully before scaling up.

Processor agnostic

Stripe Payment Links, PayPal hosted checkout, Square, Gumroad, Lemon Squeezy, Ko-fi — any URL works. Switch processors without rebuilding.

HTTPS-only admin

HTTPS enforced. CSRF on every POST. bcrypt password hash. Rate-limited login. Sessions invalidated on password change.

Image safety pipeline

Uploads decoded and re-encoded through GD or Imagick. Strips embedded payloads and EXIF data on upload.

Removable admin

Sole-developer-friendly. Upload, configure, remove. Nothing for an attacker to find when you're not actively managing.

// seo output

Technical SEO most shop platforms need three plugins for.

  • Custom <title> + meta description from product frontmatter
  • Canonical URL on every page
  • Open Graph tags (Facebook, LinkedIn)
  • Twitter Card tags
  • JSON-LD Product schema (price, availability, image, brand)
  • JSON-LD BreadcrumbList schema
  • Semantic HTML5 (<article>, <figure>, breadcrumb)
  • loading="lazy" + descriptive alt on every product image
  • WebP / AVIF with JPEG fallback via <picture>
  • XML sitemap, regenerated on save
  • Clean URLs end-to-end via mod_rewrite

// install

Five minutes,
one setup wizard.

  1. Upload the frontend zip to /public_html/shop/ on your client's host.
  2. Edit bootstrap.php with the path to your config directory (sample provided).
  3. Upload the admin zip to /public_html/shop/admin/.
  4. Visit https://yoursite.com/shop/admin/setup.php. Set a password. The wizard writes config.json and goes away.
  5. Configure. Choose checkout or catalogue mode. Add products. Drop the admin folder when done. Your shop stays live.

// backup is one cron line: rsync -az clientsite:/shop/products/ /backups/clientname/ — the whole shop state is files.

// comparison

Why not WooCommerce, Shopify,
or OpenCart?

Those are excellent for sites that need them. For a small static HTML client site that needs a catalogue with external checkout, they aren't.

WooCommerce

~600K lines (wp+woo)

  • Requires WordPress + MySQL
  • Plugin maintenance treadmill
  • Massive attack surface
  • Converts static site to database app

Shopify

SaaS platform

  • Monthly fees per shop
  • Platform lock-in
  • Limited template flexibility
  • Migration is rebuilding

OpenCart

~250K lines

  • Database required
  • Aging extension ecosystem
  • Security track record is poor
  • Heavy for small catalogues

NANO//CART

~4.5K lines

  • Drop-in onto existing static sites
  • No database, no cart backend, no build
  • Removable admin = minimal surface
  • External checkout = no PCI worry

// who it's for

Small shops. Makers. Galleries. Not retailers.

Nano Cart assumes operators are fluent with file editing and comfortable with SFTP. It is not aimed at non-technical end users. For those, Shopify is genuinely the right answer.

If you build static sites for clients selling 20-50 products at fixed prices, or running enquiry-based businesses, or hosting curated catalogues, this is for you. Designed for: potters, authors, musicians, jewellery makers, small presses, food producers, consultants with service packages, galleries, B2B suppliers, restaurants, property listings, pre-launch shops. Not for: variant-heavy retail (size/colour matrices), inventory-tracked stock, marketplaces, anyone needing tax engines or shipping rules, shops past 150+ SKUs.

// licence

Remove the footer attribution.

Nano Cart is free under MIT. It ships with a small Powered by Nano Cart — Developed by Digital Fracture footer on the pages it renders. For commercial work, agency client deliverables, or simply a cleaner footer, purchase a perpetual per-domain licence.

Single domain

£29 one-time

  • One licensed domain
  • Footer attribution removed
  • Perpetual — never expires
  • Ed25519 cryptographic verification
  • Localhost / dev domains free

Agency 5-pack

£99 one-time

  • Five licensed domains
  • ~£20 per site
  • Manage client portfolio cleanly
  • Perpetual — never expires
  • Best for small studios

Agency unlimited

£249 one-time

  • Unlimited domains, one agency
  • All current + future client projects
  • Perpetual — never expires
  • Best value for active studios

// licences are signed with Ed25519 and verified locally — no phone-home, no telemetry, no servers to maintain. Your shop verifies the licence on every page render against the embedded Digital Fracture public key. Lose the licence file? Re-issue is free.

Like it? Help keep it going.

Nano Cart is solo-developed and MIT-licensed. If it saved you from installing WooCommerce on a small client shop, a coffee covers a lot of late-night debugging.