Skip to main content

Post-Launch Referral Strategy

Transitioning from waitlist referrals to ongoing user referral program using Viral Loops.


Overview

Viral Loops supports both pre-launch (waitlist) and post-launch (ongoing referral) campaigns. After launch, transition to a referral program that rewards users for bringing in new families and providers.


Campaign Types in Viral Loops

Campaign TypeUse CaseWhen
WaitlistPre-launch signups, skip-the-linePre-launch (current)
Referral ProgramOngoing user referrals with rewardsPost-launch
Milestone RewardsUnlock perks at referral milestonesPost-launch
LeaderboardGamified competitionsSpecial campaigns
GiveawayContest-based viralityMarketing campaigns

Transition Plan

PRE-LAUNCH (Now)                    POST-LAUNCH (Feb 14+)
──────────────── ─────────────────────
Waitlist Campaign Referral Program Campaign
├── "Skip the line" ├── "Get ₹100 for each friend"
├── Email-based participants ├── User ID-linked participants
├── Referral = waitlist signup ├── Referral = registered user
└── Reward = early access └── Reward = credits/perks

Steps:

  1. Keep waitlist campaign (historical data)
  2. Create new "Referral Program" campaign in Viral Loops
  3. Configure rewards and milestones
  4. Embed widget in user dashboard (parents + providers portals)
  5. Migrate existing referral codes (optional)

Referral Program: Parents

Rewards Structure

MilestoneRewardValue
1 friend signs upAccount credit₹100 / $5
1 friend books a classBonus credit₹200 / $10
3 friends sign upFree trial class~₹500 / $25
5 friends sign up1 month premium~₹999 / $50
10 friends sign upVIP statusPriority support + perks

Referral Flow

Parent shares link

Friend visits juniro.com?ref=ABC123

Friend signs up → Parent gets ₹100 credit

Friend books first class → Parent gets ₹200 bonus

Messaging

Share prompt (in dashboard):

Love Juniro? Share with friends and earn credits!

You get ₹100 when they sign up. They get ₹100 off their first booking.

[Your link: juniro.com?ref=ABC123]

[WhatsApp] [Copy Link] [Email]

Email to referrer (on successful referral):

Subject: Your friend just joined! 🎉

Hey {firstName},

Great news — {referredName} just signed up using your link!

₹100 has been added to your account.

Keep sharing to unlock more rewards:

  • 3 friends = Free trial class
  • 5 friends = 1 month premium

Your referral link: {referralLink}


Referral Program: Providers

Rewards Structure

MilestoneRewardValue
Refer 1 providerFeatured listing1 week
Refer 3 providersReduced commission1 month (10% → 5%)
Refer 5 providersMarketing boost₹2000 ad credit
Refer a parentAccount credit₹50 per signup

Referral Flow

Provider shares link

Other provider visits juniro.com/providers?ref=XYZ789

Provider signs up & lists class → Referrer gets featured

Messaging

Share prompt (in provider dashboard):

Know other activity providers?

Invite them to Juniro and get rewarded:

  • 1 provider → Featured listing for 1 week
  • 3 providers → Reduced commission for 1 month

[Your link: juniro.com/providers?ref=XYZ789]


Technical Integration

Identifying Users Post-Login

// In parent/provider dashboard after login
import { useEffect } from 'react';

function Dashboard({ user }) {
useEffect(() => {
if (window.ViralLoops && user) {
window.ViralLoops.getCampaign().then(campaign => {
campaign.identify({
email: user.email,
firstName: user.firstName,
lastName: user.lastName,
// Link to your user system
extraData: {
userId: user.id,
userType: user.type, // 'parent' or 'provider'
city: user.city,
}
});
});
}
}, [user]);

return <ReferralWidget user={user} />;
}

Referral Widget Component

// components/ReferralWidget.tsx
'use client';

import { useState, useEffect } from 'react';

interface ReferralWidgetProps {
user: {
email: string;
firstName: string;
type: 'parent' | 'provider';
};
}

