Skip to content
Back home

Selected systems

The work behind the pipeline.

7 systems, up close: 3 for 1 property developer (an n8n backbone and the 2 apps that sit on top of it), the lead-gen ad accounts, the ads desk built out of running them, 1 CRM for a training academy, and funnels for 7 coaching and advisory brands. Each opens with the problem, the build and the result in 4 lines. The detail is under it.

Explore NBL Store and Manovella campaign reports, plus more build screenshots and client feedback.

Browse sample work →
01
The backboneA luxury Australian property developer
A 90+ workflow n8n suite that keeps a CRM and 10 other tools in sync on their own, across 5 property pipelines.90+
02
The email builderA luxury Australian property developer
A full-stack app that builds on-brand property emails, syncs them 2-way with the CRM, and gets them approved by clients through a public link.1-click
03
The dashboardA luxury Australian property developer
A real-time BI dashboard that unifies CRM leads and property sales into one view of pipeline performance and marketing ROI, across 6 projects.$95.52m
04
The lead accountsEducation, financial services, HR and training advertisers
Lead-generation media buying on Meta and Google. 21,583 leads across the 4 Meta accounts shown here, $285,826 through the largest of them, $32,246 spent in a single month across 48 campaigns, and a Google account running at $28.71 a conversion.21,583
05
The ads deskVentryx product demo, modelled on a Sydney skin clinic
A 6-view Meta ads reporting app for clinics: a morning triage queue that surfaces the 1 ad that needs a decision, a grouped ad table with creative health, and a Pulse view with a day-by-hour lead heatmap. Runs on invented data with no API keys.1
06
The enrolment CRMAn Australian pet-styling training academy
A GoHighLevel CRM built around 1 enquiry-to-enrolment pipeline: every stage automated, every number on 1 dashboard.A$930K
07
The funnels7 brands, coaching to exit advisory
Sales pages, assessment funnels, and membership checkouts built in GHL for 7 brands, including a 9-offer migration off Kartra.7
01
Automation · 2025–26

The backbone

The self-healing automation backbone

Read this case study

Nothing reconciles itself unless something is watching.

Client
A luxury Australian property developerSole architect and builder · 2025 to now, in production
Problem
8 lead sources in 8 formats, a CRM that drifted from the field, and month-end billing done by hand.
Built
An n8n layer between GoHighLevel and 10 other tools that audits and repairs itself on a schedule.
Result
90+workflows built, 64 live across 10 integrated platforms
01aThe problem

Leads arrived from 8 portals and ad sources, each in its own format, got mistagged or dropped, and the CRM no longer matched what was happening in the field. Month-end billing was a manual reconciliation. Nothing reconciled itself, so every gap needed a human to notice it, and at this volume humans stopped noticing.

8 lead sources, 8 formats, 1 CRM

01bThe build

An automation layer on n8n Cloud that sits between GoHighLevel and the rest of the stack and continuously reconciles all of it without anyone watching. The real work is the audit-and-repair layer, not the connections.

re-runs are safe: dedupe guards on every write

01cThe proof

90+

workflows built, 64 live across 10 integrated platforms

8portal and ad-source parsers converging on one routing pattern
5pipelines audited and repaired on a schedule

HandoverEvery workflow is documented, failures alert to Slack, and each automation has an off switch the team can reach without me.

drift gets detected, then repaired. no ticket raised

Evidence · fig. 01–06

fig. 01Base44 to Google Drive sales sync, live in n8n: 54 nodes of idempotent folder logic and invariant guards
fig. 02Asana to Xero monthly billing: validated, deduped invoicing with a Slack failure branch on every step
fig. 03EOI to CRM sync: sparse non-destructive patching and dynamic stage resolution
fig. 04Appointment state machine: booked and cancelled branches with stage rollback
fig. 05Real-time compound tagging: parses pipeline and source, builds the tag, writes it back to the contact
fig. 06Lead-parser fleet: one of 8 portal and ad-source parsers feeding a single enrichment-and-routing pattern
Back to index
02
Web App · 2025–26

