Vector embeddings, Erotic DNA profiles, GeoMatch (LocalLove) en cosine similarity voor de perfecte matches
Fastify 5 API — POST /ai/match, vector queries via Pinecone/Weaviate SDK
PostgreSQL 16 + Drizzle ORM — profiles, kink preferences, geo coords
Lucia Auth — sessie-validatie op alle matching endpoints
Pinecone of Weaviate vector store — embedding similarity + collaborative filtering
Het matching systeem combineert twee technieken: cosine similarity op vector embeddings voor profielvergelijking en collaborative filtering op gedragspatronen van gebruikers.
Elk Erotic DNA profiel wordt omgezet naar een high-dimensional embedding vector en opgeslagen in Pinecone of Weaviate. ANN-search vindt de meest gelijkende profielen in milliseconden.
1536-dim OpenAI embeddings op samengesteld profieltekst (kinks, mood, intent, bio)
Pinecone (managed) of Weaviate (self-hosted) — beide supported via adapter pattern
Cosine similarity — schaalbaar, rotatie-invariant, ideaal voor semantische vergelijking
Gedragsdata (likes, skips, chats, streams bekeken) wordt gebruikt om patronen te vinden tussen vergelijkbare gebruikers — "users like you also liked..."
Likes, super-likes, chat-initiaties, subscription conversies, stream watch-time
Matrix factorization (ALS) — periodiek getraind, resultaten gecached in Redis
Model hertraining elke 24u, real-time signals verwerkt via event queue
Vijf kernfactoren bepalen de compatibiliteitsscore. Elk profiel wordt bijgewerkt wanneer de gebruiker zijn DNA Quiz invult of voorkeuren wijzigt.
Uniek profiel op basis van de DNA Quiz
Gemeenschappelijke kink-categorieën
Realtime mood-status (flirty, chill, intense…)
Locatie-based — LocalLove radius
Wat zoekt de gebruiker? (casual, serieus, fans)
De DNA Quiz genereert een uniek profiel van 12 dimensies. Dit profiel vormt de kern van het matching algoritme en wordt omgezet naar een embedding vector.
Proximity-based matching met instelbare radius. Geo-coördinaten worden opgeslagen als PostGIS geometry in PostgreSQL 16 voor efficiënte afstandsberekeningen.
Hyperlocal — zelfde wijk of dorp
Regio — stad en omgeving
Breed — hele regio of provincie
Eén unified endpoint retourneert gerangschikte matches met compatibiliteitsscores. Intern worden vector-query, collaborative filtering en GeoFilter gecombineerd.
/ai/match
Lucia Auth vereist
Erotic DNA profiel aanmaken via quiz
Profiel → 1536-dim vector (Pinecone)
Top-K kandidaten via cosine similarity
Verwijder matches buiten gekozen radius
Collaborative filtering score toepassen
Gerangschikte lijst met score breakdown