Skip to content
Shoprocket logo
01 / Ecommerce SaaS

Shoprocket: engineering a production commerce platform.

An embeddable ecommerce SaaS that adds cart and checkout to almost any website. I spent 7+ years helping evolve it, taking ownership of complex engineering across its backend, APIs, merchant workflows, storefront, integrations and infrastructure.

My role
Lead Full-Stack Developer
Engagement
7+ year client relationship
Stack
Laravel · Livewire · Alpine.js · Vanilla JS · MySQL · AWS
Live site
37,000+
sellers
$425M+
orders processed
196
countries
4.8/5
Trustpilot rating
Merchant operations
Shoprocket merchant dashboard showing the orders list and an individual order detail view
The dashboard merchants use to run orders: the list, and a single order.
The challenge

Real commerce, on websites nobody on the team controls.

Traditional ecommerce tools often require merchants to move into a hosted storefront or rely on an iframe. Shoprocket's model was different: add a real cart and checkout to an existing website with a small embed.

That is a harder product. Commerce is a chain of dependent workflows, not a list of features. Product configuration affects inventory. Inventory affects checkout. Checkout triggers payment. Payment creates an order. Orders connect to fulfillment, shipping, taxes and customer workflows, all of it on websites the team did not control.

Embeddable commerce

A cart and checkout that sit on a merchant's existing site, so the storefront has to stay predictable on sites nobody on the team controls.

Operational depth

Orders sit at the intersection of customers, products, payments, fulfillment, taxes and shipping, not just a database record.

Multi-tenant scale

One SaaS platform serving tens of thousands of independent stores, each with isolated data and business logic.

Connected workflows

The difficult part wasn't building the features.

It was making interconnected commerce workflows behave reliably, especially when product, inventory, payment and order state all depend on each other.

One path through the system

  1. Products
  2. Inventory
  3. Cart
  4. Checkout
  5. Payment
  6. Order
  7. Fulfillment
  8. Shipping

Products

Not just CRUD, attributes, options, variants, pricing and inventory relationships across physical, digital, service and subscription types.

Orders

Orders sit at the intersection of customers, products, payments, fulfillment, taxes and shipping.

Payments

Payment state has to stay consistent with order state while handling failures, retries, refunds and asynchronous provider callbacks.

Webhooks

External systems can fail, retry or respond asynchronously, integrations have to be designed around unreliable communication.

Related engineering notes: order systems , payment webhooks , tenant isolation .

The evolution

From early implementation to production SaaS.

The product evolved, so the engineering foundation had to evolve with it. Shoprocket started on CodeIgniter and vanilla JavaScript; as the merchant base and product scope grew, I rebuilt V2 on Laravel, Livewire, Alpine.js and Tailwind CSS, modernizing a live commerce platform while preserving the workflows that already mattered.

V1

Early implementation

The original stack that established embeddable cart and checkout as the core proposition.

  • CodeIgniter
  • Vanilla JavaScript
V2

Production SaaS platform

Rebuilt from the ground up so the dashboard and commerce layer could keep growing.

  • Laravel
  • Livewire
  • Alpine.js
  • Tailwind CSS
  • MySQL
  • AWS
Continued

The product kept expanding

New product types, payment methods and sales channels followed real merchant needs.

  • APIs
  • Commerce
  • Payments
  • Orders
  • Inventory
  • Shipping
  • Taxes
  • Webhooks
  • Integrations

The challenge wasn't swapping frameworks. It was keeping the business running while the system changed underneath it.

Read Rebuilding a live commerce platform on Laravel without breaking merchants for the migration perspective.

What I owned

Long-term engineering ownership.

I've worked with Shoprocket's founder for 7+ years, including building V2 from the ground up and owning most of the engineering across its backend, APIs, merchant workflows, storefront and integrations.

  1. Commerce engine

    Products and variants across physical, digital, service, licence-key, donation and subscription types, plus inventory and catalog workflows.

  2. Orders & payments

    The path from cart to a recorded order, including a provider-agnostic payment layer, refunds, retries and recovery from failed or duplicate payments.

  3. Merchant platform

    The dashboard merchants use to run products, orders, customers and inventory, built so the operation can grow without another rebuild.

  4. APIs & integrations

    The public REST API and its authentication, inbound webhooks from payment and third-party services, and integrations such as Zapier.

  5. Storefront & embed

    The customer-facing cart and checkout, implemented in vanilla JavaScript so commerce can sit on websites nobody on the team controls.

  6. Shipping & tax

    Shipping options, tax handling and the operational rules that have to work across currencies and regions.

