Back to Home

Case Studies

Two flagship projects showing the full product lifecycle: problem identification, decision-making, execution, and honest post-mortems.

Case Study #1

STARTUP-MONITOR (now Craffr)

AI-powered lead monitoring for freelancers - a B2B SaaS that solved a real problem but failed commercially due to GTM mistakes.

━━ THE PROBLEM ━━

What pain existed?
Freelancers and small agencies waste 5-10 hours/week manually scanning Reddit (r/forhire, r/freelance), Hacker News "Who is Hiring" threads, Indie Hackers, and Product Hunt for potential leads. By the time they find a relevant post ("looking for a developer to build X"), someone has already responded - often within 15-30 minutes.

Who experienced it?
Solo freelancers and 2-5 person dev agencies charging $5K-50K per project. Specifically: full-stack developers, designers, and no-code builders competing for work on public forums.

Why did existing solutions fail?
• Generic keyword alerts (Google Alerts, Reddit notifications) produce 90% noise
• Zapier/IFTTT require manual setup for each subreddit + can't score intent
• Manual monitoring is time-intensive and you miss posts outside your timezone
• No tool existed that combined multi-platform monitoring + AI intent scoring + real-time alerts

How did you validate the problem existed?
• DMing freelancers on reddit and asking "how do you find clients?" → Several responses mentioned manual Reddit scanning and Posting

━━ CONSTRAINTS ━━

Tech: Must use serverless (Vercel) to minimize ops overhead. No mobile app dev time.

Market: Competing with free alternatives (manual scanning) and established tools (Apollo, LinkedIn Sales Nav) that don't focus on Reddit/HN

━━ OPTIONS I CONSIDERED ━━

Option A: Chrome Extension (Client-Side Scraping)
Users install extension → scrapes Reddit/HN while browsing → highlights high-intent posts
Rejected because: Only works when user is actively browsing. Misses posts outside browsing hours. No multi-platform aggregation.

Option B: Simple Keyword Matching (No AI)
Monitor platforms for exact keyword matches ("need developer", "hiring freelancer") → send all matches
Rejected because: 90% false positive rate. "I'm offering development services" vs "I need a developer" both match "developer". Users overwhelmed with noise.

Option C: Full Automation with AI Scoring (What I Built)
RSS/API monitoring → AI scores 0-100 based on buying intent + business context → instant alerts for 80+ scores
Chose because: Scalable to 1000+ users with same infrastructure cost. AI can detect nuanced intent ("looking to build" vs "just built"). Real-time monitoring catches posts within minutes of posting.

━━ KEY DECISIONS ━━

DECISION #1: AI-Powered Intent Scoring (Claude API) vs Simple Keyword Matching

CONTEXT: Keywords alone produce too many false positives. "Looking for developer" could be informational ("looking for developer tips") vs transactional ("looking for developer to hire"). Need to understand context, urgency, budget signals.

TRADE-OFF: Higher API cost ($0.02/lead vs $0/lead for keywords). Slower processing (500ms/post vs instant). But 3x better signal-to-noise ratio (70% relevant vs 20% with keywords).

OUTCOME: Intent detection worked well technically - users loved getting only high-quality leads. However, didn't save the product from GTM failure (see post-mortem).

DECISION #2: Two-Process Architecture (Vercel + Railway Worker)

CONTEXT: Vercel has 60-second timeout for serverless functions. Monitoring 100 users × 15 keywords × 4 platforms = 15-20 minute cron job. Can't run on Vercel API routes. Options: (a) AWS Lambda with longer timeout, (b) DigitalOcean VPS, (c) Railway background worker.

TRADE-OFF: Added deployment complexity (two separate deploys). Worker needs separate environment variables, logging, health checks. But: Railway's built-in cron scheduling + $5/month pricing + easy Postgres connection made it worth it vs managing AWS infrastructure.

OUTCOME: Architecture was solid — this was the strongest technical component. Worker ran 24/7 without issues. Would reuse this pattern for future projects with long-running background jobs.

DECISION #3: Three-Cron Strategy for Rate Limit Management

CONTEXT: Reddit RSS throttles at ~500 requests/day. 100 users × 15 keywords = 1500 requests. Single cron job would hit rate limits and miss leads for 2/3 of users. Need to split monitoring into multiple cron jobs that stay under limits.

