Businesses in Germany, Austria and Switzerland hiring freelance closers, setters and SDRs — a specialised market matched largely through personal networks.
B2B marketplace · DACH
Salearis
A two-sided marketplace matching businesses with vetted sales contractors.
- Product
- Salearis — B2B marketplace for freelance sales professionals, DACH
- Role
- Full-stack developer, contract
- Scope
- Laravel with Sanctum auth, Vue.js front end, Stripe subscriptions, DE/EN

The tension
Two audiences who want opposite things, in a market that will not tolerate a translation.
Freelancers want to be found without being exposed, and companies want to screen before committing. The platform had to hold candidate data credibly to be used at all.
A company sourcing and screening a contractor through the platform rather than around it, and billing that runs without intervention.
German first, not German as a translation layer — and candidate data handled to a standard the DACH market expects by default.
The model is subscription, not commission on placement.
The promise the product is sold on.
Profile check, data validation, competence assessment.
The product story
Verified is a process, not a checkbox.
German first
The market is addressed in its own language.
The landing view is German by default with English as the alternate, and it splits immediately into the two audiences — für Unternehmen and für Freelancer — because they are not looking for the same thing.

Narrow first
Read on a phone, decided at a desk.
The verification ladder, the figures and the FAQ all reflow to one column while keeping both audience entry points reachable.

The ladder
Profile check, data validation, competence.
Verification is presented as three named stages rather than a badge, because the claim the marketplace rests on is that a listed freelancer has actually been assessed.

Walkthrough
The platform in motion
Recorded from the live site.
The trust test
The happy path is only half the product.
A subscription lapses with live jobs posted
Billing state is separate from job state, so a lapse restricts posting without withdrawing applications candidates have already made.
A candidate withdraws
Applications are state on the job rather than a message to the company, so a withdrawal updates what both sides see rather than leaving a stale candidate in a pipeline.
A string has no German translation
Both locales are maintained together and the interface falls back visibly rather than silently, so a gap is a bug to fix rather than an English word nobody notices.
The decisions
Three moves carried the story.
One application, two sides
Both audiences run through one Laravel application behind Sanctum sessions, so a job, an application and an interview are one record rather than two views that drift.
Make verification a three-stage state machine
Profile check, data validation, then competence assessment — each a distinct state rather than a single verified flag, because the marketplace is sold on candidates having been assessed rather than merely registered. Two-factor authentication is scoped into the account for the same reason: the platform holds CVs, video introductions and performance history.
Build bilingual from the first screen
German and English are both first-class throughout rather than a locale bolted on late, because a partial translation reads as a foreign product in this market.
What I would test next
