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:
- Name resolution. Show "Aadi" on the Instagram chat, not the raw handle. Same as you already do for phone numbers.
- 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.
- Contact card. Show the merged identity — all known handles for one human — rather than one card per network.
- "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.
- 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.
Beeper already reads macOS Contacts to resolve phone numbers — an iMessage from
+1 520-270-4861shows 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.aadion Instagram.Five things follow from reading that one field:
#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:usernameagainstCNSocialProfileKey— 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.dboraccount.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.