Documentation Index
Fetch the complete documentation index at: https://mintlify.com/MatthewSabia1/Joip-Web-App-2/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The JOIP Referral Program rewards you for bringing new users to the platform. When someone signs up using your referral link:- You receive: 10 credits
- They receive: 25 bonus credits
- No limits: Refer as many friends as you want (subject to rate limiting)
How It Works
1. Get Your Referral Code
Every user automatically gets a unique 8-character referral code:- 8 uppercase alphanumeric characters
- Globally unique across all users
- Generated on first account access
- Never changes once created
2. Share Your Link
Your referral link includes your encoded code:r parameter is your referral code encoded in base64url format.
3. New User Signs Up
When someone visits your referral link:-
Cookie is Set
- System stores referral code in
pending_referralcookie - Also stores
referral_source(direct or session_share) - And
referral_source_idif from shared session
- System stores referral code in
-
User Creates Account
- Goes through normal signup/login flow
- System detects pending referral cookie
-
Referral Processed
- Validates referral code
- Checks for fraud (self-referral, duplicates)
- Awards credits atomically in database transaction
- Clears referral cookies
4. Credits Awarded
Both accounts receive credits instantly:Referral Code Format
Code Structure
Raw Code:- Length: Exactly 8 characters
- Characters: A-Z and 0-9 (uppercase only)
- Validation regex:
/^[A-Z0-9]{8}$/
- Format: Base64URL encoding
- Safe for URL parameters
- Decoded server-side for validation
Code Generation
Codes are generated using cryptographically random selection:- Database unique constraint on
users.referralCode - Automatic retry with new code on collision
- Maximum 10 attempts before error
- Collision probability: ~1 in 2.8 trillion
API Endpoints
Get Your Referral Stats
GET /api/referrals/stats
GET /api/referrals/stats
Get your referral statistics and earnings.Response:Fields:
referralCode- Your unique codetotalReferrals- Number of successful referralscreditsEarned- Total credits earned from referralsreferrerCredits- Credits per referral (configurable)referredCredits- Credits new users receive (configurable)isProgramActive- Whether program is currently active
Get Referral History
GET /api/referrals/history
GET /api/referrals/history
View your referral history with pagination.Query Parameters:Privacy Note:
For privacy reasons, referred user details (email, name) are not included in the response.
page- Page number (default: 1)limit- Items per page (default: 10)
Get Referral Link
GET /api/referrals/link
GET /api/referrals/link
Get your referral code and shareable URL.Response:Usage:
Validate Referral Code
POST /api/referrals/validate
POST /api/referrals/validate
Check if a referral code is valid (public endpoint).Request Body:Response:Note:
Does not reveal the referrer’s identity for privacy.
Referral Sources
Referrals can come from two sources:Direct Referrals
Source Type:direct
When someone uses your referral link directly:
Session Share Referrals
Source Type:session_share
When someone discovers JOIP through a shared session:
- Tracks which shared session brought in the user
- Helps measure content virality
- Same credit rewards as direct referrals
Fraud Prevention
Self-Referral Prevention
You cannot refer yourself:Duplicate Prevention
Each user can only be referred once:- Database unique constraint on
userReferrals.referredUserId - Check performed in transaction with row locking
users.referredByfield tracks referrer
Rate Limiting
To prevent abuse, referrals are rate-limited: Default Limits:- Maximum 10 successful referrals per hour per referrer
- Configurable via admin settings
Code Validation
Strict validation prevents malformed codes:Database Schema
Users Table
Referral-related fields:User Referrals Table
Tracks all successful referrals:Referral Settings Table
Admin-configurable settings:Referral Processing Flow
Step-by-Step Process
Transaction Atomicity
The entire referral process happens in a single database transaction:- Either everything succeeds or nothing happens
- No partial referrals
- No lost credits
- No race conditions
Admin Features
View Referral Statistics
GET /api/admin/referrals/stats
GET /api/admin/referrals/stats
Get system-wide referral statistics (admin only).Response:
Update Referral Settings
PATCH /api/admin/referrals/settings
PATCH /api/admin/referrals/settings
Update referral program configuration (admin only).Request Body:Response:
Returns updated settings object.Note:
Changes affect future referrals only. Existing referrals are not retroactively adjusted.
View Recent Referrals
GET /api/admin/referrals/recent
GET /api/admin/referrals/recent
Get recent referrals with user details (admin only).Query Parameters:
limit- Number of results (default: 50)
Best Practices
For Users
-
Share Responsibly
- Only share with genuinely interested people
- Don’t spam or use deceptive tactics
- Explain what JOIP is before sharing link
-
Track Your Success
- Check
/api/referrals/statsregularly - Monitor which sharing methods work best
- Use session shares to showcase content
- Check
-
Maximize Referrals
- Share your best sessions publicly
- Include referral link in social media bios
- Engage with community to build trust
For Developers
-
Always Validate Codes
-
Set Secure Cookies
-
Clear Cookies After Processing
-
Log Referral Events
Troubleshooting
Referral not processed
Referral not processed
Possible Causes:
- User already had an account
- Self-referral attempt
- Invalid referral code
- Rate limit exceeded
- Referral program disabled
- Check server logs for referral processing errors
- Verify referral code exists:
SELECT * FROM users WHERE referral_code = 'CODE' - Check if user already referred:
SELECT referred_by FROM users WHERE id = 'USER_ID' - Verify program is active:
SELECT is_active FROM referral_settings
Credits not awarded
Credits not awarded
Possible Causes:
- Credits initialization failed
- Transaction rollback due to error
- Database connection issue
- Check if referral record exists:
SELECT * FROM user_referrals WHERE referred_user_id = 'USER_ID' - Check credit transactions:
SELECT * FROM credit_transactions WHERE user_id IN ('REFERRER_ID', 'REFERRED_ID') - Review server logs for transaction errors
Invalid referral code error
Invalid referral code error
Possible Causes:
- Code format incorrect (must be 8 chars, A-Z0-9)
- Code doesn’t exist in database
- Encoding/decoding error
Rate limit exceeded
Rate limit exceeded
Cause: Referrer has made 10+ successful referrals in the past hourSolution:
- Wait for rate limit window to pass (1 hour)
- Admin can adjust limit:
UPDATE referral_settings SET max_referrals_per_hour = 20
Analytics & Tracking
Referral Metrics
Track these metrics to measure program success:-
Conversion Rate
-
Credits Per User
-
Source Distribution
-
Top Referrers
Activity Logging
Referral events are logged in the activity system:Future Enhancements
Planned improvements to the referral system:-
Tiered Rewards
- More credits for milestone referrals (10, 25, 50, 100)
- Bonus rewards for high-quality referrals (active users)
-
Referral Contests
- Monthly leaderboards
- Prizes for top referrers
-
Custom Referral Codes
- Allow users to set vanity codes
- Validation for uniqueness and appropriateness
-
Referral Dashboard
- Visual analytics
- Referral timeline
- Conversion funnel
-
Social Sharing Integration
- One-click sharing to Twitter, Discord, Reddit
- Pre-written share messages
- Referral link shortening
Related Documentation
- Credits System - How credits work
- Authentication - User account creation
- Profile Management - View referral stats in profile