Sperare · MARKETPLACE

Finding a consultant shouldn't feel like a gamble.

A marketplace for expats and migration offices — verified consultants, money held in escrow, and every document in one encrypted vault.

Role
Solo full-stack engineer & product designer
Duration
9 months
Status
Private beta
Scope
Product design · backend · infrastructure
Consultant matched
Payment secured
Visa in review
Verified consultants.
Every consultant is identity-verified with real credentials. Clients discover, compare and choose with confidence.
Escrow payments.
Money is held safely and released against milestones — Stripe Connect escrow, never paid up front.
One encrypted vault.
Documents, timeline and status in one place — multi-language, for clients and consultants alike.
TWO SIDES, ONE SYSTEM
For the client
  • Guided intake maps your case before you pay anyone
  • Compare verified consultants by country and visa type
  • Track every milestone, document and appointment in-app
For the consultant
  • A real CRM: pipeline, cases, calendar, team roles
  • Escrow removes the awkward money conversation
  • Verified badge turns trust into distribution
THE HARD PART

Immigration data is passports, bank statements and biometrics. Trust is the product, not a feature.

Money that must not half-move.
Escrow is the whole product promise, so the state machine is the whole engineering problem. Every transition has to be idempotent and every webhook replay-safe — a transfer that half-completes is worse than one that fails outright. Disputes can freeze the flow at any point without stranding either side.
fund → milestone → releasedispute hold
Row-level security, in practice
A client can't reach another client's documents or chat; a consultant can't see a case they don't belong to. Enforced in Postgres, not in the app layer — and trust fields stay unwritable from the client entirely.
Postgres RLSservice-role writes
Erasure that actually erases
Tenant isolation, row-level access and crypto-shredding for erasure — designed for KVKK and GDPR from the schema up, not bolted on before launch.
KVKKGDPR
React NativeExpo SDK 56Supabase (Postgres, RLS)Stripe ConnectKYC