Shayan
← Home

Checkable credentials, not a phone number

Before a client posts anything, they want to know who they are dealing with. A profile shows identity and mobile verified, references checked, a trade credential with its expiry date, business insurance, a rating and a count of finished jobs in that trade. It deliberately does not show a phone number or a link out, and it says in small print that verification is not a guarantee of workmanship, because those are different promises and only one of them is ours to make.

ArtisanConnect public artisan profile showing rating, completed job count, verified credentials, and recent work photos.
Public artisan profile4.8 across 86 reviews, 132 finished plumbing jobs, insurance valid until November. Full reviews need a sign-in; the phone number is nowhere on the page.

Nobody can price “my sink leaks”

A plumber quoting from a one-line description is guessing, and a guessed price gets renegotiated in someone’s kitchen. The job form asks for the things that actually change a quote: symptoms, measurements, photos and video, how to get in, and a preferred date. It stops well short of a contracting workflow. The client’s address and number stay masked until they pay.

ArtisanConnect job creation screen showing symptoms, measurements, access notes, and attached photos with masked contact details.
Client job creationSymptoms as tick-boxes, pipe diameter and accessible length, three photos and a video, plus where to park. Address and phone masked until payment.

No “best match” badge

Quotes arrive split into labour and materials, alongside a start date, a duration, the artisan’s rating and their verification count. I kept all of it side by side and refused to rank it, because the cheapest quote and the right quote are often not the same row and the platform is not the one living with the result. Accepting a quote locks its scope and price.

ArtisanConnect quote comparison screen showing three quotes broken into labour and materials with ratings and verification.
Quote comparisonThree quotes from R4,050 to R5,600, each showing labour against materials. The 2.5% protection fee is added where the client can see it before accepting.

Money first, then work

Accepting a quote does not start a job; funding it does. I made the engagement come into existence only once the money is secured, so no artisan travels to a site on the strength of a promise and no client argues about scope after the fact. Release rules vary with job size, which means the payment state machine carries several paths rather than one. In exchange, every later event hangs off a single funded engagement with one ID: the completion evidence, a dispute, the payout, both reviews.

ArtisanConnect funded engagement screen showing secured funds, scheduled start, start code, and in-app conversation.
Funded engagementR4,050 secured before the start date, with a code the client reads out when the artisan arrives. Address and number are now visible; the conversation stays in the app.

Evidence decides the release

An artisan closes a job by filing what they did: notes, timestamped photos taken after the work, a report, and the agreed scope ticked off item by item. The client then has a fixed window to approve and release the money or open a dispute, and only the disputed amount is held. Both sides rate each other, and neither rating publishes until both are in or the window expires, so nobody writes a review in reply to the other side’s.

ArtisanConnect completion review screen showing completion notes, after-work photos, scope checklist, and release or dispute actions.
Completion and reviewFive scope items ticked, four photos stamped within seven minutes of each other, 72 hours left to approve. Ratings cover workmanship, communication, punctuality, and scope accuracy.

One record holds the money and the proof

Funding, completion evidence, payouts, disputes and both reviews all attach to the same engagement rather than living in separate tables joined after the fact. Answering “was this paid, was it done, and who said so” is then one lookup instead of a reconciliation. The trade is rigidity: loose flows that would let evidence exist without a funded job are simply not representable, and I had to rethink a few features to fit that shape.

ArtisanConnect artisan dashboard showing pending payouts, next actions, job matches, and a credential expiry warning.
Artisan dashboardR4,050 sitting in pending, released once the client approves. The credential expiring in 42 days appears as an action, since an expired one stops new matches.