How We Built an Affiliate Management SaaS in a Weekend (And Why We Open-Sourced It)

By Sharath8 min read
#Build in Public#Open Source#SaaS Development#TopPromoter#MVP Development

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

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:

  1. The marketing/landing page — explains what TopPromoter is and drives signups
  2. The dashboard — where SaaS founders manage their affiliate program
  3. 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-widget package: a <13kb JavaScript 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.com and yourproduct.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.

Book a free Discovery Call at v12labs.io