The email builder

A multi-property email builder with one-click approval

Read this case study

The approval is the product. The editor just earns it.

Client
A luxury Australian property developerSole designer and developer · 2025–26, in production
Problem
On-brand emails for many developments were hand-coded HTML, and client sign-off lived in screenshots.
Built
A React app with an internal editor, a public no-login approval page, and 2-way GoHighLevel sync.
Result
1-clickclient approval with a full audit trail, from a public no-login link
02aThe problem

Building on-brand emails for many separate developments was manual HTML work. Client sign-off was a slow back-and-forth over email and screenshots, with no record of what was approved. And the CRM held a separate, drifting copy of everything.

sign-off lived in screenshots and reply-alls

02bThe build

A React app on Base44 that serves 2 audiences from a single codebase: an authenticated internal workspace for the marketing team, and public, no-login approval pages for clients. The highest-value feature is approval, not the editor.

structured fields in, on-brand HTML out

02cThe proof

1-click

client approval with a full audit trail, from a public no-login link

2audiences served from a single codebase, one authenticated, one public
2-wayGoHighLevel sync, so the app and the CRM hold the same truth

HandoverThe marketing team runs it day to day: versioned saves, a preflight panel before every send, and no raw HTML in sight.

every approval logged, timestamped, notified

Evidence · fig. 01–03

fig. 01Edit with AI: describe the change, the live preview updates. Creativity, strictness and scope set how far it goes. The live app, with the client's name and property imagery blurred.
fig. 02Projects: every development as a card, with its email count, last activity and a recently visited strip
fig. 03One development's campaigns: built in the app or synced from the CRM, filtered by draft, pending and approved
Back to index
03
Web App · 2025–26

The dashboard

A sales and marketing intelligence dashboard

Read this case study

A funnel dated on one field is quietly wrong. Every metric here carries its own date.

Client
A luxury Australian property developerSole designer and developer · 2025–26, in production
Problem
Leads in the CRM, sales in a property app, and marketing ROI in neither.
Built
A React dashboard that syncs every pipeline into 1 snapshot and dates each metric on its own event.
Result
$95.52min sales across 6 projects, all time through 29 Sep 2026
03aThe problem

Lead data lived in the CRM and sales data in a separate property app, with no combined view of performance or marketing ROI. Reporting meant manually pulling numbers and screenshotting CRM views. And the CRM's single-date reporting quietly miscounts any multi-stage funnel.

leads in one tool, sales in another, ROI in neither

03bThe build

A React dashboard on Base44 that syncs every active pipeline into a fast local snapshot and combines it with live property-sales data. Each metric filters on its own event date, so the funnel is finally correct.

each metric filters on its own event date

03cThe proof

$95.52m

in sales across 6 projects, all time through 29 Sep 2026

6projects covered by one reporting view
1weekly summary email that sends itself

HandoverSync runs are logged with a visible history, reports share as public links, and the weekly summary sends without anyone touching it.

reporting went from screenshots to a shareable link

Evidence · fig. 01–04

fig. 01The developer's 27 Jun–24 Sep 2026 view shows $13.81m in sales. The $95.52m headline is the all-time total through 29 Sep 2026. Client name blurred.
fig. 02One project, one week: leads by day and source, where each source sits in the pipeline, and every lead with its owner
fig. 03Price · Product · Place: what buyers can spend, what they want and where they live. Click any segment to filter the leads
fig. 04Opportunities & Conversions: lead to inspection, inspection to EOI, EOI to sale, and where the funnel leaks
Back to index
04
Paid Media · 2021–24

The lead accounts

21,583 leads, and the account screens behind them

Read this case study

Anyone can claim a cost per lead. These are the account screens.

Client
Education, financial services, HR and training advertisersSole media buyer · 2021–24, across 20+ ad accounts
Problem
Cost per lead drifts upward quietly, and spend, leads and revenue live in 3 different places.
Built
Per-objective structure, conversion tracking on qualified leads, weekly cost-per-result reads, and revenue pulled back against spend.
Result
21,583leads across the 4 Meta accounts shown; the captures show $1.76 to $22.46 per lead
04aThe problem