Under the hood

The architecture had to disappear into the background.

The embed needs to behave predictably on thousands of different websites. Underneath it is a Laravel API and a multi-tenant architecture that keeps each merchant's store and data isolated. The storefront itself is vanilla JavaScript.

  1. Merchant
  2. Merchant dashboard
  3. Laravel application / API
  4. Commerce systems

    Orders · Payments · Inventory · Shipping · Tax

  5. Storefront, APIs & integrations

    Vanilla JavaScript embed, public REST API, webhooks and Zapier

Application

Laravel API with Livewire, Alpine.js and Tailwind CSS powering the merchant experience.

Data

MySQL-backed multi-tenant commerce data and business workflows.

Payments

A provider-agnostic payment layer across Stripe, Stripe Connect, PayPal, PayU and crypto, with webhook handling, refunds, retries, duplicate-payment protection and recovery from failed payments.

Background processing

Queued and scheduled jobs, so the slower work never blocks a merchant request.

APIs & authentication

A public REST API with token and OAuth authentication, and verified inbound webhooks from payment and third-party services.

Infrastructure

AWS infrastructure designed to keep checkout responsive as demand changes.

LaravelLivewireAlpine.jsVanilla JSTailwind CSSMySQLAWSAPIs
Engineering challenges

The problems that made the product hard.

Shoprocket is interesting because real commerce is a system of systems. These are the kinds of problems the work had to take seriously.

  1. Multi-tenant commerce

    One SaaS platform serving thousands of independent merchant stores, with each store's data and business logic kept isolated.

  2. Product & variant complexity

    Supporting several product types, variants and inventory in a single catalog, without turning every merchant into a special case.

  3. Order lifecycle

    Connecting cart, checkout, payments, recorded orders and refunds as one set of state transitions, not a pile of separate features.

  4. Payment reliability

    Taking money across Stripe, Stripe Connect, PayPal, PayU and crypto, and staying correct when webhooks fail, retry or fire more than once.

  5. Webhooks & integrations

    A public API, Zapier and inbound webhooks from systems that can fail, repeat or arrive asynchronously.

  6. Performance under expansion

    Keeping the embed predictable on thousands of third-party websites, and checkout responsive, as the product kept growing.

Performance

Performance was a product requirement.

The storefront embed is vanilla JavaScript, and it had to stay lightweight enough to sit on websites the team did not control. Shoprocket published this load-time comparison as a product benchmark.

Published Shoprocket benchmark comparing store load times: Shoprocket 95ms, Shopify 112ms, Selz 131ms and Ecwid 640ms
Published Shoprocket benchmark; results may vary by test conditions.
Product visuals

The platform as merchants and customers see it.

Dashboard workflows, commerce configuration and the vanilla JavaScript storefront that runs on a merchant's own site.

01 / Commerce workflows
Shoprocket shipping management across the merchant dashboard and customer storefront
Shipping configured in the merchant dashboard, and how the same setup appears to the customer.
02 / Storefront & embed
Shoprocket vanilla JavaScript storefront showing product listing, product detail and checkout on mobile
The vanilla JavaScript product pages and checkout that sit on a merchant's existing website.
Results

A production platform used worldwide.

These are Shoprocket's public scale figures. The engineering sat underneath them across a 7+ year relationship, from the original stack through V2 and the commerce systems that followed.

37,000+

sellers using the platform

$425M+

orders processed

444k+

products sold

196

countries

Client perspective

A long-term product relationship.

This was not a one-off freelance task. After years of engineering on Shoprocket, this is how Ryan Badger, the CEO, describes the work.

“I’ve had the pleasure of working with Indesh for several years across multiple projects, and I can confidently say he’s one of the best developers I’ve worked with. His technical skills are exceptional, particularly in Laravel, APIs, SaaS platforms, and scalable backend systems. He consistently delivers high-quality work, communicates clearly, and always approaches challenges with professionalism and attention to detail.

Beyond his technical ability, Indesh is reliable, trustworthy, responsive, and genuinely enjoyable to work with. His English is excellent, deadlines are met, and he takes real ownership of his work. I would recommend him without hesitation to anyone looking for a highly skilled and dependable developer.”

Portrait of Ryan Badger
Ryan Badger
CEO, Shoprocket
Message from Ryan Badger, CEO of Shoprocket, about working with Indesh Prinja
Original message from Ryan Badger, CEO, Shoprocket.

I don't just build features.

I help evolve the systems businesses depend on. Building a SaaS or ecommerce product, or evolving one that's already in production? Let's talk.

Let's talk →