TRADE-OFF: Cron complexity (3 separate jobs with different schedules). Some users get delayed monitoring (3-hour cycle for expanded keywords vs 15-min for HN/PH). But avoids 429 errors and ensures all users get coverage.

OUTCOME: Worked but fragile. Reddit still occasionally throttled. Realized this architecture doesn't scale beyond 150-200 users without moving to official Reddit API (requires OAuth, rate limits per user).

━━ WHAT I BUILT ━━

Scope (Features in V1)

  • Multi-platform monitoring: Reddit (RSS), Hacker News (API), Product Hunt (API), Dev.to (RSS)
  • AI lead scoring: Claude 3.5 Sonnet analyzes post + user's business context → 0-100 score
  • Custom keyword tracking: Users add 5-15 keywords, system expands with synonyms (capped at 15 variations)
  • Real-time email alerts: High scores (80+) trigger instant email with post link + AI reasoning
  • Dashboard: View all leads, filter by score/platform, mark as "contacted"
  • Three subscription tiers: Trial (100 leads/day), Starter ($15/month, 500 leads/day), Pro ($49/month, 2000 leads/day)

Features Cut (To Ship Faster)

  • CRM integration (Pipedrive, HubSpot) users requested but low priority
  • Lead response templates (originally planned, cut to ship faster)
  • Browser extension for one-click "mark contacted" (stayed with email workflow)

Architecture (High-Level)

┌─────────────────┐
│  Next.js App    │  ← Vercel (frontend + API routes)
│  - Auth (Supabase)
│  - Dashboard
│  - Stripe webhooks
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  Supabase DB    │  ← PostgreSQL (users, leads, profiles)
│  - Row-level security
│  - Real-time subscriptions
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  Railway Worker │  ← Background cron jobs
│  - monitor-platforms (15min): HN/PH/Dev.to
│  - monitor-reddit-rss (30min): Reddit original keywords
│  - monitor-reddit-expanded (3hr): Reddit expanded keywords
│  - score-leads (5min): AI scoring queue processor
└─────────────────┘
         │
         ▼
┌─────────────────┐
│  Claude API     │  ← AI scoring (Anthropic)
└─────────────────┘
         │
         ▼
┌─────────────────┐
│  Resend         │  ← Email delivery
└─────────────────┘

Tech Stack Choices & Why

  • Next.js 15 (App Router): Server components reduce client JS. Built-in API routes eliminate separate backend.
  • Supabase (PostgreSQL): Built-in auth + realtime + RLS policies. Faster than building custom auth with Clerk/Auth0.
  • Claude 3.5 Sonnet: Best prompt-following for structured output (JSON scores). GPT-4 hallucinated more on intent detection.
  • Railway (Worker): $5/month vs $50/month for DigitalOcean. Built-in cron scheduling + Postgres connection.
  • Stripe (Billing): Industry standard. Webhook handling for subscription lifecycle (trial → paid → churn).
  • Resend (Email): Simpler than SendGrid. React email templates compile to HTML automatically.

Demo & Screenshots

Full product walkthrough: keyword setup, AI scoring explanation, email alerts, dashboard filtering (3:42 minutes)

━━ GTM EXPERIMENTS ━━

Product Hunt Launch

What I tried: Scheduled launch for Tuesday 12:01am PT. Pre-announced on Twitter (50 followers) and Indie Hackers. Asked friends to upvote.

Result: 10 upvotes, ~30 visitors.

Cold DMs to Freelancers

What I tried: Found ~450 freelancers on Reddit using Craffr actively posting about "finding clients is hard." Sent personalized DMs offering free 5-day trial.

Result: 12% response rate, 40+ trial signups, 0 conversions. Feedback: "I don't check Reddit daily anyway and Reddit full of scammers" and "I can do this for free"

Messaging Iterations

  • V1 (Weeks 1-2): "Stop wasting time on Reddit. Get high-intent leads delivered to your inbox." → CTR: 2%
  • V2 (Weeks 3-6): "AI-powered lead monitoring for freelancers" → CTR: 1.5% (worse)
  • V3 (Weeks 7-12): "Reply to clients before your competitors. Automated Reddit/HN monitoring." → CTR: 3% (best)

━━ RESULTS ━━

Acquisition Metrics

  • • Total visitors: ~500
  • • Trial signups: 50
  • • Paid conversions: 0
  • • Conversion rate: 0%

