Frens System — Quick Reference
Privacy-first reconnection through venue-bound broadcasting
Core Concept
Saving someone = Broadcasting YOUR lantern to THEM at specific venues
- You don't track them, they track you
- Venue-specific visibility (not everywhere)
- Mutual save required to see each other
- No persistent chat outside venues
User Flow
1. Meet at venue → Accept wave → Chat
2. Tap "Save Connection"
3. Choose which venues to broadcast at
4. They can now see YOUR lantern at those venues
5. If they save you back → Mutual connection! 🎉Key Features
Venue-Bound Broadcasting
- Each venue is a separate choice
- "Coffee House only" vs "Coffee House + Speakeasy"
- Prevents routine tracking
Asymmetric Visibility
- One-way save: They see you, you don't see them
- Mutual save: Both see each other at shared venues
- Always under your control
No Persistent Chat
- Messages only when both at venues
- 2-hour post-meetup window for logistics
- Beacon Invites for coordination ("I'll be there Thursday")
Components
| Component | Location | Purpose |
|---|---|---|
| SaveConnectionPrompt | src/components/ | Modal after chatting to save connection |
| FrensList | src/screens/frens/ | Main frens screen with filters |
| FrenProfile | src/screens/frens/ | Individual fren details |
| ManageVenuesModal | src/components/ | Choose broadcast venues |
Routes
#/frens- Frens list#/frens/:id- Individual fren profile
States
One-Way Save
You saved them:
📡 Broadcasting to them at Coffee House
👁️ Can't see their lantern anywhereMutual Save
Both saved each other:
✨ Shared venues: Coffee House
🏮 Both can see each other's lanterns there
👋 Priority wave optionMultiple Venues
You broadcast: Coffee House, Speakeasy
They broadcast: Coffee House
Result: Mutual at Coffee House onlyPrivacy Principles
✅ Venue-bound - Never see someone everywhere
✅ Consent-based - Each venue is a choice
✅ Asymmetric - You broadcast to them, not track them
✅ Revocable - Remove venues or connection anytime
✅ No stalking - Can't build routines or patterns
Implementation Status
- ✅ Frontend components with mock data
- ✅ Storybook stories
- ✅ Routing integrated
- ⏳ Firebase backend (next phase)
- ⏳ Real-time lantern queries
- ⏳ Beacon Invites system
Next Steps
- Test components in Storybook:
npm run storybook - Preview in app: Navigate to
#/frens - Implement Firebase schema (see FRENS_SYSTEM.md)
- Add real-time listeners for lit lanterns
- Build Beacon Invites feature