Skip to main content

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:

  1. 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).
  2. Discoverable handle. A member who switches discoverable on 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.