New Feature: Invite Friends via Link & Email - No More Barriers to Group Bill Splitting
Introducing the Invite Friends via Link & Email feature on ChiaHoaDon - send invitations directly, track status, and automatically add members to your expense groups.
New Feature: Invite Friends via Link & Email
Are you having trouble inviting friends to join your expense-sharing activities? Sending individual messages? Copy-pasting links? Not knowing if they've received it?
Today, ChiaHoaDon proudly launches the Invite Friends via Link & Email feature - helping you invite, track, and manage participation invitations professionally, automatically, and conveniently.
The Old Problem With Inviting Members
📋 Traditional Methods
Manual messaging:
- Copy the activity link
- Paste into Zalo, Messenger, Telegram
- Write your invitation
- Send to each person one by one
- Wait for responses...
⏰ Result: Takes 5-10 minutes every time you invite someone!
😕 Name Confusion
Problem with similar names:
- Which "An"? "An" from where?
- 3 "Minh"s in the group - invited the wrong person!
- Don't know who the invitee is
😩 Result: Wrong person invited, have to cancel and re-invite!
🚫 Hard to Invite Unregistered Users
When friends don't have an account:
- Have to ask them to register first
- After registering, come back to add them
- Expenses already incurred can't be calculated
- Forget who hasn't joined yet
😫 Result: Frustrating, time-consuming, easy to miss!
❌ No Tracking
Common questions:
- "Did they receive the link?"
- "Have they registered yet?"
- "Have they joined the activity?"
- "What if they declined?"
😩 Result: No idea about invitation status, have to ask again!
🔄 Repetitive Data Entry
When friends join:
- Have to manually add them to the activity
- Set up expense sharing again
- If friend hasn't registered, have to do it later!
😫 Result: Repeating work, prone to errors!
The New Solution: Invite Friends via Email
⚡ Send Invitations in 3 Steps
With the Invite Friends feature, you just need to:
- Enter the email of the person you want to invite
- Write a personal message (optional)
- Send - The system handles the rest!
✅ Invitation email is sent automatically ✅ Secure link valid for 7 days ✅ Track invitation status ✅ Auto-add when accepted
🎯 vs Traditional Methods
| Feature | Old Way | Invite via Email |
|---|---|---|
| Send link | Manual copy-paste | ✅ Automatic |
| Personal message | Write individual messages | ✅ Included in email |
| Track status | No way to know | ✅ Viewable |
| Auto reminders | None | ✅ Email reminder |
| Add members | Manual | ✅ Automatic |
| Not registered yet | Enter later | ✅ Temp user created |
| Accept/Decline | Not available | ✅ Invitees decide |
| Temp data | Lost on registration | ✅ Auto-migration |
🤝 Accept or Decline
Invitees have the right to:
- ✅ Accept the invitation to join the activity
- ❌ Decline if not interested or not available
Privacy:
- Invitees decide for themselves
- Not forced to join
- Notifications sent to inviter when there's a response
👤 Temporary User - No Registration Required
When sending invitation to unregistered email:
- System automatically creates a Temporary User
- Temporary User is added to activity immediately
- Can add expenses like real members
- No need to wait for registration - activity proceeds normally
When invitee registers an account:
- Click "Accept Invitation"
- Register new account
- Automatically migrate data from Temp User to Real User
- Preserve added expenses, activity history
No data loss: All information preserved!
🔄 Automatic Data Migration
Temp User + Expenses → Real User + Expenses
Automatically transferred:
- ✅ Display name
- ✅ Added expenses
- ✅ Established splits
- ✅ Activity history
Seamless experience: No need to re-enter from scratch!
How It Works
🚀 Invitation Process
Step 1: Open Invitation Dialog
From any activity:
- Click "Invite members" button
- "Invite friends" dialog appears
- Enter required information
Step 2: Enter Information
Required information:
- Email: Email address of invitee
- Display name: (Optional) Name you want them to see
Optional information:
- Personal message: Your invitation message (max 500 characters)
- Explain why you're inviting
- Introduce the activity
- Show you care
Step 3: Send Invitation
- Click "Send invitation"
- System processes:
- Creates Temp User (if not registered)
- Creates invitation with secure token
- Sends email to invitee
- Receive confirmation of successful send
📧 What Does the Invitation Email Look Like?
Email Content
The invitation email includes:
| Component | Description |
|---|---|
| Subject | "You're invited to join [Activity Name]" |
| Inviter | "[Your Name] has invited you" |
| Activity | Name and description |
| Message | Personal message from inviter |
| CTA button | "Accept Invitation" (prominent) |
| Validity | Link valid for 7 days |
| Option | "Ignore" if not interested |
Email Design
Beautiful and professional:
- Header with ChiaHoaDon logo
- Message highlighted with left border
- Prominent blue CTA button
- Responsive - looks great on all devices
- Supports Vietnamese and English
🔗 Invitation Link
Link Structure
https://chiahodan.com/invites/accept?token=ABC123XYZ...
Features:
- 32-byte secure token - impossible to guess
- Valid for 7 days from send time
- One link - one invitation - cannot be shared
- Safe - only invitee can use it
When Clicking the Link
- Logged in: Redirect to confirmation page
- Not logged in: Redirect to register → then confirm
- Link expired: Show error message
- Link already used: Show already accepted message
Invite Experience
📱 When Receiving Email
Email is designed to:
- Easily recognize who invited you
- Immediately understand what the activity is
- Make quick decisions
Possible actions:
- ✅ Accept: Click button, confirm participation
- ❌ Decline: Click "Ignore" or report not interested
- 🔗 Learn more: Click link to view activity details
👤 New Users (Not Registered Yet)
Joining process:
- Receive invitation email
- Click "Accept Invitation"
- Register new account (if no account)
- Confirm accepting the invitation
- Automatically added to the activity
- Receive success notification email
Special feature:
- Temp user info (participated before) is preserved
- No expense data lost
👤 Existing Users
Joining process:
- Receive invitation email
- Click "Accept Invitation"
- Confirm accepting the invitation
- Automatically added to the activity
- Redirected to activity page
Fast: Only 1-2 clicks needed!
Managing Invitations
📊 Management Dashboard
View All Sent Invitations
Invitation list:
| Status | Meaning |
|---|---|
| Pending | Sent, awaiting response |
| Accepted | Invitee has joined |
| Rejected | Invitee declined |
| Expired | Link expired after 7 days |
| Cancelled | Inviter cancelled |
Search and Filter
- Search by email of invitee
- Filter by status
- Search by activity
🔄 Invitation Actions
Cancel Invitation
When to cancel:
- Invitee hasn't responded after several days
- Wrong information, need to resend
- Activity has changed
How to do it:
- Go to invitation list
- Find invitation to cancel
- Click "Cancel invitation" button
- Confirm
Resend Invitation
When to resend:
- Old invitation expired
- Invitee didn't receive email
- Need to remind invitee
How to do it:
- Go to invitation list
- Find invitation to resend
- Click "Resend" button
- New email sent, new token created
📧 Notifications for Inviter
When Invitation Is Accepted
Notification email:
- Subject: "[Name] has accepted your invitation!"
- Content:
- Who accepted
- They'll appear in the activity
- Time of acceptance
Emotion: Excited, knowing who joined!
When Invitation Is Rejected
Notification email:
- Subject: "[Name] has declined your invitation"
- Content:
- Who declined
- (Optional) Reason for declining
- Time of rejection
Action: Can invite someone else!
Smart Features
🛡️ Security
Secure Token
Token is created using:
randomBytes(32) // 32 random bytes
.toString("base64") // Safe encoding
.replace(/\+/g, "-") // URL-safe
.replace(/\//g, "_")
.replace(/=/g, "");
Features:
- Impossible to guess
- 43 characters after encoding
- Each invitation has unique token
- Cannot be faked
7-Day Validity
Why 7 days:
- Enough time for invitee to check email
- Not too long to waste the link
- Security - link doesn't last forever
After 7 days:
- Link expires
- Invitee cannot use it
- Inviter can resend
🤖 Automation
Temp User (Temporary User)
When sending invitation to unregistered email:
- System creates Temp User
- Temp User is added to activity immediately
- They can add expenses like real members
- When they register, data is migrated automatically
Benefits:
- No need to wait for registration to participate
- Expense data isn't lost
- Seamless experience
Data Migration
Migration process:
Temp User + Expenses → Real User + Expenses
Preserved:
- ✅ Display name
- ✅ Added expenses
- ✅ Established splits
- ✅ Activity history
📧 Smart Email
Multi-Language Support
Automatic language:
- If invitee uses Vietnamese → Vietnamese email
- If invitee uses English → English email
- Inviter also receives notification in their language
Respect Preferences
Users can:
- Turn off email notifications
- Choose which emails to receive
- Unsubscribe from emails
System:
- Automatically respects preferences
- Doesn't send if user opted out
- Still shows in-app
Real Examples
🎉 Case 1: Inviting Friends to a Trip
Scenario:
Activity: "Da Lat Trip 2026"
Current members: 4 people
Need to invite: 2 more friends
Invitation setup:
- Email 1: [email protected]
Message: "Finally going to Da Lat! We're planning the trip, want to join? 🎒"
- Email 2: [email protected]
Message: "This summer we're going to Da Lat! Our friends are going too, join us! 🎈"
Result:
- Emails sent immediately
- 2 friends receive personalized invitations
- They click, accept
- Automatically added to trip group
- Receive new expense notifications
🏠 Case 2: Inviting Roommate
Scenario:
Activity: "District 1 Apartment Rent"
Members: 2 people already living there
Need to invite: 1 more person
Email sent:
- Email: [email protected]
Message: "Looking for someone to share District 1 apartment, are you interested? Nam and I've been here 1 year, join us!"
Special:
- Friend doesn't have an account yet
- System creates Temp User
- Can participate immediately, add utility expenses
- Everything preserved when registering
🎂 Case 3: Inviting Birthday Guests
Scenario:
Activity: "Minh's Birthday Party!"
Members: 5 organizers
Need to invite: Minh's friends
Batch emails:
- [email protected]: "It's Minh's birthday! Come celebrate! 🎂"
- [email protected]: "Birthday party Saturday night, are you free? 🎈"
- [email protected]: "We're throwing Minh a birthday party, join us! 🎁"
Convenient:
- Send multiple emails at once
- Each has personal message
- Track who received and who responded
Comparison with Traditional Methods
📊 Detailed Comparison
| Criteria | Manual Link Copy | Invite via Email |
|---|---|---|
| Send time | 2-3 minutes/time | 30 seconds/time |
| Personal message | Must write separate messages | Built into email |
| Status tracking | ❌ No | ✅ Yes |
| Auto reminders | ❌ No | ✅ Yes |
| Auto-add members | ❌ Manual | ✅ Automatic |
| Temp user | ❌ No | ✅ Yes |
| Notification emails | ❌ No | ✅ Yes |
| Security | Link can be shared | Secure token |
| Expiration | No | ✅ 7 days |
💰 Time Saved
Before:
- Each invite: 5 minutes × 3 people = 15 minutes
- Tracking: 2 minutes × 3 people = 6 minutes
- Adding members: 1 minute × 3 people = 3 minutes
- Total: ~24 minutes for 3 people
Now:
- Invite 3 people: 30 seconds × 3 = 1.5 minutes
- Automatic tracking: 0 minutes
- Auto-add: 0 minutes
- Total: ~1.5 minutes!
Saved: ~22.5 minutes = 94%!
Rules and Limits
📋 Invitation Rules
One Email - One Invitation
Cannot:
- ❌ Send 2 invitations to same email for same activity
- ❌ Spam invitations to same person
Allowed:
- ✅ Send to same email for different activities
- ✅ Resend old invitation
Already a Member
Cannot:
- ❌ Invite someone already a member
- ❌ Invite your own email
Reason: Avoid duplicates, confusion
Activity Must Be Active
Cannot:
- ❌ Invite to locked activity
- ❌ Invite to completed activity
- ❌ Invite to deleted activity
Reason: Data doesn't change, avoid confusion
⏰ Validity Period
7 Days
Rules:
- Each invitation valid for 7 days
- Counted from email send time
- Cannot change validity period
After 7 days:
- Link expires
- Status: "Expired"
- Can resend new invitation
Cancel Invitation
Who can cancel:
- ✅ Person who sent invitation
- ✅ Activity owner
When canceling:
- Invitation changes to "Cancelled"
- Email cannot be used anymore
- Invitee cannot accept
Development Roadmap
🚀 Coming Soon
Next version:
- QR Code: Scan to invite (no email needed)
- Zalo integration: Invite via Zalo API
- Email templates: Pre-written invitation templates
- Auto reminders: Resend after 3 days if no response
📅 Long-term Plans
- Analytics: Track invitation acceptance rates
- Referral: Reward for successful sign-ups
- Group link: One link for multiple activities
- Batch invite: Import email list from file
Tips for Effective Use
🎯 Writing Great Invitations
Principles
| Principle | Example |
|---|---|
| Friendly | "Hey! We're organizing..." |
| Clear | "Da Lat trip - 2 days 1 night" |
| Appealing | "Amazing destination, join us!" |
| Call to action | "Are you free? Join us!" |
Invitation Templates
For trips:
"Hi! We're planning [activity name]. Do you have time to join? Promise an amazing trip! 🎒"
For birthdays:
"This summer we're throwing [name]'s birthday party! There will be cake, games and lots of friends! 🎂"
For shared rent:
"Looking for someone to share [location] apartment. Are you interested? [Name] and I have been here a year, join us!"
📧 Inviting Multiple People at Once
How To Do It
- Open invite dialog
- Enter first email
- Write personal message for each person
- Send
- Repeat for next person
Tips
- Keep messages warm but concise
- Mention your relationship with invitee
- Highlight what's fun about the activity
📊 Tracking Invitations
Regular Checks
Daily:
- See who accepted
- Remind those who haven't responded (resend)
Before activity:
- Ensure everyone has joined
- Resend if needed
Handling Special Cases
| Situation | Solution |
|---|---|
| Wrong email | Cancel old, send new with correct email |
| Busy invitee | Resend later, or cancel |
| Invitee declined | Invite someone else |
| Link expired | Resend invitation |
Conclusion
The Invite Friends via Link & Email feature makes inviting people to join activities simple, professional, and systematic.
🎁 What You Get:
✅ Save time - Send invitations in seconds ✅ Easy tracking - Know who received and who responded ✅ Personal invitations - Write custom messages for each person ✅ Auto emails - System handles sending ✅ Reminders - Invitees won't miss out ✅ Auto-add members - No manual work ✅ Temp users - Friends can participate before registering ✅ Security - Safe token, 7-day validity
🚀 Start Today!
Try inviting friends to your next activity and experience the difference!
Invite your friends to join - no more barriers! 🎯
Have you tried the invite friends feature yet? Share your experience at [email protected] or Discord community!
Share this post if you found it helpful! 🔄