BNBConnect: the locks, written down.

CASE REPORT — 2026 · PREMIERE

A two-sided marketplace for Airbnb hosts and the trades that keep their flats guest-ready — nine service categories, nine per cent each way, and an authorisation layer that lives in a file you can diff, because neither the build nor the linter can see it.

BNBConnect — homepage

Two sides, and no reason to step outside

Premiere. BNBConnect has not been published yet. Everything below is the finished build, photographed before launch, with the client's own records in it. The live URL goes in as soon as they switch it on.

A host with a flat on Airbnb has a recurring problem and an occasional emergency: the turnover clean between guests, and the boiler that fails at ten on a Saturday night. A locksmith, a cleaner or an electrician has the opposite problem — the work exists, but finding it costs more than doing it.

A marketplace only survives if neither side has a reason to take the second job off the platform. That single sentence decided most of what follows: the fee had to be small enough to be worth paying, the payment had to protect both parties, and contact details could not be handed over before there was a booking to protect.

Screenshot: the nine service categories on BNBConnect — plumbing, turnover cleaning, locksmith and security, electrical, heating and air conditioning, handyman, appliance repair, pool and garden, and pest control
Nine trades, one flat.
Screenshot: the provider sign-up page on BNBConnect, headlined 'Word dienstverlener op BNBConnect'
The other side of the marketplace, sold on its own terms.

Navy, coral, and a calm that has to be earned

Sora for the headlines, Inter for the rest. A deep navy carries the brand, a single coral accent carries every action, and the ground is a cool off-white rather than a flat one. Corners at twelve pixels — soft enough to feel domestic, square enough to look like software that handles money.

The restraint is deliberate. A host arriving at ten on a Saturday night with water coming through a ceiling is not in the mood to be sold to.

Animation: scrolling the BNBConnect landing page from the hero through the four steps and the service categories
Nothing shouts. One coral action per screen.

Four steps, and the money moves last

Post a request. Compare the bids. Pay — into escrow, not to the provider. Confirm the work, and only then is the money released.

That last step is the whole product. The host is protected because the money has not moved; the provider is protected because it has already been collected. Neither side is asked to trust the other, which is the only arrangement that scales past the first bad experience.

Screenshot: the four steps on BNBConnect — post your request, compare quotes, pay securely up front, and the money is released when the job is done
Four steps. The money moves on the fourth.

A calculator instead of a promise

The pricing page does not describe the fee, it computes it. Type what a provider quotes and the page shows all three numbers at once: what the host pays, what the platform keeps, what the provider receives.

The model is nine per cent each way. A provider sets their own price; the host pays that plus a nine per cent service fee; the provider has nine per cent withheld at payout. On a €100 job the host pays €109, the platform keeps €18 and the provider receives €91 — and the page says so in a table, with worked examples at €50, €100 and €250. No subscription, nothing charged until a job is done.

Eighteen per cent is a real number to defend, so it is stated as a real number rather than buried behind "competitive rates".

Screenshot: the BNBConnect pricing page headlined 'Eén eenvoudig tarief: 9% + 9%', explaining the fee for hosts and for providers
The fee, stated as a number.
Screenshot: the BNBConnect fee calculator and its worked examples table at 50, 100 and 250 euro
€100 in, €109 out, €91 across, €18 kept.

Verified means somebody looked

Four promises sit on the landing page, and each one is a feature rather than a sentiment: every provider is checked by hand before they may bid; the payment is held and released on the host's confirmation; messages, including photographs of the problem, stay inside the app and stay documented; and when it goes wrong a human mediates.

That third one does more work than it looks. Keeping the conversation inside the app is what makes the dispute record exist at all — and it is why contact fields are masked until there is a booking to attach them to.

Screenshot: the four trust points on BNBConnect — only verified companies, protected payment, in-app messaging, and dispute resolution
Four promises, each one a mechanism.
Animation: the frequently asked questions accordion on the BNBConnect landing page opening and closing
The objections, answered on the page.