Lead-gen accounts get judged on volume, so the number that matters drifts quietly. Cost per lead climbs a dollar at a time while the report still looks busy, and because spend, leads and revenue usually live in 3 different places, nobody can say what a customer actually cost. An account can run at a loss for months and still read as healthy in the platform.

volume looks like health

04bThe build

Campaign structure built per objective, with budget held at the ad-set level so a winner can be scaled without resetting learning. Conversion tracking wired so the platform optimises on a lead the business would actually take, not on a form fill. Cost per result read weekly by ad set, with losers cut early instead of left to average out against the winners. Where the client could give revenue, it was pulled back against spend so the account was judged on return rather than on clicks. The screens here are the account views those decisions were made from: campaign names are redacted, and the totals are the platform's own.

budget at the ad set, not the campaign

04cThe proof

21,583

leads across the 4 Meta accounts shown; the captures show $1.76 to $22.46 per lead

$1.76cost per lead on an education ad set that generated 646 leads
1,405%return on the best campaign in the reporting view: A$32,000 of revenue on A$2,276.99 of spend

HandoverEvery figure here is a platform total from the account itself, not a rollup written afterwards. Campaign names are redacted and the account identifiers are cropped out, because the numbers are mine to show and the clients are not.

platform totals, names redacted

Evidence · fig. 01–07

fig. 0148 campaigns in 1 month, $32,246.91 spent. Campaign names redacted.
fig. 02The largest account: 15,529 leads at $16.49, $285,826.54 through it
fig. 03Education: 646 leads at $1.76 and 2,180 at $1.89 on the same account
fig. 04Financial services: 2,023 leads at $5.54, $11,206 spent
fig. 05A harder market: 1,205 leads at $22.46 on $27,069
fig. 06Google Ads: $28.7K in a month at $28.71 a conversion
fig. 07A$32,000 of revenue on A$2,276.99 of spend. Campaign names redacted at source.
Back to index
05
Web App · 2026

The ads desk

A Meta ads dashboard that starts with a decision, not a table

Read this case study

A report should open on the decision. The table is what you check after.

Client
Ventryx product demo, modelled on a Sydney skin clinicSole designer and developer · 2026, demo build in 1 day
Problem
Ads Manager shows 40 columns and no decision.
Built
A 6-view app that opens on the 1 ad needing a decision, with the suggested move and the budget it frees.
Result
1ad surfaced for a decision out of 16, with the suggested move and the budget it frees
05aThe problem

Ads Manager shows everything and tells you nothing. A clinic owner opens it, sees 16 ads and 40 columns, and closes it. The agency then spends Monday morning rebuilding the same 3 questions by hand: what is burning money, what is working, and what should we do about it.

40 columns, no decision

05bThe build

A Next.js app that pulls the account into 1 deterministic model and answers those 3 questions in order. Today ranks ads by severity against plain thresholds and pairs each flag with a suggested move and the budget it frees. Ads is the full table, but grouped by campaign with spend share, CPL tinted against the account average, and video hook and hold rates. Pulse is the weekly read: spend vs leads, CPL vs last week, creative health, and when leads actually land by day and hour.

severity first, table second

05cThe proof

1

ad surfaced for a decision out of 16, with the suggested move and the budget it frees

6views: Today, Ads, Campaigns, Pulse, Reports, Settings
0API keys needed to run the demo; every number is generated in the browser

HandoverData is 1 file with a seeded generator, so screenshots never drift. Swapping in a real account is a Meta Marketing API pull into the same shape, with leads sourced from the CRM so CPL means booked consults, not form fills.

the whole app runs on invented data

Evidence · fig. 01–04

fig. 01Today in front, Pulse behind: the app opens on the decision, the weekly read sits one click away
fig. 02Today: the 1 ad that needs a decision, why, and what pausing it frees up
fig. 03Ads: the full table, grouped by campaign, with spend share and CPL tinted against the account average
fig. 04Pulse: the weekly read, including when leads actually land by day and hour
Back to index
06
CRM Architecture · 2025–26

