Skip to main content
Web Wizard Dev
All projects

Client project · Regulated e-commerce

Regulated E-Commerce with Weight-Based Inventory

Launched a store for a regulated brand where every pack size sells from one shared stock count and the owner runs orders, promotions and reporting from one dashboard.

Client
Gas Lit Legacy
Industry
Regulated e-commerce
Timeline
Jul 2025 to present
Year
2025
Platforms
Web
Gas Lit Legacy homepage after the 2026 redesign, with the fall collection hero and featured flower

Results at a glance

97% less datafor the photos on the flower catalog page on a phone (80.9 MB to 2.5 MB)
0.871 to 0layout shift on catalog pages: they no longer jump while loading
100Lighthouse SEO and best practices on 4 key pages of the live store (mobile, Oct 2026)

The challenge

Baseline · flower catalog page, phone80.9 MBof product photos to scroll the page, before the fix

  1. Offering checkout that works for a regulated product category once card payments were no longer an option
  2. Selling one product in up to 6 pack sizes, from 3.5 g to 112 g, from a single shared stock pool without overselling
  3. Letting the owner edit products, prices and stock without developer help
  4. Running promotions and ad campaigns in a category where platform advertising is restricted
  5. Keeping product pages discoverable in search, even when items sell out
  6. Hardening checkout and the admin area after a security audit
  7. Keeping a photo-heavy catalog light on phones when product photos are uploaded straight from a camera

About the project

Gas Lit Legacy sells cannabis flower, vapes, edibles, concentrates and merch online. We built its store on Next.js with a headless Contentful catalog the owner edits without a developer, filterable by category, effect and strain. Checkout runs on Cash App, Venmo, PayPal and Zelle, with the owner confirming each payment. Customers get accounts with order history and tracking; the owner gets an admin console for orders, customers and promotions, plus a reporting dashboard. The store has been live since July 2025 and was relaunched on a new brand design system in 2026. In October 2026 an audit-and-fix pass covered security, speed, accessibility and search, and cut the photo data of a catalog page on a phone by 97%.

Scope

  • Headless storefront
  • Payment-app checkout
  • Weight-based inventory
  • Promo code engine
  • Admin & reporting
  • Image performance
  • Accessibility
  • Security hardening
  • Technical SEO
  • 2026 brand redesign

What it does

  • A catalog the owner edits

    Products, sizes, prices, photos and stock live in Contentful, so the owner changes them without a developer. Shoppers filter by category, effect and strain, every listing links every product, and sold-out products stay visible (and indexable) but can't be bought. A size typed without a name or a price is held back from sale, and the admin pages list it with a link to fix it.

  • Payment-app checkout

    Customers pay by Cash App, Venmo, PayPal or Zelle. The order is saved first, and the owner marks it paid once the money arrives. The cart shows the price the order will be charged, the submit button locks while the order is sent, and the server refuses the same order again within 5 minutes.

  • Weight-based inventory

    Each product has one stock count in grams (or units). Buying a pack subtracts its weight, from 3.5 g to 112 g; a cancelled or deleted order puts it back; and the server checks the stock before it takes an order.

  • Promotions

    Percentage or flat discount codes with date windows and usage caps, and shareable ad links on a promo subdomain that apply the code automatically at checkout.

  • Customer accounts

    Customers get order history and order tracking, and the cart suggests products to rebuy.

  • Admin and reporting

    The owner manages orders, tracking numbers, customers and promo codes, and a Reports page shows revenue, payment split, product breakdown and promo performance by week, month, quarter or year, with comparisons to the previous period.

  • Light on phones

    Every product photo is fetched resized for the screen it is shown on, never as the camera upload, and a product page asks for its main photo first. The flower catalog went from 80.9 MB to 2.5 MB of photos on a phone.

  • Found in search

    Product, Offer, Breadcrumb, ItemList, FAQ and Store structured data, canonical URLs, a sitemap that follows the catalog without a deploy, a share picture on every page, and a web app manifest.

Our approach

  1. Built checkout around Cash App, Venmo, PayPal and Zelle: the order is saved first, the owner marks it paid once the money arrives, the submit button locks while the order is sent, and the server refuses the same order again within 5 minutes

  2. Designed weight-based inventory: every pack draws its weight from one shared pool per product, cancellations and deletions restore it, and the server checks the stock before it takes an order

  3. Moved the catalog to Contentful so the owner edits products, prices and stock without a developer, and made the site hold back any size typed without a name or price and list it in the admin

  4. Built a promo engine with percentage or flat discounts, date windows and usage caps, plus shareable ad links on a promo subdomain that apply the code automatically

  5. Added Product, Offer, Breadcrumb, ItemList, FAQ and Store structured data and a sitemap that follows the catalog, and kept sold-out pages visible and indexable while blocking their purchase

  6. Ran 2 security audits and hardened the store: prices recalculated on the server, admin pages and actions checked on the server, every request's input checked against a schema, order records written only by the server, each customer's orders and profile readable only by that customer, security headers and a content security policy, and a security test suite

  7. Made every photo request a resized one (at most 2000 px wide), sized each photo for the screen it is shown on, and shrank the 250 oversized uploads already in the catalog

Inside the project

Select a screenshot to view it full size.

The outcome

  • Live since July 2025, taking orders through 4 payment apps with no card processor
  • Catalog pages download 97% less photo data: the flower catalog went from 80.9 MB to 2.5 MB of photos on a phone, and a product page from 1,364 KB to 405 KB
  • Catalog pages no longer jump while they load: their layout shift went from 0.871 to 0 on the live store
  • Shrank 250 oversized catalog photos from 844 MB to 100 MB in all (88% smaller), checked by eye, so editors can keep uploading straight from a camera
  • Screen readers can name every button, select and link on 8 key pages: 72 unnamed or mislabeled controls fixed, and none left in a scan of the live store
  • 100 Lighthouse SEO and best practices and 96 accessibility on 4 key pages of the live store (mobile, Oct 2026), with rich product data for search engines
  • Stock is counted in grams across every pack size, and checked on the server before an order is taken
  • An admin console and reporting dashboard where the owner runs orders, promotions and customers, and compares revenue period over period
  • 717 unit tests and 67 end-to-end tests run on every code change before it merges
  • Maintained since July 2025, including a full brand redesign in 2026 and an audit-and-fix pass in October 2026

Built with

Have a project like this in mind?

Tell us what you're building. We'll show you how we'd approach it and what it would take, the same way we did for Gas Lit Legacy.