Skip to content
WorkAboutStackContactGet in touch
← All work
SystemsIn productionInteractive · sample data

180 design firms ran on WhatsApp threads. Now they log in.

Network Singapore finds homeowners who are about to renovate and matches them to 180+ interior design firms. I built the system that runs it. This page is the firm's side: the portal where they receive leads and work them. And instead of a walkthrough video, I rebuilt the interface right here. Everything below is clickable.

180+ firm accounts
2,174+ homeowner leads
6-stage pipeline
No passwords. Google sign-in only
The problem

A firm's leads arrived as WhatsApp messages and lived in a spreadsheet they couldn't open. Want to know what leads you have? Scroll the group chat. Every status question became a message to the team, times 180 firms.

The fix: give every firm its own portal. Their leads, their ad numbers, their content schedule, behind one login. 180 companies on one system, with no way to see each other. That's what got built, and what's below.

01 · The daily driver

The pipeline is the product.

Every lead a firm receives lands here. Six columns, from freshly matched to won. Click any card: calling the homeowner, their full brief, and the closing numbers are all one tap deep. Or press play and watch a lead travel the board.

or click any card. Everything opens.
concrete.networksg.netTry itSample data
Posh HomeSearch your leads...⌘KPH
Posh Home
Pipeline

6 active · 0 won this cycle

Qualified from Network6
Contacted0
Drop here
Appointment0
Drop here
Quoted0
Drop here
Won0
Drop here
Lost0
Drop here
One move, two savesMoving a card updates the app and the team's Airtable together, so nothing quietly reverts overnight.
  • Moves feel instant. The card moves the moment you drop it. The save happens behind it, and undoes itself if anything fails.
  • Ratings do work. Firms rate every lead with one tap. Those ratings help decide who gets the next one.
  • Slack finds out first. When a firm quotes or wins a job, the team gets a message with the numbers attached. Nobody files a report.
02 · Trust, engineered

The lead guarantee, built in.

Bad lead? Every firm has a replacement policy: 14 days, two swaps, seven extra days if an extension is approved. Most companies put that policy in a PDF nobody reads. I put it in the button. Drag the sliders and watch it decide.

concrete.networksg.netTry itSample data
Posh HomeSearch your leads...⌘KPH
Need help with this lead?
Request a replacement

Every lead a firm pays for carries a guarantee: 14 days, two replacements, seven extra days if an extension is approved. Drag things around. This is the real policy logic, not a mockup.

Days since distributed6d
Day 0 · distributedwindow closes · day 14
Replacements used
0/2
Replacement available8 days left in the 14-day window · 0 of 2 replacements used.

Filing sends an Approve / Decline card to Network's Slack. If it's declined, the firm simply keeps the original lead.

The policy is codeFirms see this same verdict live in the app, with the exact reason when the answer is no.
03 · The automation behind it

One click here, three pipelines there.

The portal is what firms see. This is what they don't. The moment the Network team sends a lead to three firms, the system writes every record, builds a PDF summary, and messages each firm on WhatsApp and email. By itself, in about six seconds.

concrete.networksg.netTry itSample data
Posh HomeSearch your leads...⌘KPH
Network side · one click
What “Distribute” actually does

Sarah Lim is qualified. Watch her lead fan out to three matched firms.

The team qualifies the homeownerThe board blocks a lead from being marked Qualified until five fields are filled. No half-baked leads go out.
Match scoring ranks 104 firmsFirms the lead doesn't fit are filtered out first. The rest get scored on housing type and budget, and priority firms float to the top.
Confirm before sendThe team sees exactly who's about to receive the lead, and the system double-checks every match one last time.
Records write everywhere at onceA card appears in each firm's pipeline, and the team's own database gets the same record. The old tools kept working through the switch.
PDF, WhatsApp, and email go outA lead summary PDF is built, then each firm gets a WhatsApp and an email. Sends are spaced 1.2 seconds apart because the gateway drops messages if you rush it.
Done. Notified ✓ ticked on the recordThree firms have the lead in their pipeline before the tab is even closed. Zero manual steps.
~6 seconds, zero manual stepsThis used to be someone's afternoon: pick firms, write the summary, attach files, text three group chats.
04 · Beyond the pipeline

Marketing and branding, same login.

Firms that run ads or content with Network see those numbers in the same portal. No logging into Meta, no asking for this month's report. The page opens instantly with the last saved numbers, then refreshes itself in the background. Hit Sync and watch.

concrete.networksg.netTry itSample data
Posh HomeSearch your leads...⌘KPH
Posh Home
Marketing

Campaign performance from your Network-managed Meta Ads account.

Last sync · today
Total spend
0
over 14d
Healthy
Total leads
0
over 14d
Healthy
Cost per lead
0
rolling avg
Healthy
CTR
3.21%
click-through
Healthy
Impressions
0
shown to users
Active campaigns3 live
ActiveCBO | 750K Landed PackageEngagementSpend$1,380
ActivePOSH HOME | WINNERS – WAEngagementSpend$505.37
ActivePOSH HOME ENGAGEMENT TRAFFICEngagement · $10/daySpend$131.07
Never a loading spinnerThe page shows the last saved numbers instantly, then quietly pulls fresh ones from Meta in the background.
05 · Usability at scale

Built to be handed to 180 teams.

180 firms means 180 teams of people who shouldn't all see everything. Owners see every lead. A designer sees only what's assigned to them. Adding a teammate takes one email address, and nobody ever sets a password. Flip the switcher to see it work.

concrete.networksg.netTry itSample data
Posh HomeSearch your leads...⌘KPH
Posh Home
Settings

Manage notifications, profile, and your team.

Who sees what
SLSarah LimCondo Resale · 3 bedderWen Li
KTKen T.HDB BTO · 4 RoomAdayah
EYEsther Y.HDB ResaleUnassigned
CWCandy W.HDB ResaleWen Li

The owner sees all 4 leads.

Invite a teammate

Firm Members see only leads assigned to them and can't manage the team. Owners see everything.

NotificationsIn-app · opt-out
New lead distributedA new lead is matched to your firm.On
Complimentary leadA complimentary (no-charge) lead arrives.On
Google-only sign-inNo passwords exist anywhere in the system. An invite is a database row waiting for the right Gmail to show up.
Under the hood

Next.js 14 on Vercel. Supabase Postgres for the app and sign-in. Airtable stays the team's working database. For the technical reader, the six decisions that matter:

Two databases, one truth

The app reads from a fast copy (Supabase) and writes every edit back to the team's working database (Airtable). The ops team kept their tools. Nothing broke mid-migration.

Two locks on every row

Security rules in the database, plus a second check in the app itself. Firm A can never see firm B, even if one layer slips.

Access fails closed

One permission table decides what every role can touch. A role that isn't on the list gets nothing, not everything.

Support without screenshots

Directors can open any firm's portal and see exactly what that firm sees. Every visit is logged, so it's a tool, not a backdoor.

Numbers that can't disagree

Every stat on screen comes from one tested calculation module. Two pages can never show two different truths.

812 tests, safe defaults

Automated tests on the money paths. And every integration stays off until it's configured: a blank key does nothing instead of crashing.

Contact

Open to full-time roles.

Email me what's broken and how you want it to work. I'll reply within 24 hours with how I'd fix it.