Skip to content

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

ComponentLocationPurpose
SaveConnectionPromptsrc/components/Modal after chatting to save connection
FrensListsrc/screens/frens/Main frens screen with filters
FrenProfilesrc/screens/frens/Individual fren details
ManageVenuesModalsrc/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 anywhere

Mutual Save

Both saved each other:
✨ Shared venues: Coffee House
🏮 Both can see each other's lanterns there
👋 Priority wave option

Multiple Venues

You broadcast: Coffee House, Speakeasy
They broadcast: Coffee House
Result: Mutual at Coffee House only

Privacy 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

  1. Test components in Storybook: npm run storybook
  2. Preview in app: Navigate to #/frens
  3. Implement Firebase schema (see FRENS_SYSTEM.md)
  4. Add real-time listeners for lit lanterns
  5. Build Beacon Invites feature

Built with VitePress