A headless ecommerce platform that replaced Shopify across a growing cannabis franchise, from catalog to checkout to courier
Client
Kindling Cannabis
Year
2026
Industry
Cannabis Retail
Services
Engineering, Architecture, CMS, Mobile App
Visit
shopkindling.ca







Kindling Cannabis — from Shopify to a headless platform built for multi-location retail
Kindling had outgrown Shopify. Expensive apps, siloed integrations, and a customer experience that got worse with every new location.
We built four applications: a Next.js storefront, an AdonisJS API hub, an internal data center dashboard, and a React Native courier app. The hub owns every integration (COVA POS, Leafly, Moneris, CIGO, Klaviyo, Meilisearch) so catalog, checkout, delivery and content all talk to each other through a single layer.
The storefront loads in under half a second. Lighthouse performance hit 94, SEO scored 100. The Storyblok CMS gives the content team full editorial control with components that know about products, inventory and location.
94
Lighthouse performance score at launch
100
Lighthouse SEO score
<0.5s
First contentful paint across the storefront
4
Applications: storefront, API hub, data center, courier app
The Challenge
Why Shopify stopped working
App costs were unreasonable
Shopify's app ecosystem was eating the budget. Every new feature meant another $200/month subscription, another vendor to manage, another integration that didn't talk to the others.
Integrations that didn't know about each other
Inventory lived in one app, delivery in another, marketing in a third. None of them shared data. A customer could order something that was already sold out in their local store because the systems weren't connected.
More stores meant worse experience
The platform was built for one location. As the franchise grew, product syncs got slower, inventory became misleading and checkout got more confusing. Growth was actively making things worse.
A page builder that was both too rigid and too loose
Shopify's page builder couldn't pull in live product data or location-specific inventory. But it also had no brand guardrails, so pages drifted off-brand constantly. The worst of both problems at once.
Checkout was a patchwork
Multiple app dependencies fighting over the checkout flow. Shopify wouldn't keep users signed in. Saved payment methods didn't stick. Every order felt like starting from scratch.
Clean interactions while navigating from the homepage to collections
Goals
What success looked like
One platform that knows everything
Catalog, content, checkout and fulfillment all aware of each other. When inventory changes at a store, the storefront reflects it. When a customer switches locations, the cart updates. No silos.
Mobile-first from browse to delivery
Most of Kindling's customers shop on their phones. The entire experience (discovery, product pages, cart, checkout, order tracking) had to be designed for mobile first, not adapted after the fact.
Editorial independence with brand control
The content team needed to build pages, publish magazine articles and feature products without developer involvement. But within brand guardrails, not a blank canvas.
Single team, full ownership
No more calling three vendors when something breaks. One team owns the storefront, the API, the data center and the courier app. One codebase. One point of accountability.
Built with
01 — Our Approach
Building the hub
Shopify was the bottleneck. Every new integration meant another app, another monthly fee, another vendor who couldn't see what the other vendors were doing. So we ripped it out and built a central API hub in AdonisJS that owns all integration logic.
COVA POS for catalog and inventory. Leafly and Uber Eats for marketplace orders. Moneris for PCA compliant payments (one of few processors that supports cannabis retail in Canada). CIGO for delivery dispatch. Klaviyo for email marketing. Meilisearch for product search. The hub sits in the middle and makes sure they all talk to each other. One backend, one source of truth, one team responsible for the whole thing.

The storefront: one of four apps all connected through the hub
02 — Our Approach
Store routing without breaking URLs
Kindling operates multiple stores across different cities. The conventional approach would be URL-based routing: shopkindling.ca/toronto, shopkindling.ca/hamilton. That fragments SEO, breaks shared links and creates maintenance overhead.
Instead, we built cookie-based store resolution. The system detects the user's location through IP, geolocation or manual postal code input and resolves the first three characters of the postal code against a store mapping table. If a customer changes their delivery address mid-checkout and it maps to a different store, a confirmation modal appears and the cart switches atomically. No URL changes. No broken links. One storefront that behaves like many.
Store routing via postal code, no URL changes needed
03 — Our Approach
A CMS that knows about products
Most headless CMS setups treat content and commerce as separate worlds. We built Storyblok components that are aware of both the product catalog and the user's location. A Hero component can feature products from the customer's nearest store. A Collection component renders location-specific inventory. A FeaturedProduct block pulls live pricing and availability.
Content authors build editorial pages (including a full magazine-style blog) without touching code. The CMS enforces brand guidelines through component constraints, supports A/B testing on any component, and publishes with draft preview and webhook-driven revalidation. No deployments needed.