Revenue & Costs

  • • Revenue: $0
  • • Total spend: $100 (1 months)
  • • Time invested: ~200 hours

What Worked

  • AI intent scoring was accurate - users loved getting only relevant leads (70% relevance vs 20% with keyword alerts)
  • Two-process architecture (Vercel + Railway) was solid and scalable to 1000+ users
  • Email delivery was reliable (99% inbox rate via Resend)
  • Three-cron strategy successfully navigated Reddit rate limits
  • Technical execution was strong - product worked as designed

What Failed

  • Wrong ICP: Freelancers want free tools, not $49/month SaaS. Should have targeted agencies with higher budgets.
  • Over-reliance on organic: Reddit bans self-promotion. SEO takes 6-12 months. Needed paid acquisition or partnerships.
  • Targeted wrong segment: Users posting on reddit and asking for jobs are gig workers who have low payment thresholds.

━━ POST-MORTEM: WHAT I LEARNED ━━

If I started over today, I would...

  • Keep it free forever and probably identify Reddit users who post genuine repeat jobs. This would help not only in leads but also which users not scammer.
  • Charge $10/month for AI, and once scaled find alternate ways of paymemts

The biggest mistake was...

Building for 3 months before validating willingness to pay. I interviewed freelancers who said "I'd pay $15-25/month" but never asked them to actually pay upfront. Words ≠ money. Should have run a 2-week manual experiment: "Pay me $49 today, I'll send you 10 hand-curated leads per day for 30 days." If 5 people paid, THEN build automation. Zero people paying = wrong ICP or wrong pain point.

The thing I got right was...

Technical architecture and AI implementation. The two-process setup (Vercel + Railway) was elegant and scalable. AI intent scoring actually worked - 70% precision vs 20% for keyword matching. If I had gotten GTM right (direct sales to agencies), the product would have worked. This taught me that execution excellence means nothing without distribution. 10/10 product + 2/10 GTM = failure. 7/10 product + 9/10 GTM = success.

Case Study #2

WATZY (WhatsApp Store Creator)

No-code storefront for micro-sellers in emerging markets - targeting WhatsApp-first commerce.

━━ THE PROBLEM ━━

What pain existed?
Micro-sellers in India (home bakers, jewelry makers, resellers) sell via WhatsApp catalogs (PDF/images). Customers place orders via text → seller manually tracks inventory, calculates totals, shares payment links. No storefront, no cart, no automated checkout.

