Dagorà ConnectAI
Describe the partner you need in a sentence and get the best matches from a 120-company membership, with a reason for each.
Ø1 Problem
Dagorà is a Swiss business community with a directory of more than 120 member companies. A directory is only useful if you already know who you are looking for, and most members do not. They know what they need: a logistics firm for cross-border e-commerce, a manufacturing partner in Ticino. Filtering by industry and country does not answer that question.
Ø2 Solution
A member types a sentence. It is embedded, ranked against every member profile by cosine similarity, and the top candidates go to a model with a strict brief: curate, do not summarise; only reference the data provided; never rank or criticise a company; and if none of the candidates fit, say so and suggest the member refine the query. The member gets two or three introductions with a plain-language reason for each, not a page of search results.
Ø3 Delivery
The first version was a Node.js prototype with a Qdrant vector database on a separate host. It proved the idea, and it also proved that a separate service was more than this needed. The production version lives inside the WordPress theme in PHP: embeddings sit in one MySQL table, vectors are L2-normalised on the way in so ranking is a dot product, and the index rebuilds from the admin screen in seconds. Companies arrive from HubSpot through a sync that publishes, updates, drafts or hides each one by rule, and the matcher re-embeds only profiles whose text has actually changed.
Notes from the build
- Content-hashed embeddings: a rebuild skips every company whose profile text is unchanged and prunes the ones that have gone.
- No vector database in production. Around 120 vectors of 1,536 floats rank in pure PHP faster than a network round trip.
- The model curates, it does not rank. The prompt forbids scoring or criticising members, and treats anything that is not a genuine business need as off-topic.
- Sync rules are written down in the admin screen: what happens to a new company, an updated one, a draft, an expired membership.
- The Node and Qdrant prototype is kept as a record of what was tried and why it was retired.