I have been writing a connection app for a year. Last week I open-sourced the matching engine, and the only design choice I want to walk through is the one that took the longest to talk myself into: the matcher does not have access to photos. Not "it ignores them." Not "it deprioritizes them." It cannot see them. The TypeScript build fails if you try. If you only want the punchline, here it is. // soulmate-core/src/rank.ts export function rank ( viewer : Profile , candidate : Profile ): number ; type Profile = { prompts : PromptAnswers ; // five short text answers voice : VoiceTranscript ; // ~30 sec, kept as text intent : Intent ; // friendship | relationship | community meta : ProfileMeta ; // age band, city, language, etc. }; // no photo field. anywhere on this type. Enter fullscreen mode Exit fullscreen mode The image bytes live in a different table, behind a different read path, behind a mutualVibe boolean.…