Status: Done Phase: Core Functionality (Phase 2) Priority: High GitHub Issue: #4
This feature lets you capture and remember the meaningful moments you share with friends. Every coffee date, dinner party, hike, or spontaneous meetup becomes part of your friendship story. Encounters help you build a rich history of shared experiences with the people who matter most.
- Make it simple to log encounters with friends as they happen
- Create a searchable archive of shared memories
- Help you see patterns in your friendships (who you meet, where, how often)
- Build a comprehensive timeline of your social life
- Each encounter includes:
- Title (required): A memorable name for the encounter (e.g., "Coffee at Café Luna", "Sarah's Birthday Dinner", "Hiking in the Alps")
- Date (required): When the encounter happened
- Friends (required): One or more friends who were part of this encounter
- Location (optional): Where it took place (can link to existing address or free-text)
- Description (optional): Notes, memories, or details about what happened
- Automatic display of the most recent encounter per friend
- Time span since last encounter (e.g., "23 days ago")
- Visual indicators for friends you haven't seen in a while
- View all encounters with a specific friend
- View all encounters at a specific location
- Filter encounters by date range
- Search encounters by title or description
- Link multiple friends to a single encounter
- See which friends you often meet together
- Track group dynamics over time
- As a user, I want to log an encounter with a friend so I can remember when we last met
- As a user, I want to see all my encounters with a specific friend to review our shared history
- As a user, I want to add a location to an encounter so I can remember where we met
- As a user, I want to add multiple friends to an encounter when we meet as a group
- As a user, I want to search my encounters by title or description to find specific memories
- As a user, I want to see how long it's been since I last met each friend
encounters.encounterstable:id(serial, primary key) - internal use onlyexternal_id(uuid, unique, not null, default gen_random_uuid()) - for APIuser_id(integer, references auth.users on delete cascade)title(text, not null)encounter_date(date, not null)location_text(text, optional free-text location)location_address_id(integer, optional reference to geodata.addresses on delete set null)description(text, optional)created_at(timestamptz, not null, default current_timestamp)updated_at(timestamptz, not null, default current_timestamp)- Indexes:
external_id,user_id,encounter_date - Trigger: auto-update
updated_aton changes
encounters.encounter_friendsjunction table:id(serial, primary key) - internal use onlyexternal_id(uuid, unique, not null, default gen_random_uuid()) - for APIencounter_id(integer, references encounters.encounters on delete cascade)friend_id(integer, references friends.friends on delete cascade)created_at(timestamptz, not null, default current_timestamp)- Unique constraint on (encounter_id, friend_id)
- Indexes:
external_id,encounter_id,friend_id
GET /api/encounters- List all encounters (with pagination and filters)GET /api/encounters/:id- Get encounter detailsPOST /api/encounters- Create new encounterPUT /api/encounters/:id- Update encounterDELETE /api/encounters/:id- Delete encounterGET /api/friends/:id/encounters- Get all encounters with a specific friendGET /api/friends/:id/last-encounter- Get most recent encounter with a friend
- Encounter list view (chronological)
- Encounter detail view
- Quick-add encounter form
- Friend selector (multi-select)
- Location picker (with autocomplete from existing addresses)
- Encounter card component
- "Last seen" indicator on friend cards
- Users can log an encounter in under 30 seconds
- Encounter list loads in <500ms
- Friend's last encounter displays correctly on friend detail page
- Epic 1: Friend Management (must be complete)
- Epic 19: Geodata (for location addresses, already implemented)
- Date picker components
- Photo attachments (may add in future enhancement)
- Duration tracking
- Automatic encounter detection
- Calendar integration/sync
- Epic 3: Reminder System (can use encounter data for "time to reach out" reminders)
- Epic 8: Activity Timeline (displays encounters in timeline view)
- Epic 9: Dashboard & Insights (visualizes encounter patterns)