Page builder in Storyblok with product-aware and location-aware components

Magazine-style blog with location-aware product collections
04 — Our Approach
Search that keeps up with shoppers
Cannabis product catalogs are big, messy and full of strain names that customers only half remember. Shopify's default search couldn't handle it. Typos returned nothing. Partial queries returned everything. Filters were slow enough that people gave up.
We dropped in Meilisearch and indexed the full COVA catalog with typo tolerance, synonyms and faceted filtering. Search results come back in under 50ms. Customers can type 'bleu dream' or 'blue drm' and still land on what they want. Filters for THC range, price, category and brand update instantly. The whole thing runs on the hub, so inventory counts and pricing stay accurate to the store the customer is actually shopping from.
Sub-50ms search with typo tolerance across the full catalog
05 — Our Approach
Checkout without the friction
Cannabis checkout in Canada is regulated, complicated and usually painful. Age verification, delivery windows, store-specific inventory holds, PCA compliant payment processing. Most platforms bolt these on as afterthoughts and it shows.
We built a single-page checkout that handles all of it without making the customer feel any of it. Moneris processes the payment. CIGO gets the delivery dispatch. COVA locks the inventory. The hub coordinates the sequence so nothing falls through, and the customer sees one clean flow from cart to confirmation. On mobile (where most of Kindling's traffic comes from) checkout completes in under 60 seconds.

Single-page checkout coordinating five integrations behind one clean flow
What We Built
Headless architecture
Four decoupled applications (storefront, API hub, data center, courier app) all communicating through a single AdonisJS backend. No Shopify dependencies.
Instant search
Meilisearch-powered product search that returns results as you type. Filters by strain, brand, THC, CBD, product type and more.
Multi-location routing
Cookie-based store resolution via IP, geolocation and postal code. The storefront adapts to the user's location without changing URLs or breaking shared links.
Stepped checkout
A 4-step checkout (cart, fulfillment, delivery details, payment) that handles store switching, delivery validation and Moneris tokenization without overwhelming the user.
CMS page builder
Storyblok with ecommerce-aware components. Hero, Collection and FeaturedProduct blocks pull live product data and respect the user's location context.
Delivery integration
CIGO-powered delivery dispatch with a dedicated React Native courier app for shift management, trip acceptance, location tracking and proof of delivery.
Catalog sync
COVA POS sync in batches of 500 products. Multi-location inventory resolution, assortment management and Meilisearch indexing so the storefront always reflects what's on shelves.
Magazine blog
Full editorial blog with location-aware product collections embedded in articles. Content authors publish and feature store-specific products without developer help.
Results
Kindling went from a Shopify store held together by expensive apps to a unified platform where catalog, content, checkout and delivery all flow through one system. The franchise model finally has infrastructure that scales with it.
Performance 94, SEO 100, FCP under half a second
The storefront is fast. Lighthouse scores speak for themselves: near-perfect performance, perfect SEO, and first contentful paint in under 500ms.
Full editorial independence
The content team builds pages, publishes magazine articles and features location-specific products in Storyblok. No developer tickets. No waiting.
Everything talks to everything
Catalog, checkout, delivery, content and marketing all flow through one API hub. A change in one system is visible across all of them.
A partner, not a vendor
In the client's words: LT functions like partners who take ownership. Kindling's success is LT's success. When road bumps hit, we took accountability.
Lessons
Adding steps to checkout made it faster. Counterintuitive, but a 4-step flow (cart, fulfillment method, delivery details, payment) isolates each concern so the user never sees the underlying complexity of store switching, delivery validation and payment tokenization.
Building one API hub instead of point-to-point integrations paid for itself immediately. Adding a new integration means connecting it to the hub, not rewiring six other systems.
Cookie-based store routing instead of URL-based routing kept the SEO clean. Shared links work for everyone. One sitemap. No duplicate content problems across locations.
Outgrowing your ecommerce platform?
We build headless commerce platforms for multi-location retailers. One team, one codebase, full ownership. Let's talk about yours.