The enrolment CRM

A GoHighLevel CRM built around enrolment

Read this case study

Enrolment is a pipeline. I built it like one.

Client
An Australian pet-styling training academyCRM architect and builder · 2025 to now, in production
Problem
Enquiries outran a small team, follow-up lived in inboxes, and nobody knew what the pipeline was worth.
Built
1 GoHighLevel pipeline from enquiry to enrolment, a workflow behind every stage, 1 dashboard.
Result
A$930Kof enquiry pipeline valued and tracked, A$122.5K won
06aThe problem

Course enquiries arrived faster than a small team could work them. Follow-up lived in inboxes and memory. Funding checks were manual. Nobody could say what the pipeline was worth or where enquiries stalled.

follow-up lived in inboxes and memory

06bThe build

Everything lives in the CRM. 1 pipeline mirrors how the academy actually enrols: enquiry, follow-up, nurture, phone call, eligibility check, funding, enrolment. Every stage has a workflow behind it, so the chasing happens on its own and the dashboard stays true.

every stage has a workflow behind it

06cThe proof

A$930K

of enquiry pipeline valued and tracked, A$122.5K won

18.99%enquiry-to-won conversion by count, measured instead of guessed
179live opportunities, every one worked by a workflow

HandoverThe team works the pipeline and the workflows do the chasing. The owner opens 1 dashboard instead of asking for updates.

179 opportunities, 1 honest dashboard

Evidence · fig. 01–02

fig. 01The morning dashboard: A$930K in pipeline, 18.99% conversion, and the enquiry-to-enrolment funnel, live
fig. 02The workflow library: enquiry, lead management, nurture, pipeline, enrolment, and funding checks, in order
Back to index
07
Funnel Design · 2025–26

The funnels

Funnels for 7 coaching and advisory brands

Read this case study

Every offer gets its own front door. The house stays the same.

Client
7 brands, coaching to exit advisoryFunnel designer and builder · 2025 to now, in production
Problem
7 brands with offers stranded on other platforms and no automation behind a purchase.
Built
Per-brand GHL funnels with custom-coded assessments, plus a 9-offer migration off Kartra.
Result
7brands running funnels I designed and built, coaching to exit advisory
07aThe problem

7 brands, 1 recurring problem: offers stuck on other platforms or template pages, no automation behind a purchase, and quiz mechanics GHL doesn't support out of the box. The biggest brand had 9 offers on Kartra with no per-product automation at all.

9 offers on Kartra, 0 per-product automation

07bThe build

Each brand gets its own design system, built in GHL funnels so payments, tags, and follow-up run inside the CRM. Where GHL has no native mechanic, custom code fills the gap: assessments score in the browser and post to inbound webhooks. The 9-offer brand moved to 9 parallel funnels, each with its own sales page, thank-you page, and purchase workflow.

custom code where GHL has no native mechanic

07cThe proof

7

brands running funnels I designed and built, coaching to exit advisory

9offers migrated off Kartra into GHL, each with its own funnel and automation
4assessment funnels that score in the browser and segment in the CRM

HandoverEvery build ships with its playbook: page maps, workflow specs, and journey diagrams the next person can follow.

every build ships with its playbook

Evidence · fig. 01–08

fig. 01The flagship course funnel: editorial type at display size, 1 offer per fold
fig. 02The high-ticket funnel opens on the promise, not a countdown
fig. 03The light expression: same system, same grid, different offer
fig. 04The same brand's launch funnel in its own colourway, still on the house grid
fig. 05An exit-readiness scorecard: 24 questions, 8 dimensions, a banded result out of 120
fig. 06A strategy audit that types founders into 1 of 4 archetypes, each with its own result page
fig. 07An assessment funnel: the quiz scores in the browser and posts straight to the CRM
fig. 08A membership checkout: monthly or pay-in-full, straight from the application
Back to index

Next

Have a system that should run itself?

30 min · no pitchBook a call