Mancini Tan
All work Buildlr Construction tech

Designing complex forms

A pre-construction platform for the German market, built from zero for a client in Oslo. At the centre of it is one very deep quote form, designed for an estimator at a desk and rebuilt for a worker with one hand free.

Role
Founding designer, freelance
Timeline
Jun 2025 to Feb 2026
Client
Buildlr, Oslo
Scope
Complex forms, IA, desktop and mobile, design system
The Tasks step of a new quote, with the room and phase tree on the left and a long list of task rows
The Tasks step of a new quote. Rooms and phases on the left, tasks as rows you switch on.
01

A quote is really a tree

Room, category, phase, task, sub-task. Five tiers, and every leaf has its own quantities and prices.

Bathroom, Floor, Construction, Install flooring, Parquet. The estimator needs all five tiers on one page or they lose their place. Then the same quote has to reach the worker laying that parquet, on a phone, outdoors, who wants exactly one task at a time. Same data, two very different readers.

Buildlr had a founder, a market and no product yet. So all of it was designed from zero, in a language I don't speak, for a client whose working day never overlapped with mine.

02

Five tiers on one page

The tree lives in the left rail, so you always know which room and phase you're in.

Tasks are rows you switch on with a toggle. Open one and its sub-tasks unfold inside it, each with its own parameters, while the cost panel on the right recalculates as you go. Only one task opens at a time. That rule kept the page readable at forty rows deep, and it took a few rounds to accept it as a feature.

Live component
Search for a project, client or employee Mancini TanAccount Manager
Home|Quotations|New quote PRJ-2025-011|Klaus Müller|Bathroom remodeling|€24.500,00
General info
Materials
Tasks
General
Surface layer
Bathroom
Parameters
Demolition
Ceiling
Walls
Floor
Construction
Surface finish
Baseboard
Furnishing
Laundry room
Add room+
Add-ons
Disclosures
Summary
Tasks|Bathroom|Floor|Electrical Filter Search for a task or sub-task Construction(€1.460,00)
Install flooring Area 20 m² Glue type Fast-dry Parquet|✓ Extra prep work Vinyl|Thickness 2 mm
GeneralArea 0m²
Suggested RFI✕
Request name Choose flooring color Deadline 2025-12-25 Color choice Client to select color Description Please confirm your preferred flooring color so we can price the installation and materials. +  Quick add
+  Add new RFI
Sub-task|Parquet
Extra prep work
Sub-task|Vinyl
Thickness 20mm
Parquet€100,00
Labour (2 hrs)€50,00
Material costs€50,00
Vinyl€100,00
Labour (2 hrs)€50,00
Material costs€50,00
Projected cost€0,00
VAT (19%)€0,00
Total€0,00
Clear all Save as add-on Remove from quote
03

The question lives in the form

Estimators kept getting stuck on things only the client could answer.

Which colour. Which finish. The old habit was to leave the line blank and chase it by email. So the request for information became part of the task. When a task needs a client decision, a suggested RFI appears right there, question pre-written and deadline attached, and the client answers it on their phone. The blank line stays visible until it's filled.

A suggested RFI inside the Install flooring task, asking the client to choose a flooring colour by a deadline
Drafted where the gap is. Once sent, every RFI is tracked on its own page with the thread attached.
04

Same tree, one thumb

The field app reads the same quote, one worker at a time.

Rooms became filter chips along the top. Categories became accordions. Each task is a card, parameters are label and value rows, and sub-tasks sit one indent in, just like on desktop, so the hierarchy survives the move. Anything still waiting on the client is flagged in red inside the card, because nobody should find that out on a ladder. Once a task is running, everything collapses to three headers and a timer.

Mobile specs tab with room chips, a Flooring and tiling accordion and a task card with parameters
SpecsRooms as chips, tasks as cards.
Task detail with parameters, four site photos and a note from the worker
Task detailPhotos and notes from site.
The task collapsed to three headers with a running timer and a pause button
WorkingThree headers and a timer.
05

How each tier travelled

On desktop, one page, always in context. On mobile, one task, always in reach.

TierDesktopMobile
RoomLeft rail, always visibleFilter chips along the top
Category and phaseRail children, collapsibleAccordion sections
TaskRow with a toggle, one open at a timeCard with a status line
Sub-taskSection inside the open taskIndented block inside the card
ParametersInline inputs with unitsLabel and value rows
Client decisionSuggested RFI, pre-writtenRed "client to provide" block
Everything ran async, on top of the design system.

Seoul and Oslo share no working hours. The library has no token layer yet, since it was built for speed with a two-person team. Tokens are the first thing I'd add with more runway.

Let's talkSingapore · Seoul · anywhere

Got a form that keeps growing tiers?

I'd love to hear what you're working on.

Next case04

Service recovery at scale

Ninja Van · Logistics