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.