The Weekly Buildout
The 72-Hour Sprint
Most SaaS founders spend months perfecting their product before launch. I spent 72 hours getting my first 100 beta users for Listaza.app.
Here's the brutally honest breakdown of what worked, what failed, and the automation systems that made it possible.
THE WEEKLY UPGRADE
📋 What Is Listaza?
AI-powered marketplace listing generator. Upload a product photo → get optimized eBay and Facebook Marketplace listings in seconds.
Built for resellers, small businesses, and anyone tired of writing the same product description 50 times.
The tech stack: React.js frontend, Supabase for database and auth, OpenAI GPT-4o-mini for listing generation, and n8n for all the automation glue.
The Launch Strategy (What I Planned)
Going into launch weekend, I had a comprehensive multi-channel plan:
Twitter threads about the problem (manual marketplace listings are soul-crushing)
LinkedIn posts targeting marketplace sellers and resellers
Reddit submissions across 15+ communities
Instagram stories with app demos
TikTok scripts showing before/after transformations
Email sequences for beta signups
Referral program for founding members (lifetime Pro access for the first 100)
I created content for every platform. Wrote posts. Designed graphics. Built automation workflows.
Then reality hit.
What Actually Happened
✅ Win #1: The Email Template That Converted at 43%
The MVP wasn't my landing page. It was the welcome email.
I created a brand-consistent HTML email template using our existing styling—gradient headers, clean typography, beta user badges showing their founding member number (e.g., "You're Beta User #47").
The psychology: People love exclusivity. Showing them they're one of the first 100 creates FOMO and commitment.
Screenshot callout: [Insert: Welcome email template showing beta badge and "Founding Member - Lifetime Pro Access" offer]
The email structure:
Hero section with personalized greeting
Beta user badge with their unique number
Clear explanation of lifetime Pro access (normally $9.99/mo)
Feature roadmap preview
Direct CTA to start creating listings
Conversion rate: 43% of email recipients created their first listing within 24 hours.
Here's the actual HTML template structure I used:
```html
<!-- Email Template Structure -->
<div style="max-width: 600px; margin: 0 auto; font-family: system-ui;">
<!-- Gradient Header -->
<div style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
padding: 40px; text-align: center;">
<h1 style="color: white; margin: 0;">Welcome to Listaza Beta! 🎉</h1>
</div>
<!-- Beta Badge -->
<div style="background: #f7fafc; padding: 30px; text-align: center;">
<div style="display: inline-block; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white; padding: 15px 30px; border-radius: 8px; font-weight: bold;">
Beta User #{{ beta_number }}
</div>
<p style="margin-top: 20px; font-size: 18px; color: #2d3748;">
You're one of our first 100 Founding Members
</p>
</div>
<!-- Content Section -->
<div style="padding: 30px; background: white;">
<h2 style="color: #2d3748;">Lifetime Pro Access - Unlocked ✓</h2>
<p style="color: #4a5568; line-height: 1.6;">
As a founding member, you now have lifetime access to Pro features (normally $9.99/mo):
</p>
<ul style="color: #4a5568; line-height: 1.8;">
<li>Unlimited listing generations</li>
<li>Priority support</li>
<li>Early access to new features</li>
<li>Direct influence on our roadmap</li>
</ul>
</div>
<!-- CTA Button -->
<div style="padding: 30px; text-align: center; background: #f7fafc;">
<a href="https://listaza.app/dashboard"
style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white; padding: 15px 40px; text-decoration: none;
border-radius: 8px; font-weight: bold; display: inline-block;">
Create Your First Listing →
</a>
</div>
</div>
```Why it worked:
Personalization (beta number, name)
Visual status symbol (the badge)
Clear value prop (lifetime access vs. $9.99/mo)
Single, obvious CTA
❌ Failure #1: The Reddit Strategy Disaster
I wrote 15 different post variations tailored to specific subreddits:
r/Entrepreneur
r/FlippingMarkets
r/SideHustle
r/EcommerceTips
r/Reselling
r/SmallBusiness
...and 9 more
Spent hours crafting posts that matched each community's tone and rules.
Then I actually read the rules.
Turns out 90% of these subreddits prohibit self-promotion entirely.
r/Entrepreneur? Banned for promotional content.
r/FlippingMarkets? Self-promotion Sundays only (and I missed it).
r/SideHustle? Must have established account history.
The Only Reddit Communities That Actually Allow Self-Promotion:
r/SideProject (designed for makers sharing projects)
r/betatesters (kinda on the nose…)
r/alphaandbetausers (specifically for beta testing)
Everything else requires you to engage authentically for months, build karma, then maybe mention your product in a comment if someone specifically asks.
Lesson: Research community rules BEFORE writing 15 different post variations. I wasted 4 hours on content that was DOA.
What I should have done: Spent those 4 hours engaging genuinely in r/Entrepreneur discussions, offering value, and building presence. Then launch in 3 months with actual credibility.
✅ Win #2: Pre-Planning Premium Features
Instead of just launching with core functionality, I spent time mapping out premium features based on early user conversations and feedback form submissions.
The Premium Feature Roadmap:
Multi-Photo Support - Upload multiple angles, AI generates comprehensive listings
Barcode Scanning - Point phone at barcode → instant product details
Auto-Post to eBay - Generate listing and publish directly (no copy/paste)
Poshmark/Mercari Integration - Expand beyond eBay and Facebook
Batch Listing Mode - Upload 10 photos, get 10 listings in one go
Analytics Dashboard - Track which listings perform best
AI Product Photography - Generate professional product placement images using Google Imagen
Screenshot callout: [Insert: Notion database showing feature requests with priority scores, user votes, and implementation complexity]
Why this mattered:
When beta users signed up, I could point to a roadmap. This isn't just a tool—it's a product with a future. People weren't betting on what it is today; they were investing in what it becomes.
Plus, having feature requests already categorized in Notion meant I could immediately start prioritizing based on user votes and feasibility.
❌ Failure #2: Supabase Webhook Hell
I wanted real-time notifications when new users signed up. Sounds simple, right?
The Setup:
User signs up → Supabase database trigger
Webhook fires to n8n
n8n sends Slack notification + email alert
I celebrate another founding member
What Actually Happened:
Timestamps in UTC, needed America/New_York
Webhook payload parsing errors
Duplicate confirmation emails
3 hours of debugging at 2 AM
The Technical Problem:
Supabase sends timestamps like this:
2026-02-15T03:44:44.912056+00:00
I needed them like this:
2026-02-15 11:44:44 PM EST
The Fix - n8n Code Node:
```javascript
// Timestamp Conversion for Supabase Webhooks
const items = $input.all();
items.forEach(item => {
const utcTimestamp = item.json.created_at;
// Convert to America/New_York timezone
const date = new Date(utcTimestamp);
const options = {
timeZone: 'America/New_York',
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: true
};
const formatter = new Intl.DateTimeFormat('en-US', options);
const parts = formatter.formatToParts(date);
const year = parts.find(p => p.type === 'year').value;
const month = parts.find(p => p.type === 'month').value;
const day = parts.find(p => p.type === 'day').value;
const hour = parts.find(p => p.type === 'hour').value;
const minute = parts.find(p => p.type === 'minute').value;
const second = parts.find(p => p.type === 'second').value;
const period = parts.find(p => p.type === 'dayPeriod').value;
// Format: YYYY-MM-DD HH:MM:SS AM/PM
item.json.formatted_timestamp = `${year}-${month}-${day} ${hour}:${minute}:${second} ${period} EST`;
});
return items;
```The Duplicate Email Problem:
Users were getting 2-3 welcome emails. The issue? No tracking of whether we'd already sent one.
The Database Fix:
Added a confirmation_email_sent column to the user_profiles table:
```sql
ALTER TABLE user_profiles
ADD COLUMN confirmation_email_sent BOOLEAN DEFAULT FALSE;
```Then updated the n8n workflow to check this flag before sending:
```javascript
// Check if confirmation email already sent
const emailSent = $('Webhook').item.json.confirmation_email_sent;
if (emailSent === true) {
// Skip email, just send Slack notification
return false;
}
// Send email and update database
return true;
```Final n8n Workflow Structure:
Webhook Trigger - Receives Supabase payload
Code Node - Converts timestamps
IF Node - Check if email already sent
Send Email Node - Welcome email with beta badge
Slack Node - Internal notification
Supabase Update Node - Mark email as sent
Lesson: Build your notification system BEFORE launch. Not at 2 AM while users are signing up.

