ByteNest Book a free call

Case study 01AI analytics SaaSAustraliaLive since June 2026

BodyShop Pulse

Profit and operations analytics for collision repair shops.

Opening frame of the Pulse launch film: the words Flat out all week above a floor of repair job cards.
Flat out all week. But did it make money? Pulse in one minute, from pulsebodyshop.com. No sound. Demo data.

Pulse pulls messy shop-system exports into one financial model, shows 60+ charts, and lets owners ask questions in plain English. ByteNest designed and built it end to end for an Australian partner: data pipeline, database, AI assistant and web app.

Role
Design and build, end to end
Client
An Australian partner
Runs on
Supabase, Next.js, Amazon Bedrock
  • 5,400+repair jobs covered
  • A$24M+revenue across five shops
  • 60+configurable charts

The brief

Owners see profit per job, not a pile of exports.

Pulse is profit and operations analytics for collision repair shops, one shop or several. It turns shop-system data into job, labour and parts insight. We built all of it: the sync engine, the financial model in Postgres, the Next.js app with per-user dashboards, the Ask Pulse assistant and the Weekly Story report.

Ask Pulse

Talk to the shop's own numbers.

An owner types a question the way they would ask their bookkeeper. Pulse reads that shop's sales, labour and costs and comes back with the answer first, then the chart behind it, what changed since last week and where to look next.

Ask a follow-up and it keeps the context: from the shop-wide result down to the people, costs and jobs behind it. The card here is Pulse's own, running on demo figures.

  • How did labour perform last week?
  • Which people should I look at first?
  • Anything about sales, labour or costs
Ask PulseDemo shop · 31 Aug–6 Sep

How did labour perform last week?

Pulse AI

Labour billed did not cover labour cost.

The shop billed $16,875 against $17,886 in labour cost. That’s $0.94 billed for every $1 in cost, compared with $1.20 the week before.

Labour billed ÷ labour cost

Labour ROI

The change this week

The labour return fell from 1.20x to 0.94x. This week, there was a $1,011 gap between billed labour and labour cost.

Where to look next

Start with the person-level breakdown. Compare billed hours, rates and job allocations to see where the gap sits.

Pops Inner West Smash Repairs · 31 Aug–6 Sep 2026
Condensed example from verified demo figures. Chart guide: 2:1.

Ported from pulsebodyshop.com, Pulse's own code. Demo shop, demo figures.

60+ live charts

Your dashboards, your way.

Owners build their own pages from more than 60 charts. These seven are a working sample, not pictures: switch the history between 4, 8 and 12 weeks, hover or tap a point for its value, click a legend entry to filter, and add a chart to the page.

Demo shopPops Inner West Smash RepairsWeek ending
Chart history

Revenue vs target

Parts sold & profit margin out-of-scope, line by line

Average repair cost per job

Billed revenue efficiency matrix per person, per week

2 of these 7 selected in this demo · 60+ to choose from in the app · hover or tap for values · click a legend to filter

Ported from pulsebodyshop.com, Pulse's own code. Demo shop, demo figures.

System map

How it fits together

