A fee proposal
you can prove.
Hills Consulting Engineers have coordinated Sydney Water servicing for developers since 2000. Their quotes lived in Word documents and their job numbers in a shared drive. We rebuilt the website and built the operations portal behind it.


A Word file, a shared drive, and a phone that kept ringing.
Hills Consulting Engineers are a Sydney Water accredited Water Servicing Coordinator in Parramatta. Developers, builders, and architects come to them for Section 73 certificates, building plan approvals, and civil design. Every one of those jobs starts with a fee proposal.
Each proposal began as one of two Word templates, minor works or major works, and took its reference number from a counter on a shared drive. Nothing stopped the same number being issued twice. Acceptance came back as a scan, or as a line in an email, or by phone.
Clients had no way to see where their job sat, so they rang and asked. The developer details Sydney Water needs for a Notice of Requirements, a Deed, and the certificate itself were collected again by hand each time.
The website was three major versions of the framework behind, and the enquiry form it fed was not wired to anything the engineers actually worked in.
Fourteen pages, built around the one thing a developer wants.
The approval process, on the page instead of in a phone call
A Section 73 application runs to seven stages for minor works and fifteen for major works, and most developers cannot name three of them. The old site showed the sequence as a flat infographic. We rebuilt it as two flows on the services page, where every stage opens to explain what happens and who does it.
The rest of the site keeps the copy and photography Hills already owned, on a new stack: Next.js 16, server-rendered, with permanent redirects on every old URL so nothing already linked or indexed breaks at the switch.

A quote form that asks for what a quote needs
Services first, then contact details. Site address fills from Google Places, so the address on the fee proposal matches the one Sydney Water will accept. Staff asked for multi-select on services after the first round of testing, and got it.
Architectural sets attach to the request
Plans run from 5MB to 50MB in PDF and DWG, well past what a serverless function will accept. The browser uploads straight to private storage with a short-lived signed credential, so an engineer opens the request with the drawings already on it.
Bots blocked, impostors held for review
Every submission passes a Turnstile check before it reaches the database. A request that reuses an existing client's email address is quarantined for a staff decision rather than attached to their record automatically.
Once it is sent, it cannot be edited.
Both Word templates became structured data: line items with scope text, prices, and modifiers like per CDC/DA, if required, and TBA. An engineer picks the variant, toggles the items that apply, edits the wording, and previews the PDF before it goes.
Sending locks the record and moves the job to Quoted on its own. A change after that is a revision, which supersedes the original and keeps its number with an R marker, so no client ever holds a version Hills cannot reproduce.
Six states, one direction. The portal issues its own reference series, PQ2026-A001 onward, visibly marked so it can never collide with the manual counter still running on the shared drive. Quotes expire three months after sending, per Hills' own terms.

Client names, addresses, and contact details are obscured in every portal screenshot on this page.

The signature and the paperwork, collected in one pass.
Sydney Water names a developer on the Notice of Requirements, the Deed, and the Section 73 certificate, and that party is often not the person who asked for the quote. Hills used to chase those details after acceptance. Now the acceptance form asks for them, because a client who is ready to sign is the most cooperative they will ever be.
Signing is passwordless. The client opens the link from their email, fills in the developer block, types their name, draws their signature, and accepts. The portal writes the signature image, the developer details, the IP address, the timestamp in Sydney time, and a SHA-256 hash of the exact PDF that was signed.
Clients who sign on paper are still covered. Staff upload the scan and key in the developer details, and the audit trail records that the signature arrived externally.
One click moves the job and tells the client.
A job runs through eight stages, from Intake to Delivered, plus two terminal ones for work that never converts. Hills renames, reorders, and adds stages themselves in Settings. Advancing a stage opens one dialog with an optional percentage, an optional note for the client, and an email checkbox already ticked.

One dialog, one action. The public note is the only free text that ever reaches the client.

The client view shows only what is placed on it
Stage, percentage, the public note, their own fee proposals, and a receipt for the files they uploaded. Engineer names, internal notes, and stage-duration history are not on the page because they were never added to it.
Updates arrive by email, not by chasing
Clients receive the stage change in their inbox and open a read-only page with a one-time link. There is no password to reset and no account to support.
Every action carries who did it
Engineers pick their initials once when they sign in, and those initials stamp every quote and stage change. Editing the roster later never rewrites the record someone already left behind.
Stage one, built so stages two to four bolt on.
Documents, invoicing, and client messaging are the next three stages of this roadmap. Each one attaches to the same job record that quoting already uses, so none of them needs the data model reopened.
The parts that would be expensive to retrofit went in first: row-level security on every table, a reusable notification log that later messaging builds on, an audit trail on the tables that matter, and file access recorded each time a download link is issued.
A portal client holds no direct read on the jobs table at all. Their view of a job comes through one security-definer view that returns their own rows and nothing more, which is a much shorter thing to audit than a policy per column.

- Data residencyDatabase and files in Sydney
- Postgres, private file storage, and authentication all run in the Sydney region. Developer details, plans, and signed documents stay in Australia.
- Least privilegeTwo roles, enforced at the database
- Staff and client permissions are policies on the tables, not checks in the interface. A request that skips the app cannot read what the role is not entitled to.
- ImmutabilityA sent quote is locked by a trigger
- The rule that a sent quote cannot change lives in the database, not in a disabled button. Code written next year cannot break it by forgetting.
- EvidenceSigning is one atomic transaction
- The signature, the developer details, the document hash, and the status change either all land or none do. A half-signed quote is not a state the system can reach.
In their hands, ahead of the domain switch.
Sixteen days after the first commit, the site and portal went live on a preview address for Hills to use. Their staff have since run the full loop on real data: a request submitted through the website, a quote drafted from a template and sent, a signature captured, and the job moved through its stages with the client emailed each time.
Their feedback shaped the build rather than sitting in a list. Multi-select on the quote form, verified addresses, the interactive process flows, and corrected wording on two application stages all came from staff review and shipped inside a week.
Portal email now sends from their own domain, fully authenticated and confirmed landing in inboxes rather than spam. What remains is the cutover itself, which we walk them through step by step.
Common questions about a website and portal build
Want the same for your practice? Here is the stack.
Same studio, same engineering, same published pricing. Pick the entry point that matches what you need built.
Still quoting out of Word?
We build the website and the software behind it as one system, hosted in Australia, delivered in stages you can stop after. Tell us what your process looks like today.


