Every product we've built for clients starts with the same question: does a good enough solution already exist?
When we needed affiliate tracking for one of our own projects, we asked that question. The answer was frustrating. Every existing affiliate management tool was either overpriced ($199/month before you have a single affiliate), over-engineered for enterprise use cases, or poorly built.
So we built our own. In a weekend. Then we open-sourced it.
This is the full story of how TopPromoter went from "we need this for ourselves" to a live public beta at toppromoter.vercel.app — and what it taught us about building fast.
Table of Contents
- Why We Needed an Affiliate Tool
- The Market Problem We Found
- The Architecture Decision
- What We Built in the First 48 Hours
- The Tech Stack We Chose and Why
- Why We Open-Sourced It
- What TopPromoter Does Now
- What This Build Taught Us About Speed
- The Lesson for Founders
Why We Needed an Affiliate Tool
At V12 Labs, we build MVPs for founders. Some of those MVPs include affiliate programs — referral tracking, commission management, affiliate portal pages.
Instead of rebuilding affiliate infrastructure from scratch for every client project, we wanted a reusable solution. Something we could integrate quickly, that worked reliably, and that we understood completely because we'd built it ourselves.
We looked at existing options:
- Rewardful: Good product, but $49/month minimum and designed for established SaaS businesses
- PartnerStack: Enterprise-focused, complex onboarding, not appropriate for MVPs
- FirstPromoter: Solid, but $49/month and more features than an MVP needs
- Tapfiliate: Similar story — designed for scale, not for early-stage products
None of them had a meaningful free tier. All of them required your product to be production-ready before you could evaluate whether affiliate marketing was even going to work for you.
The gap: there was no affiliate management tool designed for the "I'm just getting started and want to test this channel" use case.
The Market Problem We Found
The pricing structure of affiliate tools creates a catch-22 for early-stage founders:
You can't know whether affiliate marketing will work for your product until you've tried it with real affiliates. But you can't run a proper affiliate program without paying $50-200/month for tools. So you either pay for a channel you haven't validated, or you don't test the channel at all.
The right solution for an early-stage product is: start free, pay only when you're making money from it.
TopPromoter is built around that model: free to start, 10% commission on the revenue it generates for you. If it doesn't work, you've paid nothing. If it works, you pay proportionally to the value you received.
The Architecture Decision
Before writing a line of code, we made one key architectural decision: build this as a Turborepo monorepo.
The product has three distinct parts:
- The marketing/landing page — explains what TopPromoter is and drives signups
- The dashboard — where SaaS founders manage their affiliate program
- The embed widget — a lightweight script that SaaS products include to track referrals
A monorepo lets us develop all three simultaneously, share types and utilities across packages, and deploy each independently. This is the same architecture we use for client builds — practicing what we preach.
What We Built in the First 48 Hours
Hour 0–4: Project setup and architecture
- Turborepo monorepo initialization
- Package structure:
apps/home,apps/dashboard,packages/widget - Shared TypeScript config and ESLint setup
- Supabase project creation and schema design
Hour 4–16: Core database and auth
- Supabase schema: users, affiliates, programs, conversions, payouts
- Authentication flow with magic link email
- Row-level security policies so each user sees only their data
- Basic API routes for program CRUD
Hour 16–28: Dashboard MVP
- Program creation flow: name, commission rate, cookie duration
- Affiliate invitation system: unique signup links per program
- Conversion tracking: webhook receiver for Stripe events
- Affiliate portal: branded page each affiliate sees with their stats and link
Hour 28–40: Widget and integration
- The
storyflow-widgetpackage: a<13kbJavaScript snippet - Cross-subdomain tracking using first-party cookies
- Attribution logic: last-click model, configurable cookie duration
- One-line embed code generated per program
Hour 40–48: Polish, deploy, public beta launch
- Vercel deployment for home and dashboard
- Custom domain setup
- Basic documentation
- Public beta announcement
Forty-eight hours from idea to live product.
The Tech Stack We Chose and Why
Next.js 15 (App Router) We use Next.js for almost every product we build. It's the right choice for products that need both marketing pages and authenticated app functionality in the same codebase. The App Router makes route organization clean and the server components reduce client-side JavaScript.
Supabase Supabase is our default backend for MVPs. Managed Postgres with built-in auth, real-time subscriptions, and row-level security. The free tier is genuinely useful — not a crippled version designed to force upgrades. We reach for Supabase before anything else for data persistence.
Turborepo For multi-package projects, Turborepo handles build caching and task orchestration. The monorepo structure means we can share TypeScript types between the dashboard and the widget, which eliminates a whole category of integration bugs.
TailwindCSS Tailwind for styling. No custom CSS, no component library overhead. Fast to build, easy to maintain, consistent output.
Stripe Stripe Webhooks for conversion tracking. When a customer referred by an affiliate completes a payment, Stripe sends a webhook. TopPromoter receives it, looks up the attribution cookie, and credits the right affiliate.
Vercel Deployment on Vercel. Preview deployments for every pull request, automatic production deploys on main branch push, edge network for fast global load times.
Why We Open-Sourced It
Two reasons.
Reason 1: Credibility through transparency
At V12 Labs, we tell founders we can build production-quality products fast. The best way to prove that claim is to show the code. TopPromoter is live, open-source, and built on the same stack we use for client work. You can inspect exactly how we make architectural decisions.
Open-sourcing removes the "trust me" from the conversation. The code is the evidence.
Reason 2: We'd rather have adoption than guard a moat
TopPromoter isn't our core product. It's a tool we built that solves a real problem. If other developers can use it, improve it, or learn from it — that's better for everyone than keeping it closed.
The moat at V12 Labs is our ability to scope and build products fast, not any individual tool we've built. Open-sourcing TopPromoter doesn't threaten that.
What TopPromoter Does Now
TopPromoter is currently in public beta at toppromoter.vercel.app.
Current features:
- Affiliate program creation: Set commission rates, cookie duration, custom branding
- Affiliate portal: Each affiliate gets a unique signup link and a branded dashboard
- Stripe integration: Automatic conversion tracking via Stripe webhooks
- Cross-subdomain tracking: Works across
app.yourproduct.comandyourproduct.com - One-click embed: A single
<script>tag, under 13kb, no performance impact - Referral tracking: Real-time conversion attribution with full audit trail
- Payout management: Track what you owe affiliates and mark payouts as complete
Pricing: $0/month + 10% of revenue generated through affiliates. You pay nothing until it works.
What This Build Taught Us About Speed
Lesson 1: A clear problem makes architecture obvious
We didn't spend time debating the stack or the architecture because the problem was well-defined before we started. When you know exactly what you're building, most of the "hard" decisions become easy.
Lesson 2: Monorepos pay off immediately for multi-surface products
The shared TypeScript types between the widget and the dashboard caught integration bugs before they happened. Two days of slightly higher setup cost saves days of debugging later.
Lesson 3: Supabase RLS is underrated
Row-level security in Supabase means we wrote security rules once in the database schema rather than duplicating access control logic across multiple API routes. Fewer places for security bugs to hide.
Lesson 4: Shipping fast requires saying no constantly
TopPromoter launched without: multi-currency payouts, recurring commission models, multi-level affiliate tiers, fraud detection, or a native Shopify integration. All of these are real features affiliates might want. None of them are required to prove the core value proposition.
Every feature we didn't build in the first 48 hours was a decision to ship something real instead of something complete.
The Lesson for Founders
TopPromoter exists because we applied the same discipline to our own products that we apply to client MVPs: define the core problem precisely, scope ruthlessly, ship before it's ready.
The founders who move fastest aren't the ones with the most resources. They're the ones who are most disciplined about what they're actually trying to prove at each stage.
Build the thing that answers the question. Not the thing that anticipates every answer.