// CRM Wall, Process, Case Study function CRMWall() { const crms = [ { name: 'SimPro', file: 'simpro.png' }, { name: 'ServiceM8', file: 'servicem8.png' }, { name: 'Tradify', file: 'tradify.png' }, { name: 'AroFlo', file: 'aroflo.png' }, { name: 'Fergus', file: 'fergus.png' }, { name: 'HubSpot', file: 'hubspot.png' }, { name: 'Xero', file: 'xero.png' }, { name: 'MYOB', file: 'myob.png' }, { name: 'Jobber', file: 'jobber.png' } ]; const loop = [...crms, ...crms]; return (
Integrations

Works with the job management software you already run.

If it has an API, we can talk to it

{loop.map((c, i) => (
{c.name}
))}
); } function Process() { const ref = React.useRef(null); React.useEffect(() => { const io = new IntersectionObserver((ents) => { ents.forEach(e => { if (e.isIntersecting) e.target.classList.add('reveal-in'); }); }, { threshold: 0.3 }); ref.current?.querySelectorAll('.process-step').forEach(el => io.observe(el)); return () => io.disconnect(); }, []); const steps = [ ['Audit','A 45-min call. We map where leads enter, where time leaks, and what your tools can already do. You get the map whether we build or not.','Week 1', 'Free'], ['Design','One page of plain-English flows. No jargon, no architecture diagrams. You sign off before a single wire is run.','Week 1–2', 'Fixed price'], ['Build','Custom-built, wired into the CRM you already use. Tested against your real jobs, not generic demos. Rolled out one flow at a time.','Week 2–4', 'Live in weeks'], ['Run & support','We host it, we monitor it, we fix it. Monthly retainer covers tweaks, new flows, CRM changes — we stay in your corner.','Week 4 →', 'Ongoing'] ]; return (
How we work

Built around your week, not ours.

Four clear steps. Fixed price after the audit. No mystery-meat invoices, no "discovery phases" that eat a month.

{steps.map(([t, d, w, tag], i) => (
0{i+1} / 04

{t}

{d}

{w} · {tag}
))}
); } function CaseStudy() { const flow = [ ['01 · TRIGGER','Website form webhook'], ['02 · ROUTE','NorthEdge server'], ['03 · CLASSIFY','Auto-quote vs human-review'], ['04 · CUSTOMER','Lookup · create (SimPro)'], ['05 · SITE','Lookup · create (SimPro)'], ['06 · PRICE','Line items scaled + priced'], ['07 · CRM','Line items pushed to SimPro'], ['08 · NOTIFY','Reception → awaiting approval'] ]; const [step, setStep] = React.useState(0); React.useEffect(() => { const id = setInterval(() => setStep(s => (s + 1) % (flow.length + 2)), 900); return () => clearInterval(id); }, []); return (
Case study · Cairns Fencing

From 3-hour quotes to 43 seconds.

Custom quoting bot · SimPro deep-integration

We're approving more quotes faster than ever. Having the speed of in-depth quotes land straight on our CRM has made a huge difference in won jobs — speed is key.
HJ
Hamish Jenkins
General Manager · Cairns Fencing
43sec
Avg quote build time
(was 1–3 hrs)
24/7
Quotes built
— even at 2am Sunday
Quoting bot · live trace 43s end-to-end
{flow.map(([n, l], i) => { const cls = i < step ? 'done' : i === step ? 'live' : ''; return (
{n} {l} {i < step ? '✓' : i === step ? '●' : '○'}
{i < flow.length - 1 &&
}
); })}
); } Object.assign(window, { CRMWall, Process, CaseStudy });