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 Type | Use Case | When |
|---|---|---|
| Waitlist | Pre-launch signups, skip-the-line | Pre-launch (current) |
| Referral Program | Ongoing user referrals with rewards | Post-launch |
| Milestone Rewards | Unlock perks at referral milestones | Post-launch |
| Leaderboard | Gamified competitions | Special campaigns |
| Giveaway | Contest-based virality | Marketing 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:
- Keep waitlist campaign (historical data)
- Create new "Referral Program" campaign in Viral Loops
- Configure rewards and milestones
- Embed widget in user dashboard (parents + providers portals)
- Migrate existing referral codes (optional)
Referral Program: Parents
Rewards Structure
| Milestone | Reward | Value |
|---|---|---|
| 1 friend signs up | Account credit | ₹100 / $5 |
| 1 friend books a class | Bonus credit | ₹200 / $10 |
| 3 friends sign up | Free trial class | ~₹500 / $25 |
| 5 friends sign up | 1 month premium | ~₹999 / $50 |
| 10 friends sign up | VIP status | Priority 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
| Milestone | Reward | Value |
|---|---|---|
| Refer 1 provider | Featured listing | 1 week |
| Refer 3 providers | Reduced commission | 1 month (10% → 5%) |
| Refer 5 providers | Marketing boost | ₹2000 ad credit |
| Refer a parent | Account 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 });
}
Manual (Featured Listings)
For provider rewards like "Featured listing":
- Viral Loops triggers webhook
- Internal notification to ops team
- Ops enables featured flag on provider profile
- Or: Automate via provider settings update
Metrics to Track
| Metric | Description | Target |
|---|---|---|
| Referral rate | % of users who share | >20% |
| K-factor | Referrals per user | >0.5 |
| Conversion rate | Referred visitors → signups | >30% |
| Referral quality | Referred users who book | >50% |
| Cost per acquisition | Reward 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
| Week | Action |
|---|---|
| Launch | Keep waitlist campaign active |
| Week 1 | Create post-launch referral campaign in Viral Loops |
| Week 2 | Add ReferralWidget to parent dashboard |
| Week 3 | Add ReferralWidget to provider dashboard |
| Week 4 | Analyze metrics, adjust rewards |
| Month 2 | Launch milestone campaigns |
Viral Loops Pricing
Same subscription covers all campaigns:
| Plan | Price | Participants |
|---|---|---|
| Startup | $35/mo | 5,000 |
| Growing | $69/mo | 25,000 |
| Power | $149/mo | 75,000 |
Summary
| Phase | Campaign | Reward Focus |
|---|---|---|
| Pre-launch | Waitlist | Early access |
| Post-launch | Referral Program | Credits, perks |
| Growth | Milestones + Leaderboard | Gamification |
Key principle: Make sharing feel natural, not pushy. Reward both referrer AND referred.