BodyShop Pulse architectureThe shop management system returns JSON, XLSX and CSV, plus one API call per job. A sync engine (a Deno edge function working through a queue on pg_cron) normalises it into one financial model in Postgres on Supabase. Tenant-scoped views, protected by row-level security, act as the API. The Ask Pulse assistant and the Weekly Story report read those views and run on Claude through Amazon Bedrock in the Australian region. A Next.js web app hosted on AWS in Sydney shows 60+ charts and the AI features to collision repair shops.01 DATA IN02 SYNC03 DATA04 AI05 OUTShop systemJSON, XLSX, CSVone call per jobSync engineDeno edge functionqueue on pg_cronFinancial modelPostgres, Supabasejobs, labour, partsTenant viewsviews as the APIRLS per accountAmazon BedrockClaude, in-regionAU data residencyAsk PulseWeekly Story5-tool assistantchecked weekly reportWeb appNext.js, AWS Sydney60+ chartsRepair shopsone shop or several123 BodyShop Pulse architectureThe shop management system returns JSON, XLSX and CSV, plus one API call per job. A sync engine (a Deno edge function working through a queue on pg_cron) normalises it into one financial model in Postgres on Supabase. Tenant-scoped views, protected by row-level security, act as the API. The Ask Pulse assistant and the Weekly Story report read those views and run on Claude through Amazon Bedrock in the Australian region. A Next.js web app hosted on AWS in Sydney shows 60+ charts and the AI features to collision repair shops.01 DATA IN02 SYNC03 DATA04 AI05 OUTShop systemJSON, XLSX, CSVone call per jobSync engineDeno edge functionqueue on pg_cronFinancial modelPostgres, Supabasejobs, labour, partsTenant viewsviews as the APIRLS per accountAmazon BedrockClaude, in-regionAU data residencyAsk PulseWeekly Story5-tool assistantchecked weekly reportWeb appNext.js, AWS Sydney60+ chartsRepair shopsone shop or several123
System map of BodyShop Pulse. The four stages next to it describe each layer in words.
  1. 1
    Data inMessy exports, one API call per job
  2. 2
    One model, locked per tenantPostgres on Supabase, views as the API
  3. 3
    An assistant and a weekly storyClaude on Bedrock, in Australia
  4. 4
    Three hard partsWhere the real work was

Three hard parts

Where the real work was

  1. Isolation the AI cannot bypass

    A shop sees only its data. The assistant's tools run under the user's login, so Postgres enforces that. Rewritten policies took a key view from 6.9 s to 26 ms.

  2. Numbers from SQL, words from the model

    A wrong figure in a report costs trust. A validator rejects any number SQL did not produce, then one retry, then a fallback report with no AI.

  3. Data stays in Australia

    Shop data stays in the country, even when the AI reads it. Bedrock runs Claude through an in-region inference profile, chosen for Australian data residency.

The Weekly Story

Every week, a report the owner can read.

Pulse AI/Weekly story Written for you

Home · this week's signals

Pops Harbour Panel & Paint

Week ending 15 Mar 2026

AI SUMMARY

Sales hit $86,115 with a $10,394 net profit, but the shop is paying more for labour than it bills: a red flag that is quietly eating into an otherwise solid week. Repair cost per job also crept up, driven by rising parts spend on in-scope work.

Total salesSales for the week vs target

On track
$86,115 +$765

Net profit $10,394 · Margin 12.1%

Last 8 weeks

Group avg: $87,475 · 3 shops

Total sales came in at $86,115, delivering a net profit of $10,394 at a 12.1% margin: a clean result and up on last week.

Parts margin% margin on out-of-scope (line-by-line) parts

On track
20.5% -0.2 pts

Last 8 weeks

Group avg: 20.5% · 3 shops

Out-of-scope parts margin held at 20.5%: comfortably above the healthy threshold and broadly stable over the past eight weeks.

Cost per jobAvg direct cost per job (excl. wages & overheads)

Watch
$885 +$25

Last 8 weeks

Group avg: $883 · 3 shops

All-in repair cost per job rose to $885 this week, up $25 on last week, nudging this metric into amber territory.

ROI on peopleBilled labour ÷ what your people cost

Off track
0.96x -0.01x

Last 8 weeks

Group avg: 1.05x · 3 shops

Labour ROI sits at 0.96x: the shop billed less for labour than it paid out, which is a red-flag result that needs immediate attention.

Insurer marginGross margin on insurer-paid work

On track
74.8% -0.5 pts

Last 8 weeks

Group avg: 75.1% · 3 shops

Blended insurer profitability came in at 74.8%: a slight dip on last week but still a healthy result across the insurer mix.

Example report · Shop name changed · Group averages compare three shops

Ported from pulsebodyshop.com, Pulse's own code. Demo shop.

Stack

  • Supabase
  • PostgreSQL
  • Row-level security
  • pg_cron
  • Next.js
  • Amazon Bedrock
  • Claude
  • AWS Sydney

Our role: design and build, end to end.

Book a free call Back to all work