← All work
MADE-TO-MEASURE BLINDS · SALES OPS

Han Far Living · Lead-to-Payment Platform

Role
Solo
Status
Built and deployed for online sales
Stack
Next.js · Drizzle · Postgres · Stripe
Customers view a quote and pay a deposit themselves, the team just dispatches install — the whole chain from enquiry to paid, so a lean new team can run online without adding headcount.

A lean, new company

This is Han Far Living, a Singapore blinds brand — a very lean team, just getting started. I built their official website first. Once it was done, I pitched the next step myself: turn lead capture, online payment, and referrals into one system. The reasoning was simple — the local competitors have been around for years; a small team breaks in by automating and moving fast. The endgame: let customers quote and order themselves, and the team just dispatches the install.

One chain, lead to payment

So this is the platform: a lead comes in → a quote is built → deposit and balance are collected → an order → install scheduled — all strung together in one back office. A small team, no extra headcount, running the whole chain from enquiry to paid.

Leads, quotes, payments, orders, referrals — the whole chain in one back office.
Leads, quotes, payments, orders, referrals — the whole chain in one back office.

It starts at the enquiry: WhatsApp messages come in as leads, and each one is worked from new to qualified to survey-done before it ever turns into a quote.

WhatsApp enquiries captured as leads and moved down the pipeline — new, qualified, survey done — the front of the chain.
WhatsApp enquiries captured as leads and moved down the pipeline — new, qualified, survey done — the front of the chain.

The quote is built the way blinds are sold

Blinds are made-to-measure, not shelf stock — a quote is configured room by room, window by window, by size and product type; both sides, the staff building it and the customer reviewing it, follow how they actually sell, nothing like an add-to-cart store.

The staff builder: every opening is its own line — size, fabric, mechanism — and the prices roll up into deposit and balance. Configured the way blinds are sold, not added to a cart.
The staff builder: every opening is its own line — size, fabric, mechanism — and the prices roll up into deposit and balance. Configured the way blinds are sold, not added to a cart.

The customer needs no account: they open a quote link, see a locked priced snapshot, enter a referral code, and pay the deposit on-page (PayNow, card, and more); the balance settles back at the same link.

The customer's whole side, on their phone: open the quote link, review the priced snapshot, and pay the deposit — card, PayNow, or GrabPay, no login.
The customer's whole side, on their phone: open the quote link, review the priced snapshot, and pay the deposit — card, PayNow, or GrabPay, no login.

The money can’t be wrong

Deposit and balance are collected in two stages. On every payment the server re-derives the price and rejects anything that doesn’t match — it never trusts a number from the client. The webhook and the client-confirm path both converge on the same idempotent settlement, so a duplicate callback never double-books.

Two-stage payment: deposit, then balance; the server re-prices and rejects any mismatch.
Two-stage payment: deposit, then balance; the server re-prices and rejects any mismatch.

Quotes change, but leave a trace

A quote can be revised — but a revision isn’t an overwrite. Each change appends a new version; the old one stays intact, and the version sent to the customer is pinned so a later edit can’t quietly replace it. Cancel and expire are terminal states — nothing is deleted.

Immutable quote revisions: every price change leaves a trace; terminal states, never a silent edit.
Immutable quote revisions: every price change leaves a trace; terminal states, never a silent edit.

Where it stands

A system whose job is to keep the money and the orders straight. Built and deployed for online sales; referral commissions auto-accrue into a payable the team then settles. Happy to walk through more in person.