Skip to content

Use the Instagram/social handles in macOS Contacts to name, merge, and link chats #30

Description

@DavidTeju

Beeper already reads macOS Contacts to resolve phone numbers — an iMessage from +1 520-270-4861 shows as "Aadi". But it stops at phone numbers. macOS Contacts has a social profile field (CNSocialProfileKey) holding Instagram, Twitter/X, and LinkedIn handles, and Beeper ignores it entirely.

The result is that a person I have saved in Contacts — name, phone, and Instagram handle — appears in Beeper as two unrelated strangers: "Aadi" on iMessage and whos.your.aadi on Instagram.

Five things follow from reading that one field:

  1. Name resolution. Show "Aadi" on the Instagram chat, not the raw handle. Same as you already do for phone numbers.
  2. Chat merging. Link the Instagram thread to the iMessage thread as one person. Beeper already merges iMessage/SMS for the same contact; the Contacts card is the join key that would let this extend across networks.
  3. Contact card. Show the merged identity — all known handles for one human — rather than one card per network.
  4. "Open in Contacts" button. Once a chat is matched to a Contacts card, offer to open it. Also useful in reverse: prompt to save an unmatched handle.
  5. Notes sync. Beeper's chat notes and the Contacts note field are the same idea in two places. Keep them in sync, or at least show the Contacts note on the contact card.

#1 and #2 are the ones that actually matter day to day — handle-only chat titles make Instagram DMs hard to scan, and a person split across two threads means missed context.

I've implemented a version of #1 and #2 externally against the Desktop API, matching network:username against CNSocialProfileKey — it works and is quick, which suggests it's not a hard lift in-app. But it should be a first-class app feature; most users won't touch the API.

Notes on #5: I couldn't find any programmatic surface for chat notes — nothing in the API, and no notes data in the local index.db or account.db. So sync isn't currently buildable externally either way.

Platform: Beeper Desktop, macOS. Filing here since there's no public repo for the desktop app — happy to move it if there's a better venue.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions