Contents
Key takeaways
- A member posts a need and gets the 3 most relevant professionals, scored on 5 criteria: trade, area, reviews, language, responsiveness.
- Instant messaging: text, photos, documents, voice notes, link previews, protected identity.
- Multi-window chat dock on the website, push notifications in the app.
- AI assistants to write and publish a need, with cost logging and a daily budget.
- PHP website, /api/v1 API and Expo app aligned feature by feature.
BusinessAffinity.fr is a professional social network that connects individuals, freelancers and trusted companies. A member posts a need, the platform shows the 3 most relevant professionals, then they talk directly in an instant messaging inbox. I designed and built the project from concept to production: the website, the API, the iOS / Android mobile app and the admin.
What the platform does
Finding a good professional is still a matter of word of mouth. BusinessAffinity.fr reproduces that habit at scale: you describe your need, and the system picks professionals for you who are nearby, skilled, well rated and responsive. Around that core, the platform brings together everything expected from a professional network:
- a news feed with posts, needs, job offers, ads, events and GIFs;
- a professional directory with satisfaction score and reviews;
- job offers from the France Travail API;
- business transfer listings fed by entreprises-a-vendre.fr;
- companies, real estate and financing sections;
- a professional mini-site generated for each pro, on its own address;
- a forum, a circle of connections, recommendations and post performance tracking.

Matching: 3 professionals, 5 criteria
The matching engine is the business core. For each need, it scores candidate professionals out of 100 points across five criteria:
- Trade (40 points): match between the need and the pro's specialty.
- Area (25 points): real distance computed from coordinates, with a decreasing score from 15 to 150 km.
- Reviews (15 points): customer satisfaction score.
- Language (10 points): same main language, or at least one shared language.
- Responsiveness (10 points): the professional's average response time, with full marks under 2 hours.
The need also sets its scope: within the city (30 km), within the region (250 km) or anywhere. Addresses are geocoded with the French government's address API. When coordinates are missing, the engine falls back on comparing city and region names. The top 3 are shown to the member, and the next results are kept in reserve.
Trust can be checked: the SIRET number is verified against the official company register, the RGE qualification is checked, and a professional is only considered reliable with enough reviews, a good satisfaction score and fast replies.

Instant messaging
A connection is only worth something if the conversation follows. BusinessAffinity.fr's inbox is designed like that of a major professional social network, with its own rules.
What you can send
- text messages, up to 2,000 characters;
- photos (5 MB max) and documents;
- voice messages recorded directly in the browser, with pause, a sound level display and automatic sending at 2 minutes;
- links shown as a rich preview: a post, a need, a job offer, an event, an ad, a pro profile, a review or a blog article appears as a card. For an external link, the page is read with a short timeout and cached, and the address is checked first to refuse internal addresses.
How messages arrive
On the Messaging page, the open conversation asks for new messages every 5 seconds, starting from the last message received. Polling stops when the tab is hidden and resumes as soon as it is visible again. Messages are marked as read when opened.
Everywhere else on the site, a chat dock at the bottom of the screen keeps conversations open while browsing. It shows 1 to 3 windows depending on the screen width, each one can be minimised and refreshes every 6 seconds. Open windows are remembered and restored when the next page loads, and the conversation list updates every 30 seconds.
In the mobile app, the conversation uses react-native-gifted-chat styled with the site's colours and refreshes every 5 seconds. Each new message triggers a push notification to the app, with a direct link to the conversation, while respecting the recipient's notification preferences.
The rules around it
- Protected identity: when an individual contacts a pro about a need, their identity can stay hidden until they choose to reveal it.
- Requests to accept: some conversations start with a request that the recipient accepts or declines.
- Several kinds of exchanges: needs, direct messages, job applications, review-related requests, support.
- Blocking a member, closing a conversation and deleting one's own messages.
- Need completed: the individual can close their need from the conversation with the chosen pro.
- Monthly message quota for individuals on the free plan, with an upgrade to Premium.



AI assistants that help, under control
The platform includes assistants built on the OpenAI API. The first one helps phrase a need, can publish it and immediately shows the recommended professionals. Another one supports the need itself: diagnosis, writing, estimate, do-it-yourself tips and photo analysis. It also suggests complementary trades.
Finding professionals for every need
A new network lacks professionals in some trades and cities. A prospecting module therefore looks for companies in the right trade near the need across several sources: Pages Jaunes, Cylex, Google Places, OpenStreetMap and the ADEME RGE directory. It finds emails on company websites, removes duplicates and respects an opt-out list. Testing rules forbid writing to real companies during trials.
One architecture for web and mobile
- Website: PHP 8 organised into controllers, models and views, MySQL, Tailwind CSS and Alpine.js, with an interface inspired by LinkedIn's layout patterns.
- API
/api/v1: uniform JSON responses, token authentication, absolute file URLs, so the app uses exactly the same data as the website. - App: Expo and React Native, with a strict parity rule: every website feature also exists in the app.
- Sign-in: email, Google, Apple, Facebook and LinkedIn, plus phone verification by code.
- Subscriptions: Stripe on the web, in-app purchases through RevenueCat on mobile.
- Languages: the website is available in French, English, German, Spanish and Italian.
- Mini-sites: each pro can get their own subdomain, created automatically on the hosting.
- Moderation: post reporting by reason and blocking of their author.

What this project shows
BusinessAffinity.fr brings together a recommendation engine, a social network, rich instant messaging, AI assistants and a mobile app aligned with the website. The site is live at businessaffinity.fr, and everything was designed and built by one person, from concept to production.
Do you have a professional network, matchmaking or messaging project? Get in touch to talk about it. You can also see all the screenshots of the project.
Frequently asked questions
How does matching between a need and professionals work?
Each candidate professional gets a score out of 100: trade (40), area (25), reviews (15), language (10) and responsiveness (10). The top 3 are shown to the member.
Is the messaging real-time?
New messages arrive without reloading the page: the open conversation is checked every 5 seconds on the Messaging page, every 6 seconds in the dock, and the app receives a push notification for each new message.
Can AI be added without runaway costs?
Yes. On BusinessAffinity.fr, each AI call is logged with its cost, a daily budget switches the service off when reached, and per-IP limits slow down abuse.