Friends
Status: Proposed 2026-09-24
Friends are The Trick Book's Homies with the discovery model replaced. A friendship is mutual, private, and made on purpose. It is the key that unlocks friends-only posts and direct messages.
How you find friends
There is no search by name. There are two paths:
- Invite code. A member generates a short code (or shows it as a QR) and hands it to someone at an event, a potluck, a sanctuary shift. The other member enters it; both are now friends. Codes expire in 7 days and can be single-use or multi-use (for a table at a potluck).
- Discoverable handle. A member who switches
discoverableon can be found by exact handle. The result is "found, send request", not a profile. The request is accepted or ignored; ignoring is silent.
This is slower than "people you may know". That is the point. The threat model treats a friends-of-friends graph as something the product must not build.
What friends can see
- Each other's handle and avatar.
- Posts with
visibility: 'friends'. - Each other in direct messages.
- Nothing else: no area, no Groves, no RSVPs, no friends list. Friend lists are never shown to anyone but the owner.
What ships in v1
- Invite codes with QR, expiry, and use count.
- Discoverable handle lookup, off by default.
- Friend requests (from a lookup), accept, ignore, remove.
- The friends list for the owner, with remove.
Data and visibility
friendships (sorted pair, unique), friend_invites. Both private to the members involved. See the data model.
API
GET /api/friends, GET /api/friends/requests, POST /api/friends/invites, POST /api/friends/invites/:code/accept, POST /api/friends/requests (by discoverable handle), POST /api/friends/requests/:id/accept, DELETE /api/friends/:userId.
Screens
Web: /app/friends. Mobile: reached from the Home tab and from Messages. The invite code screen is one tap from Home because it is used in the field.
Open questions
- Whether removing a friend should also delete the shared conversation. Proposal: no; the conversation stays readable until retention removes it, but neither party can send.
- Blocking. Proposal: v1 ships remove plus report; a block that also hides Grove posts is M3.