export function ReferralWidget({ user }: ReferralWidgetProps) {
const [referralData, setReferralData] = useState<{
referralCode: string;
referralCount: number;
rewards: string[];
} | null>(null);

useEffect(() => {
async function fetchReferralData() {
if (!window.ViralLoops) return;

const campaign = await window.ViralLoops.getCampaign();
const participant = await campaign.getParticipantData();

if (participant) {
setReferralData({
referralCode: participant.referralCode,
referralCount: participant.referralCount || 0,
rewards: participant.rewards || [],
});
}
}

fetchReferralData();
}, [user.email]);

const shareUrl = referralData
? `https://juniro.com${user.type === 'provider' ? '/providers' : ''}?ref=${referralData.referralCode}`
: 'https://juniro.com';

const shareText = user.type === 'provider'
? "I use Juniro to manage my kids' activity classes. Join and we both get rewards:"
: "Join me on Juniro to find great activities for your kids. Use my link and get ₹100 off:";

return (
<div className="bg-primary-50 rounded-xl p-6">
<h3 className="text-lg font-bold mb-2">
Invite Friends, Earn Rewards
</h3>

<p className="text-muted mb-4">
{user.type === 'parent'
? "Get ₹100 for each friend who signs up!"
: "Get featured when you refer other providers!"}
</p>

{referralData && (
<div className="mb-4 p-3 bg-white rounded-lg">
<p className="text-sm text-muted">Your referrals</p>
<p className="text-2xl font-bold">{referralData.referralCount}</p>
</div>
)}

<div className="mb-4 p-3 bg-white rounded-lg border">
<p className="text-xs text-muted mb-1">Your referral link</p>
<p className="font-mono text-sm break-all">{shareUrl}</p>
</div>

<div className="flex gap-2">
<a
href={`https://wa.me/?text=${encodeURIComponent(shareText + ' ' + shareUrl)}`}
target="_blank"
rel="noopener noreferrer"
className="flex-1 bg-green-500 text-white text-center py-2 rounded-lg"
>
WhatsApp
</a>
<button
onClick={() => navigator.clipboard.writeText(shareUrl)}
className="flex-1 bg-gray-200 text-center py-2 rounded-lg"
>
Copy Link
</button>
</div>
</div>
);
}

Tracking Referral Conversions

// When referred user completes key action (e.g., first booking)
async function trackReferralConversion(userId, action) {
// Get the referral code from user's signup
const user = await getUser(userId);

if (user.referredBy) {
// Notify Viral Loops of conversion
await fetch('https://app.viral-loops.com/api/v3/events', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.VIRAL_LOOPS_API_KEY}`,
},
body: JSON.stringify({
event: 'conversion',
referralCode: user.referredBy,
data: {
action, // 'signup', 'first_booking', etc.
userId,
},
}),
});
}
}

Reward Fulfillment

Automated (Credits)

// Webhook from Viral Loops when milestone reached
// POST /api/webhooks/viral-loops-reward

export async function POST(request) {
const { event, participant, milestone } = await request.json();

if (event === 'milestone_reached') {
const user = await getUserByEmail(participant.email);

switch (milestone.id) {
case 'first_referral':
await addCredit(user.id, 100, 'INR', 'Referral reward');
break;
case 'three_referrals':
await grantFreeTrialClass(user.id);
break;
case 'five_referrals':
await upgradeToPremium(user.id, 30); // 30 days
break;
}

// Send notification
await sendRewardNotification(user, milestone);
}

return Response.json({ success: true });
}

For provider rewards like "Featured listing":

  1. Viral Loops triggers webhook
  2. Internal notification to ops team
  3. Ops enables featured flag on provider profile
  4. Or: Automate via provider settings update

Metrics to Track

MetricDescriptionTarget
Referral rate% of users who share>20%
K-factorReferrals per user>0.5
Conversion rateReferred visitors → signups>30%
Referral qualityReferred users who book>50%
Cost per acquisitionReward cost / new user<₹200

Posthog Events

// Track referral funnel
posthog.capture('referral_link_shared', {
channel: 'whatsapp', // or 'copy', 'email', 'twitter'
userType: 'parent',
});

posthog.capture('referral_signup', {
referredBy: referralCode,
source: 'referral_link',
});

posthog.capture('referral_conversion', {
action: 'first_booking',
referredBy: referralCode,
value: bookingAmount,
});

Launch Timeline

WeekAction
LaunchKeep waitlist campaign active
Week 1Create post-launch referral campaign in Viral Loops
Week 2Add ReferralWidget to parent dashboard
Week 3Add ReferralWidget to provider dashboard
Week 4Analyze metrics, adjust rewards
Month 2Launch milestone campaigns

Viral Loops Pricing

Same subscription covers all campaigns:

PlanPriceParticipants
Startup$35/mo5,000
Growing$69/mo25,000
Power$149/mo75,000

Summary

PhaseCampaignReward Focus
Pre-launchWaitlistEarly access
Post-launchReferral ProgramCredits, perks
GrowthMilestones + LeaderboardGamification

Key principle: Make sharing feel natural, not pushy. Reward both referrer AND referred.