Custom where the brand lives, standard where money moves
Presentation, merchandising, and content are bespoke. Payments run through Stripe rather than anything hand-rolled.
A premium e-commerce platform where the cultural design language was not decoration on top of a storefront, but the reason the storefront needed to be custom-built.
Interface
What the user touches
Application
Where the rules run
Data
What persists
Platform
What it runs on
Upside Tree started from a brand with a specific point of view: a Persian identity rooted in pre-Islamic Iranian visual culture, sold to an audience split across two languages and two reading directions.
The obvious path was a hosted storefront. We took that seriously before rejecting it. The blocker was not cost or capability — it was that the parts of the experience carrying the brand were precisely the parts a template treats as fixed furniture.
So the question became narrower and more answerable: what is the smallest custom platform that gives full control over presentation and merchandising without turning every future copy change into an engineering ticket?
Off-the-shelf storefronts are fast until the thing that makes your brand different is the thing the template will not let you change.
A full commerce platform built on Next.js App Router with Supabase as the data layer, covering the storefront, a bilingual content system, a complete admin dashboard, and a custom purchase flow with Stripe.
Bilingual by architecture
English and Persian are first-class throughout — content, layout direction, and admin-managed copy — rather than a translation layer bolted onto an English store.
Database-driven settings
Branding, SEO, payments, shipping, and transactional email are stored as data and edited through the admin UI, so operating the store does not require a deploy.
Custom purchase flow
Multi-step cart and checkout with guest support, coupon validation, and transaction state that survives interruption.
Admin dashboard
Products, collections, media, customers, and global configuration managed from one operator surface.
Loyalty system
Points and rewards for registered customers, modelled in the database alongside orders.
A bilingual store is not a translated store: layout direction, typography, and content length all change with the language.
The brand’s visual identity was the product differentiator, and template systems constrain exactly that surface.
Every hardcoded setting becomes an engineering request later — store configuration had to live in the database from day one.
Checkout is where custom builds usually fail, so the purchase flow needed to be the most conservatively engineered part of the system.
The store had to be operable by a non-engineer without a deploy pipeline in the loop.
The build decisions all traced back to a single question: which parts of a commerce platform genuinely benefit from being custom, and which parts should lean on infrastructure that already works?
Presentation, merchandising, and content are bespoke. Payments run through Stripe rather than anything hand-rolled.
Anything an operator might reasonably want to change was modelled as a database row with an admin surface, not a constant in the source.
Treating Persian as a full locale — direction, type, spacing — rather than swapped strings avoided the broken-mirror feel of most bilingual stores.
A storefront nobody can update without a developer is a liability. Admin tooling got the same design attention as the customer-facing pages.
Products, collections, settings, and copy all live in PostgreSQL. The application reads configuration rather than embedding it.
No primary locale with a secondary translation. Both directions were designed and tested as first-class paths.
Payments, auth, and persistence use established infrastructure so that engineering attention could go to the experience layer.
Phase 1
Model the catalogue, orders, customers, and settings in PostgreSQL first, so the UI could be built against a stable shape.
Phase 2
Build the customer-facing experience with locale handling, cart state in Zustand, and the brand’s visual language.
Phase 3
Ship the operator dashboard and wire the Stripe purchase flow with coupon validation and guest checkout.
Upside Tree is one of the ventures we design, build, and run in-house at AshaVid.