Malik SohaibEmail me
← All work

EzVenda

A multi-tenant commerce platform where small Pakistani merchants run cash-on-delivery shops on their own domains.

Role
Solo: product, design, frontend, backend, infrastructure
When
Jul 2026 to now
Status
Live

Small merchants in Pakistan sell in rupees, mostly cash on delivery, and their ad spend is wasted on fake orders that never get paid for.

EzVenda gives each merchant a hosted storefront with guest checkout, a merchant app for catalogue, orders and shop design, and a connector so the merchant’s own AI assistant can do the work for them.

Decisions

  1. 01

    Custom domains, without running certificatesDecision D-201

    Chose
    Merchants connect their own domain through Cloudflare for SaaS, which issues and renews the certificates.
    Instead of
    Issuing certificates on demand from our own servers the first time a new domain connects.
    Why
    Merchant traffic gets the same DDoS protection, firewall and caching as the platform, and certificate renewal and rate limits stop being our problem.
  2. 02

    Count a sale when the merchant confirms itDecision D-268

    Chose
    The server reports a purchase to Meta and TikTok when the merchant confirms a cash-on-delivery order, with the order id as the event id.
    Instead of
    Firing the purchase from the shopper’s browser the moment an order is placed.
    Why
    Fake COD orders are the biggest problem for Pakistani advertisers. Counting only confirmed orders teaches the ad platforms to find real buyers, and a sale is never counted twice.
  3. 03

    Pixel IDs only, no pasted scriptsDecision D-16

    Chose
    Merchants enter format-checked pixel IDs, and a first-party script starts each vendor’s tracking.
    Instead of
    A custom scripts box, or pasting the vendors’ inline snippets.
    Why
    Arbitrary JavaScript on a page with a checkout turns any XSS bug into a card skimmer served from our own domain.
  4. 04

    The AI connector uses the API’s own routesDecision D-249

    Chose
    Each merchant’s MCP key is tied to one store and one person, and every tool calls the API’s existing routes.
    Instead of
    Tools that read and write the database directly.
    Why
    An agent’s change gets the same validation, permissions, events and audit trail as the merchant’s own click, and design edits stay drafts until the merchant publishes.
  5. 05

    Stock that cannot be oversold

    Chose
    Checkout takes stock with one conditional update that subtracts only while enough is left.
    Instead of
    Reading the stock, checking it in code, then writing the new number.
    Why
    The check and the decrement are one atomic statement, so two shoppers can never both buy the last unit. Checkout also re-prices from live tables.

EzVenda, in use: The EzVenda store builder: the home page’s sections on the left, the live shop on the right. The Your AI page: changes an assistant made, waiting for the merchant to publish. An order in the merchant app: what to pack, cash to collect on delivery. The shop home page on a phone. A product page with price, discount and photos. Guest checkout asking for a phone number. The orders list, grouped by what each order needs next. The products list with stock and price. A shop on EzVenda in a desktop browser. Customers, with how many orders each has had delivered. The online store page: theme, pages and settings.

  • app.ezvenda.com/storeThe store builder: sections on the left, the shop as shoppers see it on the right.
  • app.ezvenda.com/aiAn AI assistant edits the shop over MCP; the merchant reviews before it goes live.
  • app.ezvenda.com/ordersOrders built around cash on delivery: pack it, hand it over, collect.
  • app.ezvenda.com/ordersOrders grouped by what they need next.

What shipped

  • Live, with a real merchant trading on it since milestone 1 (Sep 2026), their catalogue imported from Shopify.
  • 39 MCP tools let a merchant’s AI assistant manage the catalogue, pictures, shop design and settings.
  • Full end-to-end suite green: 152 passed, 0 failed. 139 unit test files and 54 Playwright specs.
  • 307 engineering decisions written down, each with what was chosen, what it was chosen over, and why.
  • Two storefront themes and 51 screens across the merchant app, the shop and the admin.

Built with

TypeScript, Fastify, ts-rest, Drizzle, Postgres, BullMQ, React, TanStack, Astro, Cloudflare for SaaS, R2, MCP