Tirth J.

ResellerStack

Outbox Labs · 0 1 Product

The ResellerStack control panel on the Overview screen: MRR, gross contribution, wallet balance and active services across the top, a grouped sidebar, and a 'Needs attention' list of open items

Introduction

Details

RoleDesigner / Engineer
ClientOutbox Labs
Year2026
Timeline3 weeks
Type0 1 Product

Introduction

ResellerStack is a concept prototype for the agencies, consultants and web shops that resell domains and business email under their own brand. That trade mostly runs on spreadsheets: you register domains for a book of clients, mark them up by guesswork, and find out at renewal season which of them were actually profitable.

The whole exploration starts from a single decision make the reseller's margin a first-class number in the interface. Cost, sell price and profit sit side by side on every order, every domain and every renewal, instead of being reconstructed afterwards. Everything else in the product follows from that, including what the interface deliberately refuses to show.

The Pricing screen: a global markup rule with a 'round retail prices to .99' toggle, an amber warning that one row is priced below wholesale cost, and a TLD price book listing cost per year, retail per year, margin per year, renewal cost and a per-TLD override
The Orders screen: status tabs for active, provisioning, needs review, awaiting wallet funding and failed orders, above a table carrying revenue, charged and profit columns on every row

Most reseller panels are an order form with a login. You place the order, the money moves, and profit is something you work out later per client, in a spreadsheet, usually at renewal when it is too late to reprice.

So the constraint I set was that margin should never have to be reconstructed. Cost, sell price and profit had to appear together on the row you are already looking at, which meant designing the price book as the first screen rather than a settings page, and treating every table in the product as somewhere those three columns have to fit.

A dark section of the marketing site headed 'One number runs this platform: your margin', with an abstract diagram of rows split into cost, sell and profit columns
The Products screen: blended margin and average wholesale summarised at the top, then each resellable service with its wholesale cost, an editable retail price, the resulting margin and margin percentage, and a switch to sell it
The Domains screen: domains under management, an expiring and grace count, auto-renew coverage, and a portfolio table showing each domain's customer, expiry, auto-renew switch, renewal cost, margin per year and status
The Earnings screen: lifetime revenue, lifetime profit and sales count, above a per-sale table of revenue, cost and profit that ends in a totals row

One global markup rule sets the whole book, per-TLD overrides handle the exceptions, and a warning fires before you publish a rule that would sell below wholesale the mistake the screen exists to prevent. From there the same three columns follow the object through the product: the catalog row you switch on, the domain sitting in a client's portfolio, the totals at the foot of the earnings table.

The business model has a sharper consequence for the interface. Because the model is the spread you pay wholesale, you set retail, the difference is yours there is no monthly fee, no seat count and no minimum. So there is deliberately no pricing tier table anywhere in the UI. A plan grid would describe a product this isn't, so the pricing page had to be an explanation instead.

The pricing section of the marketing site: a full-bleed black band reading 'No monthly fee. You keep the spread.' with a short paragraph explaining the wallet and the wholesale-to-retail difference, and a single call to action

The pricing page, with no plan grid on it — the one place the model had to be argued rather than tabulated.

The storefront studio: a layers list of the store's blocks on the left, the live storefront canvas in the middle with each editable region outlined, and a properties panel on the right, under a top bar offering store, cart and checkout views plus preview and push live

The studio: blocks, not a blank canvas.

The customer-facing storefront rendered at the preview route under a reseller's own brand: domain search, per-TLD price chips, trust badges and a plans and pricing section, with a draft banner and a storefront/cart/checkout switcher

The same draft through the same renderer the published store uses.

Resellers arrive through whichever door fits, and all three doors share one catalog, one wallet and one price book: a no-code hosted storefront, the dashboard itself, or an API-first integration. The storefront is deliberately not a page builder it is a theme catalog plus data-driven layout and checkout settings, so the controls stay generic and the output stays coherent. Its preview route runs the same renderer and the same store as a published storefront, which is what makes preview trustworthy rather than approximate.

Setup forks on that choice immediately after signup, and the control panel behind it is thirteen screens driven from a single list in code the same list supplies the route's valid slugs, the sidebar groups and every page header, so a screen cannot exist in the navigation and not in the router.

The setup fork after signup, headed 'How should Agency sell?', offering an API platform track for product teams and a white-label solution track for resellers and agencies, each listing what it gives you and how many steps it takes
The Developers tab of Settings: scoped, rotatable API keys labelled production and staging with their scopes and last-used times, and a webhook endpoint subscribed to provisioning, renewal, expiry and transfer events
The Wallet and ledger screen: prepaid wholesale balance against a low-balance threshold, a note that orders pause awaiting wallet funding when the balance cannot cover cost, an add-funds panel and an auto top-up rule
The Subscriptions screen: active subscriptions, mailboxes under management and monthly recurring billing, above a renewals-required table listing each service's due date, retail, cost and auto-renew state
The Customers screen: customer count, lifetime revenue and an at-churn-risk count, above a table of each customer's contact, country, domains held, lifetime spend, health and account status
The Migrate screen: four numbered steps from exporting at your old registrar through auth codes to batch transfer-in, with a box for pasting domains or a registrar CSV export

Three weeks produced the whole surface: thirteen control-panel screens, a storefront studio, the customer-facing store it publishes, the setup flow that forks between the two ways in, and a marketing site that argues for the model rather than listing plans.

What it is not, is a business. There is no backend, no registrar integration and no payment processing state lives in the browser, the catalog and ledger are seed data, and every figure, price and quote in the UI is illustrative and needs sourcing before any of it is published. The deployment sits behind a six-digit gate for exactly that reason. It is a product argument rendered at full fidelity, which is a different thing from a running service, and worth being plain about.