Meet Ben

A host in trouble does not write a good brief. Ben, the assistant on the landing page, asks what is wrong in ordinary language and turns the answer into a maintenance request a tradesman can actually price — the category, the symptom, the access, the urgency.

It is the difference between "shower broken" and a request that gets three comparable bids instead of three questions.

Animation: opening the Ben assistant on the BNBConnect landing page and the panel asking the visitor to describe their maintenance issue
Describe the problem; get a brief a tradesman can price.

The locks, written down

This is the part worth reading twice.

On a Base44 app the authorisation rules do not live in the code. They live in the entity schemas, as row-level security. Which means npm run build and npm run lint cannot see them, cannot check them, and will pass a build in which every one of them has been removed.

That is not hypothetical. Rewrite an entity schema without carrying its rls block across and every rule on it is gone, silently: nothing fails, the build is green, and the only way to find out is to look. What sits behind those rules is not decorative — the commission, the privacy of every message, the payment step, provider verification, and IBAN and KYC data.

The fix is not cleverness, it is bookkeeping. Every security-critical entity has its required rules declared in base44/rls-baseline.jsonc, each with a written reason and the server functions that enforce it. npm run check:rls dumps the live schemas, compares them against that file and exits non-zero on any deviation, printing expected against actual per entity. The rule for anyone touching the project is one line long: fix every deviation before starting other work.

Authorisation you cannot diff is authorisation you are guessing at.

Screenshot: a rendered listing of the BNBConnect rls-baseline.jsonc file, showing the declared row-level security rules for the ServiceRequest and ServiceBid entities with the written reason for each
Every rule, its reason, and the function that enforces it.

Every write goes through the back door

Follow the baseline and one design decision falls out of it: for the entities that carry money, status or personal data, the browser cannot write at all.

Writes go through server functions instead — createServiceBid, selectServiceBid, advanceServiceRequest, saveOperatorProfile, sendMessage, markMessagesRead — each running with service-role rights and doing its own authorisation check first. Making any of those entities directly writable from a browser would defeat three things at once: the fee calculation, the state machine that stops a host skipping payment, and the contact masking.

So the rule is stated in the repository rather than remembered: never loosen a rule without changing the function that enforces it.

Six ways to write an article

The content side is a small factory. Six generators produce a different article shape — listicle, comparison, news-jack, intent piece, authority piece, and a general daily article — against a taxonomy of categories and tags, with scheduling, a log of every run, an editor and an archive.

Six pieces are published so far, between 915 and 1,045 words, each on a job a host actually has: deep clean versus standard clean, preventive maintenance versus reactive repair, local locksmith versus national chain at eleven at night.

Screenshot: the BNBConnect blog index, 'Onderhoudsgids voor hosts', listing the published maintenance guides by category
Written for the job, not for the keyword.

Under the hood

Four products, one login. A host dashboard, a client area for requests and bookings, an operator side with bids, jobs, earnings and a profile, and an admin back office covering requests, operators, clients, disputes, support, retention and the whole editorial desk.

Thirty-two entities, twenty-five server functions. Including the money path — bids, payouts, withdrawal requests, disputes — and a retention sweep that ages data out rather than keeping it forever.

Personal data treated as personal data. IBAN and KYC fields are readable by their owner and an admin, and by nobody else; the rule is in the baseline with that reason written beside it.

Dutch, and written like it. Not translated. The copy is the sort a Flemish host would actually use — "gastklaar", "wissel-schoonmaak" — which matters more on this product than on most, because the audience is local by definition.

Screenshot: the BNBConnect landing page on a phone, with the request button reachable at the top of the screen
The request button, always within thumb reach.

Want the same thing, before it goes live?

BNBConnect goes public shortly. We build the product, the payment path and the authorisation around it — and we write the rules down where the next person can check them.

Book a call


Run a free website scan · More cases · JustMarket.Me