JointCommerce · Consumer Side · Apr 2025 – Mar 2026

app.jointcommerce.com
Consumer Ordering Platform

Built from scratch. Grew 2,000 to 200,000 monthly users in 11 months. 100x. Powered the data side of a two-sided AdTech platform - the consumer app generated the first-party signal that fed the advertiser activation engine across 200+ accounts.

0K
Monthly Active Users
From 2K at launch
0x
Growth in 11 Months
2K → 200K MAU
0+
Advertiser Accounts Fed
First-party data source

Why the consumer app existed

JointCommerce was a two-sided AdTech platform: a consumer side and an advertiser side. The advertiser side activates audience data - segments, lookalikes, intent signals, conversion attribution. But that data has to come from somewhere real.

The consumer ordering app was the somewhere. Every signup, every browse, every checkout, every repeat purchase produced first-party signal. The app didn't exist as a side project - it existed because without it, the advertiser side had nothing to activate. The whole platform thesis rested on owning the data, not buying it.

By month 11, 200,000 monthly active users were generating the behavioral signal that powered 200+ advertiser accounts. The two sides only worked together.

Architecture, from scratch

Nothing existed before I joined - no platform, no team, no codebase. The consumer app was built ground-up on a stack designed for fast iteration and clean instrumentation.

Next.js Consumer App

Server-side rendered storefront, product catalog, ordering flow, account management, loyalty. Built for crawlability and conversion - every page indexed, every interaction tracked.

Django Backend

Orders, user management, product catalog, multi-location inventory, loyalty programs, delivery tracking. 16 Django apps, 235 models. The operational core of the platform.

PostgreSQL

Transactional data store - users, orders, products, sessions, pixel events. Schema designed for analytics-friendly queries from day one. Read replicas for reporting workload.

Redis

Session store, page cache, hot product cache, rate limiting, async job queues. The reason the storefront stayed sub-200ms while traffic 100x'd.

AWS Infrastructure

EC2 compute, S3 for assets and exports, RDS for managed Postgres, CloudFront for static delivery. Vercel for the Next.js front-end. Scaled from 2K to 200K MAU with no rewrites.

Custom Pixel Tracking

Custom JavaScript pixel instrumented across every page and event - page views, product views, add-to-cart, checkout, conversions. The full ad-impression → purchase chain captured in real time.

Analytics Layer

Behavioral event stream flowing into the CDP - every signal joinable by user, device, and session. Feeds the audience activation pipeline on the advertiser side.

2,000 to 200,000 MAU. 11 months.

The curve speaks for itself. Month 1: 2,000 monthly active users. Month 11: 200,000. Driven by SEO content (55K articles, 13K directory pages), product-led growth, and a flywheel that fed itself.

0 50K 100K 150K 200K M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 2K ~30K 200K

How the consumer app fed the advertiser side

The consumer app wasn't valuable on its own - it was valuable because of what it fed. Every signup, browse, and purchase became signal. That signal became audiences. Those audiences drove ROAS. ROAS drove more advertiser spend. And advertiser spend reinvested back into the consumer app.

1
User signs up on app.jointcommerce.com - ordering behavior captured from first session.
2
Pixel tracks browsing intent - product views, dwell time, add-to-cart, abandonment, search queries. Every event timestamped and attributed.
3
Behavioral and conversion events close the loop - on-platform purchases tie back to the online journey. ROAS becomes verifiable, not modeled.
4
Behavioral data enriches the CDP - identity stitched across devices and events, 21M+ profiles, 1B+ data points.
5
CDP powers DSP audience activation - first-party segments and lookalikes exported to 6 DSP partners.
6
Advertisers get higher ROAS - real purchase-intent audiences beat third-party data by orders of magnitude.
7
Higher ROAS → more advertiser spend → more platform revenue → reinvestment in the consumer app.
Compounding flywheel: more users → richer data → better targeting → more spend → more users

The data outputs

The consumer app's job was to produce signal. Here's what it actually produced.

21M+
Unique Consumer Profiles
First-party identities stitched across devices, sessions, and channels. Feeds the CDP.
1B+
Behavioral Data Points
Pixel-fired events: views, clicks, dwell, add-to-cart, checkout, repeat purchase. The full funnel, joinable by user.
200K
First-Party Purchase Intent Signal
Monthly active users producing real-time intent - infinitely more valuable than third-party cookies.
200+
Advertiser Accounts Activated
First-party behavioral segments and lookalike audiences fed into 200+ live campaigns across 6 DSP partners.

What it was built with

Frontend
Next.js React TypeScript Vercel
Backend
Python Django Celery
Data
PostgreSQL Redis
Infrastructure
AWS EC2 AWS S3 AWS RDS CloudFront
Instrumentation
Custom Pixel SDK Event Stream Identity Stitching
Integrations
Stripe SendGrid

Let's talk about what I can do for you.

I'm exploring leadership roles where building the technology and running the business aren't treated as separate jobs.

Start a Conversation → View on LinkedIn