Two-sided UGC marketplace where brands could launch paid campaigns and creators could apply, submit content, and get paid.
Co-Founder · Jun 2025 – Dec 2025 · 5 brands · 100+ users
This repository documents the product and engineering work behind MerchMe. Source code is not included.
MerchMe originally started as a print-on-demand product for helping people launch merch.
As we talked to users and explored the market, a better opportunity became clearer: brands needed short-form creator content, while creators needed a more structured way to find paid UGC work.
So we pivoted MerchMe into a marketplace connecting the two.
- Lets brands create profiles and launch paid UGC campaigns
- Lets creators browse bounties and apply for work
- Supports direct creator invitations from brands
- Handles batch content submissions and brand review
- Gives brands and creators separate dashboards and workflows
- Includes messaging, referrals, campaign activity, and earnings tracking
- Handles payments and payout-related flows through Stripe
Brand creates bounty
↓
Creator discovers campaign
↓
Apply / get invited
↓
Creator submits content
↓
Brand reviews submission
↓
Approved work
↓
Creator gets paid
- Built the full marketplace across separate brand and creator experiences
- Modeled campaigns, applications, invitations, submissions, payouts, referrals, messages, and metrics
- Built a NestJS REST API backed by PostgreSQL and Supabase authentication
- Added Stripe payment and webhook flows
- Used Redis for caching and rate limiting
- Added SendGrid transactional email flows
- Scraped Instagram and TikTok metadata where useful for creator profiles
- Designed batch submission flows around how brands actually review multiple UGC assets
Next.js · React · TypeScript · NestJS · PostgreSQL · Supabase · Redis · Stripe · SendGrid
The product revolved around bounties.
A bounty represented a paid campaign that creators could discover, apply to, or be invited into.
That gave both sides of the marketplace a simple shared object:
Bounty
↙ ↘
Brand Creator
↓ ↓
campaign application
↓ ↓
review ← submission
↘ ↙
payout
Brands could:
- create a company profile
- launch campaigns
- review creator applications
- invite creators
- message participants
- review submitted work
- track campaign activity
Creators could:
- create a profile
- browse available bounties
- apply to campaigns
- receive invitations
- submit content
- track earnings
Campaigns also had shareable public pages.
That allowed discovery and referrals to happen outside of the logged-in marketplace instead of requiring every creator to start inside the dashboard.
Brand / Creator
↓
Next.js frontend
↓
NestJS REST API
↓
Application logic
├── campaigns
├── applications
├── invitations
├── submissions
├── messaging
├── referrals
└── payments
↓
PostgreSQL / Supabase
Supporting services handled specific parts of the system:
Supabase
├── authentication
└── PostgreSQL
Stripe
├── payments
└── webhooks
Redis
├── caching
└── rate limiting
SendGrid
└── transactional email
The brand and creator experiences stayed separate at the product level while sharing the same marketplace data underneath.
MerchMe started as a different product entirely.
The first idea was around print-on-demand merch, but user conversations and market research pushed us toward UGC.
The name stayed.
The transaction changed.
Instead of helping someone sell merch, the product became a marketplace where brands could pay creators to produce content.
Implementation notes
The product modeled the main objects required for both sides of the transaction:
brand
↓
campaign / bounty
↓
application or invitation
↓
creator
↓
submission batch
↓
review
↓
payment
Supporting systems included:
- referrals
- messaging
- campaign metrics
- creator profiles
- brand profiles
UGC campaigns often involve more than one asset.
Instead of treating every piece of content as an isolated submission, MerchMe supported batches so creators could submit several assets together and brands could review them as a group.
That matched the workflow more closely than forcing brands through one asset at a time.
Where useful, Instagram and TikTok metadata could be collected to add more context to creator profiles.
Stripe handled payment-related flows and webhooks so marketplace state could react to payment events rather than depending entirely on synchronous frontend actions.
What I learned
The hardest problem was not building more marketplace features.
It was liquidity.
A two-sided marketplace only becomes useful when enough brands and enough creators are active at the same time.
If I were building MerchMe again, I would start much narrower:
- one brand category
- one creator type
- a more manual concierge workflow
I would focus on getting the transaction to repeat before automating every part of the marketplace.
Once the core transaction works consistently, the software becomes much easier to justify.