Who experienced it?
Solo micro-entrepreneurs in tier 2/3 Indian cities with:
• 10-100 products (homemade goods, resold items, small inventory)
• ₹5-30K monthly revenue ($60-360)
• Customers on WhatsApp (80%+ of transactions happen via WhatsApp Business)
• No technical skills (can't code, struggle with Shopify)

Why did existing solutions fail?
• Shopify: Too expensive + overkill features (inventory management, multi-channel, apps)
• Instamojo/Razorpay Pages: Payment links only - no product catalog, no cart, no branding
• WhatsApp Business Catalog: Limited to 500 products, no checkout flow, no payment integration

How did you validate the problem existed?
• Interviewed 5 home bakers (through family connections): 2 used WhatsApp catalogs
• Spoke to a jewelry reseller: she spent 2 hours/day manually responding to "price?" messages
• Looked at WhatsApp Business download numbers (500M+ globally) → clear demand for commerce tooling

━━ CONSTRAINTS ━━

Tech: Must work on mobile (sellers don't have laptops). WhatsApp API requires Twilio Business Account ($$$) or unofficial libraries (risk of ban).

Market: Competing with incumbents (Shopify, Instamojo) and WhatsApp's native catalog feature. Target users have near-zero willingness to pay.

━━ OPTIONS I CONSIDERED ━━

Option A: WhatsApp Bot (Automated Checkout via Chat)
Customer texts product name → bot responds with price/image → "add to cart" → checkout via WhatsApp
Rejected because: Twilio WhatsApp API costs $0.005/message (₹0.40). 100 customers × 10 messages/day = ₹400/day ($5/day). Can't charge sellers ₹12K/month to break even. Unofficial WhatsApp libraries risk account bans.

Option B: Standalone Storefront (Web App with WhatsApp Redirect)
Seller creates storefront (yourname.watzy.com) → customers browse products → add to cart → checkout redirects to WhatsApp with pre-filled order message → seller receives order, sends Razorpay link
Chose because: No WhatsApp API costs (just uses "click to chat" links). Works on mobile web (no app install). Seller gets shareable link for Instagram bio / WhatsApp status. Freemium model: free tier + ₹199/month ($2.50) for custom domain + payment integration.

━━ KEY DECISIONS ━━

DECISION #1: WhatsApp-First Checkout vs In-App Payment

CONTEXT: Razorpay integration would allow in-app checkout (customer pays on Watzy.com, seller receives money). But: requires business registration (most micro-sellers are unregistered), 2% transaction fee, and 7-day payout cycle. WhatsApp checkout = customer places order → seller manually sends Razorpay link via WhatsApp.

TRADE-OFF: WhatsApp checkout is manual (seller still needs to send payment link). But: no business registration needed, seller controls timing (can collect cash on delivery if preferred), and customers trust WhatsApp more than a random .com website.

OUTCOME: Sellers already send payment links manually." If I had forced in-app Razorpay, 80% of sellers wouldn't have been able to use the product (no GST registration).

DECISION #2: Supabase vs Firebase (Backend)

CONTEXT: Need auth (seller login), database (products, orders), storage (product images). Firebase has better documentation + more tutorials. Supabase is newer but uses PostgreSQL (more powerful queries) + built-in Row Level Security (RLS).

TRADE-OFF: Firebase = easier onboarding, more StackOverflow answers. Supabase = less mature, fewer tutorials, but SQL queries are more flexible (can do complex joins for "recently added products by similar sellers").

OUTCOME: Chose Supabase. PostgreSQL was overkill for MVP but made it easier to add features later (product search, inventory alerts). RLS policies simplified multi-tenancy (each seller sees only their own products). Would choose Supabase again.

━━ WHAT I BUILT ━━

Scope (Features in V1)

  • Product catalog builder: Add products (name, price, description, image), organize into categories
  • Storefront customization: Logo, banner, accent color, WhatsApp number
  • Shopping cart: Customers add products to cart, see total, proceed to checkout
  • WhatsApp checkout: Cart redirects to WhatsApp with pre-filled message ("Hi, I want to order: Product A x2, Product B x1. Total: ₹500")
  • Order tracking: Sellers see incoming orders (from WhatsApp messages), mark as "completed"
  • Mobile-first design: 90% of sellers use mobile, so entire admin panel works on small screens

Features Cut

  • In-app payments (Razorpay integration) - too complex for MVP, sellers preferred WhatsApp links
  • Inventory management - sellers wanted it but MVP didn't need it (they track manually in notebooks)
  • Customer accounts - customers didn't want to "sign up", just wanted to browse and order via WhatsApp
  • Analytics dashboard - originally planned traffic/sales graphs, cut to ship faster
  • Multi-language support - English-only MVP (can add Hindi later if validated)

Tech Stack

  • Next.js 13 (App Router): Server components for faster mobile load times. API routes for CRUD operations.
  • Supabase (PostgreSQL + Storage): Auth, database, image storage. RLS policies for multi-tenancy (each seller sees only their products).
  • Tailwind CSS: Mobile-first design. Easier than custom CSS for responsive layouts.
  • Vercel: Auto-deploy from GitHub. Free tier sufficient for MVP (< 10K visitors/month).
  • WhatsApp Click-to-Chat: Free "wa.me" links (no API needed). Pre-fill message with cart contents.

Screenshots - Dashboard Analytics

Watzy Dashboard - Monthly Target and Order Metrics
Watzy Dashboard - Store Management Interface

Seller dashboard showing order tracking, revenue metrics, conversion rate, and store management tools

━━ GTM EXPERIMENTS ━━

Instagram DMs to Home Bakers

What I tried: Found 30 home bakers on Instagram (tagged #homebakerjaipur, #delhicakes). Sent DM: "Hi! Noticed you share product photos on Instagram. Want a free website to showcase your menu + take orders via WhatsApp?"

Result: 10% response rate (3 replies), 2 signups, 1 active user (posted 12 products, got 0 orders in 30 days).

Facebook Groups (Small Business India)

What I tried: Posted in 5 FB groups ("Women Entrepreneurs India", "Small Business Owners"). Offered free setup help.

Result: 20 signups from FB. All on free tier. 80% never added products (signed up but didn't use). 20% added 5-10 products but got zero customer traffic (didn't promote their Watzy link).

WhatsApp Status Updates (Seller Outreach)

What I tried: Asked early users to share their Watzy storefront via WhatsApp status ("Check out my new online store!").

Result:3/50 sellers actually posted their link on WhatsApp status. Traffic was minimal (5-10 clicks per status). Sellers said "my customers already know my WhatsApp number, why would I send them to a website?"

Pricing Experiments

  • Month 1-2: 100% free (no paid tier) → 5 signups, validated problem exists
  • Month 3-4: Added ₹199/month tier (custom domain, no branding) → 0 upgrades
  • Month 5: Tried ₹99/month (reduced price) → still 0 upgrades. Sellers said "too expensive"

━━ RESULTS ━━

Acquisition Metrics

  • • Total signups: 5 (5 micro-sellers)
  • • Paid conversions: 0
  • • Conversion rate: 0%

Revenue & Costs

  • • Revenue: ₹0 ($0)
  • • Total spend: ₹0
  • • Time invested: ~150 hours
  • • Opportunity cost: Moderate (overlapped with Craffr development)

What Worked

  • Product was simple enough for non-tech users - 80% successfully added products without help
  • WhatsApp checkout worked - customers didn't mind being redirected (already used WhatsApp for everything)
  • Mobile-first design paid off - 95% of sellers used only mobile, never logged in on desktop
  • Supabase was the right choice - RLS made multi-tenancy easy, no security issues

What Failed

  • Wrong ICP (again): Micro-sellers can't/won't pay for software. Need to target businesses making ₹1L+/month ($1200+), not ₹15K/month ($180).
  • No distribution advantage: Sellers already had WhatsApp + Instagram. Watzy didn't unlock a new customer channel - just made existing workflow slightly easier.

━━ POST-MORTEM: WHAT I LEARNED ━━

If I started over today, I would...

  • Target businesses making ₹1L+/month ($1200+), not micro-sellers making ₹15K/month ($180). Higher revenue = higher willingness to pay.
  • Solve a distribution problem, not a workflow problem. Watzy made WhatsApp checkout easier, but didn't help sellers find NEW customers. Should have built "Instagram → WhatsApp sales funnel" tool (auto-respond to DMs, qualify leads, send them to storefront).

The biggest mistake was...

Building for a market with zero willingness to pay. I assumed "micro-sellers need this tool" meant "micro-sellers will pay for this tool." But people making ₹15K/month ($180) don't budget for SaaS - they use free tools (WhatsApp, Instagram, Google Forms). I should have targeted businesses making ₹5L+/month ($6K+) who already pay for tools (domain, hosting, ads).

The thing I got right was...

Understanding the WhatsApp-first commerce paradigm. In India, WhatsApp isn't just messaging - it's the primary commerce channel for small businesses. Customers trust WhatsApp payments more than website checkouts. By building "WhatsApp-first checkout" (not forcing in-app Razorpay), I aligned with actual user behavior. This insight is valuable for future India-focused products.

━━ WHAT I'D DO NEXT (If I Continued) ━━

3-Month Roadmap If I Refocused on Higher-Paying Vertical:

  • Month 1: Target boutique clothing stores (₹5-15L revenue/month). They already sell on Instagram but lack storefront. Sell "Instagram → WhatsApp sales funnel" at ₹999/month: auto-post products, DM auto-responder, link to Watzy storefront.
  • Month 2: Add inventory sync (connect to existing Excel sheet / Shopify export). Boutiques have 200-500 products - manually adding to Watzy won't work. Build CSV import + Shopify integration.
  • Month 3: Build "WhatsApp CRM": Track which customers ordered what, send follow-up messages ("Your order is ready!"), upsell ("Customers who bought X also liked Y"). Charge ₹1999/month for CRM tier.
  • Month 4-6: Expand to restaurant online ordering. Restaurants already use WhatsApp for takeout. Build menu builder → WhatsApp checkout → kitchen order printer integration. Target restaurants making ₹3-10L/month.

Why I chose to pause instead:

By month 5, both Watzy and Craffr had 0 paying customers. I was spread across two failing products, both needing major pivots. The lesson was clear: Stop iterating on products with no revenue. Either (a) validate willingness to pay FIRST (sell manual service before building automation), or (b) move on to a new idea where ICP has proven budget for tools. I chose to pause both and reflect on what went wrong (ICP selection, GTM sequencing).

━━ DOWNLOADABLE ARTIFACTS ━━