The operation today, on their real data — the maintenance cycle, the quantified cost, and why it's stayed broken.
II
The Vision
One engine, three layers — and where AI should automate, augment, or stay out of the way.
III
The Architecture
How the mess becomes signal — GCP-native, and right-sized to the scale, not over-built.
IV
The Product
The cockpit on desk and phone, one record → two truths, and the copilot running live.
V
The Plan
v1 in a week or two, the trade-offs, and the ask.
Why this operation
The brief said "a process you know well." I built theirs.
Three reasons this is my case study — the exact three the brief asked for.
Worked with it
I built their ticketing system
I've been building Flash Dental's service-ticketing — which put me inside their after-sales operation, on the very documents you'll see next.
Ripe for it
Real mess, real money
Capital equipment, an archipelago, run on hand-typed sheets and WhatsApp. The friction is real and the leak is measurable — I've watched it happen.
Newly possible
What I'd explore next
The mess is exactly what modern document-AI is finally good at. This isn't the ticketing tool I built — it's how I'd modernize the whole process with AI.
Who's on the other end — a clinician whose room goes dark when a unit is down. The operation runs for her uptime.
01
The operation I know
Flash Dental sells and rents dental equipment across Indonesia, then services it for years. I've been building their ticketing system — so I know this operation from the inside; this case study runs on their real data.
Capital gear — sold or rentedDental units, sterilizers, compressors, imaging (Esay, DTE, Kuraray) — bought or rented from Flash's own fleet, its gear to track & service.
Nationwide, few handsJakarta to Ketapang, Tarakan, Medan — a lean field team (Yudi, Dedi, Febri, Arga…) covering the whole archipelago.
A lifecycle, not just repairsInstall → scheduled maintenance → breakdown service → survey → training; on-site and remote.
After-sales is the relationshipA unit down = a treatment room offline. Parts, speed, reliability are the recurring, high-margin business.
A Flash technician on-site — the after-sales work that keeps a chair running
West to east, one archipelago — a lean field team flies to the rest.
02
It's not a day — it's a cycle
A clinic reports a fault; the fix is rarely same-day. The unit waits — often days to weeks — while a spare part is checked, ordered, and shipped across the archipelago.
ClinicReport a fault
→
CoordinatorTriage & log
→
The waitCheck stock → order → ship part
→
DispatchAssign & travel
→
TechnicianOn-site fix
↻
ThenNext scheduled PM
7–8 days avg · up to 17
Report-to-service gap, computed from their June log. Often it's a spare-part stockout — "check the warehouse first… cannibalize a hose from a new kit." That wait is inherent — not the problem I'm solving. The problem is that for those weeks, the whole operation is blind: is the part ordered? did it ship? is a scheduled maintenance now overdue? Nobody can see it.
03
It runs on hand-typed spreadsheets
Their real service log — a sample of the actual rows (translated from Bahasa). Machines, jobs and technicians all tracked by hand in Google Sheets, and the mess is right in the cells.
Doctor / Clinic
City
Reported
Serviced
Gap
Serial
Spare part
Status
Technician
Dr. Lidya P
Banjarbaru
10 Jun
27 Jun
17 days
EX92026030251
Other
Done
Yudi
Dr. Iffah
South Jakarta
19 Jun
29 Jun
10 days
EX92026030239
Hose — out of stock
Done
Dedi
Dr. Annisa
Tanjung Pinang
15 Jun
23 Jun
8 days
TEALTH 2303PL-M4
Handpiece
Done
Yudi
Dr. Zeddin
Tarakan
19 Jun
26 Jun
7 days
EX92026030250
Footcover
Done
Yudi
Dr. Riris
Ketapang
03 Jun
11 Jun
8 days
EX92026030188
Suction motor
Done
Febri
Dr. Billy
Karawang
21 Jun
24 Jun
3 days
EX92026030204
Compressor filter
Done
Arga
RS Fatmawati
South Jakarta
24 Jun
—
6 days & counting
EX92026030133
Water hose — stockout
Waiting part
Dedi
Dr. Cecilia
PIK Jakarta
27 Jun
28 Jun
1 day
EX92026030176
Handpiece
Done
Arman
Dr. Kartini
Surabaya
08 Jun
20 Jun
12 days
EX92026030090
Panoramic adaptor — backorder
Done
Yudi
Dr. Andi Iskandar
Nunukan
—
PM ~1 yr late
—
SI.2025.04.00016
—
Open
—
Scattered — warranty lives in a second sheet, keyed to a sales-invoice number.
Blind — the technician arrives with no history; "3rd failure" is invisible.
Manual — "Gap" and every KPI is eyeballed at month-end, if ever.
Errors ship — one row's warranty ends before its purchase date. Nobody caught it.
04
What the mess costs Flash — every year
Modeled conservatively from their logs, in USD for scale (≈ Rp 16,000 / $1). This is Flash's loss — not the clinic's downtime — and their brief admits none of it is measured today.
$27kRp ~430M / yr
Idle & mis-routed technicians — paid while waiting on a spare part or sitting between hand-assigned jobs. ~5,800 idle hours a year.≈ 1,400 billable visits never made
$22kRp ~350M / yr
Missed preventive maintenance — due every 6 months with no automatic reminder, so it slips. Lost billable PM, and units fail more under warranty.PM columns mostly blank
$18kRp ~290M / yr
Warranty leakage, both ways — guessed from a separate sheet: honor an expired claim (margin lost) or deny a valid one (a dispute).2 machine yrs · 1 component yr, untracked
$100kRp ~1.6B / yr
Customer churn — clinics that walk over slow, unmeasured after-sales. The biggest, quietest loss.~5 clinics/yr × lifetime value
≈ $170k / Rp 2.7B
bleeding out every year — and, in the brief's own words, management has no standard measure of first-response or resolution time.
05
It runs on someone watching a spreadsheet
Not incompetence — the whole operation is one person babysitting a spreadsheet, and no tool could ever sit on top of the mess.
Hand-assigned
Someone eyeballs the sheet and picks who goes
A CS logs the ticket; a supervisor scans the list of un-done maintenance and hand-assigns a technician. That manual scan is the dispatch engine — there is no rule for who takes the next job.
No auto-reminder
The six-month clock rings for no one
Preventive maintenance is due every 6 months. Nothing fires at H-30, H-14, H-7 — miss the scan and Flash silently breaks the very promise in its own brief.
Unmeasured
First-response & resolution time aren't tracked
The brief admits it: management has no standard measure of response or resolution. You cannot manage — or improve — what nobody counts.
BI bounced
Every prior tool needed clean data first
BI and EPM want a modeled warehouse up front. The data was never clean, so the project died in cleanup. The mess defeated the tool.
Why the C-suite pays
An operation you can't measure quietly devalues the business.
Because it's manual and unmeasured, Flash silently breaks its own promises — the six-month maintenance, the honored warranty, the fast response — and can't see its service quality, its people, or its product reliability. That's the ~$170k a year from the last slide, plus the enterprise value a measured operation is worth. Incumbent BI & EPM assume clean data these operations don't have.
06
The modernized vision
One engine, three layers — from the operation up to the boardroom.
1
Guided & automated execution
The system auto-schedules the six-month PM, auto-notifies at H-30/H-14/H-7, and auto-assigns the next visit by region, load & SLA priority. A grounded copilot hands the technician the asset's history and the cited next step.
2
Automatic measurement
Every visit throws off structured signal → first-response & resolution time, first-time-fix, warranty status — computed in code, no manual re-entry. Exactly the SLA the brief says is unmeasured today.
3
C-level decision support
A live cockpit shows what's breaking and, crucially, why — too few technicians in a region, a spare part stuck at a supplier, or an underperforming technician — so the fix is obvious, not guessed.
What changes — and what doesn't
Modernizing isn't "AI does everything"
The value is drawing the line in the right place — and keeping people where judgment, hands, and trust belong.
Auto-schedule the 6-month PM & assign by region/load
Fire the H-30/H-14/H-7 & near-SLA-breach alerts
Deterministic, rules are clear — done cheaply and cited, never guessed.
Augment
AI proposes, human decides
Guided diagnosis — likely cause + the cited manual
Explain why a region misses SLA — too few techs, slow parts, or an idle one
"What needs you today" — ranked for the manager
The drafted, grounded, cited answer to any question
The model surfaces evidence and the likely cause; the person makes the call.
Keep human
On purpose, not by default
The repair itself — hands on the machine
The customer relationship & the coaching talk
The final call on a warranty dispute or a person
Judgment, hands, and trust stay human because they should.
07
Architecture — one backbone, six layers
Scattered documents flow left to right — parsed, indexed, reasoned over, served, measured, and governed. Every slide that follows zooms into one of these six.
01Ingest & parse
Document AICloud DLP
02Store & index
Vector SearchBigQuery
03Reason
Vertex AIGemini
04Serve
Cloud Run
05Measure & show
BigQueryPWA cockpit
06Trust & run
IAM · VPC-SCVertex Eval
the wedgeIncumbent BI assumes clean data. This is built for the mess — it reads the scattered documents and manufactures the clean signal BI needs. The messy data isn't the obstacle; it's the moat.
07a
Ingestion — turn the mess into signal
One pass over the raw documents produces both the searchable index and the KPI tables.
Sourcesscanned invoices, receipts, Excel, service logs, 1:1 notes
Document AIOCR + layout parse → text + structured fields
A real row — Bahasa, handwritten, stamped — becomes typed, structured, warranty-computed, PII-masked signal in one pass. Low confidence would set _needs_review: true and route it to a human — never silently ingested.
07b
The request path — retrieve, ground, answer
User + rolea question, in plain language
RBAC scoperestrict what's retrievable, per role
Hybrid retrievalVector Search + keyword, reranked
Geminiground the answer, attach citations
Groundedness gateanswer · or "not in our records"
two outputs The answer comes from Gemini, grounded + cited. The numbers come from BigQuery, computed deterministically — the model explains a KPI, it never calculates one. Wrong numbers would break the trust the cockpit depends on.
07c
System topology — where it runs
Data sources
SharePoint · invoices service logs · sheets HR / performance
stay outside; pulled in on a schedule
GCP project · asia-southeast2 (Jakarta) · data residency
Document AIparse + OCR
Cloud DLPde-identify PII
Vector Searchretrieval index
Vertex + Geminiembed + reason
BigQuerymeasurement store
Cloud Runapp + API
PWA cockpiton every phone
IAM · VPC-SCRBAC + isolation
Vertex Eval+ audit logs
Users · RBAC
Technician — assets, scoped Manager — their team C-level — everything
data never leaves the region
08
The tech stack
Google Cloud–native — the same six layers from the backbone, chosen for the mess, the residency, and the cost curve.
Ingest & parse
Document AICloud DLP
OCR + layout on scans/PDFs; de-identify PII before anything reaches a model or log.
Store & index
Vector SearchBigQueryCloud Storage
Semantic index for retrieval; structured KPI tables for measurement; raw docs archived.
Reason
Gemini (Flash → Pro)Vertex AI
Grounded generation + citations; route by difficulty. The model is a swappable seam — Flash by default, open-weights if cost demands.
Serve
Cloud RunAPI Gateway
Stateless app + API; scales to zero; the one integration point per client.
Measure & show
BigQueryPWA cockpit
KPIs computed in SQL (never by the model); the cockpit is the PWA — on every phone, role-scoped, no per-seat license.
Trust & run
Vertex EvalIAM · VPC-SCCloud Logging
Faithfulness eval, role-scoped access, data-residency perimeter, full audit trail.
v1 runs leanThis is the at-scale shape. v1 needs none of the heavy managed services — it's Cloud Run + a small Postgres/pgvector table + Gemini Flash + the PWA, AI-built in weeks by one engineer for low-thousands. Vector Search, BigQuery & the CRM/ERP integrations are added only when volume earns them.
09
One platform, not two products
Assets and people aren't two solutions — they're two data domains in one UI, for the same C-suite. RBAC decides who sees what.
Technician
Fix it, in the field
Sees the asset service history + guided diagnosis, scoped to their assigned jobs. No people data.
Service manager
Run the team
Sees their technicians' jobs, cycle time, first-time-fix, and outstanding backlog, scoped to their region. No other teams.
C-level
Steer the business
Sees everything rolled up — assets and people, both operations, one cockpit.
Same engine · same UI · one login — the role, not the product, decides the view.
The measurement layer, made concrete
One service record → two measured truths
one service-log row"Yudi closed FD-1042 · suction motor · Surabaya · reported 19 Jun, done 29 Jun" — plus the linked sales invoice
→
Asset truth3rd suction failure → reliability; invoice date → warranty status & age → maintenance due
Technician truthYudi closed it → jobs done, first-time-fix, cycle time, out-of-town load
why it mattersThe same record, parsed once, measures the machine and the technician who serviced it. Pull the sheets, WhatsApp updates, and invoices a business already has — no clean warehouse required.
10
The end product — the daily cockpit
Ops Cockpit · Field Service + People role: C-level
First-time-fix
80%
▲ 6 pts MoM
Avg cycle time
7.8d
▼ 1.2d faster
Warranties due 30d
12
FD-1042 expiring
Jobs closed · Jun
42
▲ 5 MoM
Outstanding
7
▼ 3 aging >2wk
First-time-fix by region
JKT
SBY
KLM
BDG
DPS
MDN
What needs you today
DC-300 units fail near warranty end 3 units, Kalimantan — review before renewals
5 jobs stuck on spare-part stockout Selang & Footcover — 3 aging past 2 weeks
Yudi carries 38% of out-of-town jobs concentration risk — balance the roster
Live job queue
Unit
Clinic · City
Type
Tech
Age
Status
FD-1042
Klinik Sehat · Surabaya
Service
Yudi
2d
Outstanding
EX92026030239
drg. Iffah · Jaksel
Sparepart
Dedi
4d
Waiting part
SI.2025.04.00016
drg. Andi · Nunukan
PM
—
12mo late
PM overdue
EX92026030251
drg. Lidya · Banjarbaru
Instalasi
Yudi
17d
Finish
EX92026030250
drg. Zeddin · Tarakan
Footcover
Yudi
7d
Finish
Technician load · June · 42 jobs closed
Yudi
16 jobs
Dedi
10 jobs
Febri
8 jobs
Arga
5 jobs
Arman
3 jobs
ask Ask anything about your operation — "why is Kalimantan's first-time-fix low?"
Default view, not a blank chatbox — the numbers that matter, every day, without thinking what to ask.
Chat is one mode — the ask bar drills into any tile, grounded and cited (two slides on, live).
11
The cockpit, on every phone
The manager's dashboard and the technician's job — the same platform, scoped by role, on the phone they already carry.
9:41 5G
Cockpit C-level
First-time-fix
80%
▲ 6 pts
Cycle time
7.8d
▼ 1.2d
Jobs · Jun
42
▲ 5
Outstanding
7
▼ 3 aging
SLA
94%
▲ 2
Warr. due 30d
12
FD-1042
First-time-fix by region
JKT
SBY
KLM
BDG
DPS
MDN
What needs you today
DC-300 fails near warranty end — 3 units, Kalimantan
5 jobs stuck on stockout — Selang & Footcover
Yudi carries 38% of out-of-town jobs
Job queue
FD-1042 · SurabayaOutstanding
drg. Iffah · JakselWaiting part
drg. Andi · NunukanPM overdue
drg. Lidya · BanjarbaruFinish
9:41 5G
Field Teknisi · Yudi
FD-1042 · DC-300
Suction failure — 3rd
Klinik Sehat · Surabaya · 2 days ago
⚠ Warranty expired Jun 2024 — billable
Guided diagnosis
Recurring cause is a clogged suction filter — replace it with the motor, or it returns.
cited: manual DC-300 · §suction
BringSuction motor + filter kit · check warehouse stock before travel.
Service history 2025-01 suction motor · replaced 2024-09 hydraulic leak · sealed 2024-03 suction motor · replaced
Next PMDue Aug 2025 · combine with this visit.
One platform, scoped by role — the C-level's dashboard and the technician's job are the same system, different view.
The manager, in the pocket — live first-time-fix, cycle time, the outstanding backlog, and the day's alerts.
The technician, at the chair — the unit's history and warranty before the toolbox opens; no 45-minute invoice hunt.
Grounded, cited answers on both — the copilot proposes; the person decides and acts.
12
Drill into any tile — live
The same engine behind the cockpit. Pick a domain, ask — it runs entirely in this page.
— pick a question above, or type your own —
Real in this demoretrieval · grounding + citations · honest abstain · KPIs computed (not generated) · RBAC & PII refusal · live Jakarta API
The same engine and the same live API — inside the app the technician carries. Tap a question, or type your own.
The real copilot, in the field — the technician asks from the chair, on the phone in his hand, not a desktop.
Computed for numbers, cited for lookups — "how many overdue maintenances" is counted; "FD-1042 history" is grounded and cited.
It abstains rather than invents — ask something out of scope and it says "not in our records."
Live over the same API — this phone hits the Cloud Run copilot in Jakarta, exactly like the desktop console.
9:41 5G
Copilot Teknisi · Yudi
The honest part
How it fails — and the guardrail
A system the C-suite steers by has to fail safely and visibly, never silently. Every failure mode has a designed defense.
If it fails…
The guardrail
OCR misreads a scanned form
Low-confidence extractions are quarantined for a human — never silently ingested.
The model invents an answer
Answers are grounded & cited; it abstains — "not in our records" — when unsure.
A KPI comes out wrong
Numbers are computed by code in SQL; the model explains a number, never calculates one.
Wrong data reaches the wrong person
RBAC at the data layer + DLP de-identification + a full audit trail on every access.
Technicians won't adopt it
It's their fastest path — history + warranty before the toolbox, on the phone they already carry, offline.
13
The build path
Land one instance, prove it, generalize — never boil the ocean.
v1 · ~1–2 wk
Guided-execution copilot, one domain
Grounded, cited answers over one operation's scattered docs — the mess becomes answerable, the operator stops flying blind. Safe to ship this fast because low-confidence extractions route to a human. (The live demo.)
v2 · next
The measured cockpit
Execution signal → the live dashboard of KPIs and alerts, with no manual entry — the daily default view.
v3 · vision
C-level decision layer + integrations
Proactive "what to do" recommendations, RBAC across roles, the second domain — and API integration into their CRM / Sales / ERP so every system feeds one record per serial.
the trade-offsv1 is read-only, single-domain, and right-sized on purpose. A lean field team on one operation doesn't need Vector Search or BigQuery yet — v1 is the grounded copilot on a lightweight index. The heavy GCP stack is the destination if this scales, not the start. Earn trust first: dashboards before chatbots, one operation before the platform, no infrastructure until it's earned. The clock here is document access, not the build — value lands within days of getting the docs.
14
The delivery plan — value in week one
One engineer, AI-assisted. The build is days — the schedule is just honest about what actually gates it.
Phase
Days 1–3
Days 4–7
Week 2
v2 · weeks
v3 · quarter
Discovery & document accessthe real clock — outside the build
getting docs & access ⟵ critical path
Extraction pipelineOCR → structured → validated
build the mess-to-signal pipeline
Grounded copilotthe live demo — cited answers
answers on their real docs
★
Pilot & handoffone operation, human-in-the-loop
prove & train
v2 · Measured cockpitthe daily default view
KPIs & alerts
v3 · Decision layer+ CRM / Sales / ERP
integrations
★ value lands mid-week-1Grounded, cited answers on real docs before the build is "done." The critical path isn't engineering — it's document access. Outside that bureaucracy, value lands almost immediately.
Closing the loop — problem to payoff
What v1 changes in the first two weeks
Report → service wait
invisible until month-end
→
tracked live, aging jobs auto-flagged
Warranty at the door
guessed from a second sheet
→
computed & cited at the point of service
Technician performance
a month-end guess
→
live first-time-fix & cycle time
Outstanding jobs
pile up unseen
→
ranked "what needs you today"
The costs from the problem section — now measured numbers on the cockpit. That's the lift we prove before touching anything else.
15
What it costs — and what it returns
AI-built by one engineer, run lean — so the whole spend is a rounding error against the ~$170k a year the mess costs.
Build · v1
~1–2 weeks
one AI-assisted engineer · ≈ low single-digit $thousands, one-off
Cloud Run · a small Postgres/pgvector index · Gemini Flash · Document AI — no heavy managed services yet.
Run · v1 (pilot scale)
$100–300 / mo
scales to zero between jobs
Cloud Run + managed Postgres + per-page OCR + Gemini Flash tokens — grows only when volume earns it.
Payback in weeks
Against the ~$170k / yr the mess costs today. Recover even the idle-technician + missed-maintenance slice (~$49k / yr) and v1 pays for itself almost immediately — the risk isn't the spend, it's another year unmeasured.
honest caveatEstimates are conservative and pilot-scale; real run-cost tracks document & query volume. A swappable LLM seam — Gemini Flash by default, open-weights if cost demands — keeps it defensible as it grows.
Challenge the approach
The hard questions — answered head-on
Isn't this a one-off? Won't data go stale? Where's the CRUD?
Not one-off. The ticketing system I'm building is the live CRUD record (structured entry, audit trail, dedup), and the same pipeline backfills the history and ingests every new doc. The cockpit reads the live table — never a frozen snapshot.
Are we over-engineering it?
No — AI is used only where CRUD can't reach: reading the mess and measuring. Ongoing capture is plain forms; new data is structured at entry, so marginal extraction cost is ≈ zero.
A $100k AI agent for an SMB?
We don't build one. v1 is weeks + low-thousands of GCP (Document AI ~pennies/page, small index, scales to zero) — not six figures. The heavy stack is the destination if it scales.
Does it add headcount to run?
No. Serverless + managed (Document AI, Gemini); KPIs are computed by code — nothing to retrain, no re-ranking treadmill. Staff feed it via the forms; a few min/week reviewing flagged extractions replaces month-end eyeballing.
What's the cost of doing nothing?
The ~$170k/yr keeps bleeding — and compounds: the history gets costlier to migrate each year, missed-PM & churn scale with the install base, and an unmeasurable operation is worth less. Staying put is the priciest option.
Why not Salesforce / Mekari / SaaS?
Systems of record — they can't read 5 years of Bahasa, handwriting & WhatsApp, and you'd still pay to migrate the mess (the hard part). Per-seat, per-year, forever.
Why not just ChatGPT / Claude / Gemini?
A raw LLM invents numbers, can't cite, can't see private docs, no RBAC or residency. The value is the grounded, computed pipeline — it only explains a number it never calculated.
Customer portal? Auto-notify? CRM integration?
On the roadmap, deferred by design. ~3-mo: auto-notify H-30/H-14/H-7 & auto-assign. ~6-mo: customer portal, spare-part quotes, predictive reliability, and API integration into their CRM / Sales / ERP — each feeding the one-record-per-serial spine.
Why now · Why me
The tech finally reads the mess — and I already know the operation.
Why now — Gemini can finally read the mess (unstructured, Bahasa, cross-department documents) and manufacture the clean signal BI always assumed was already there; GCP's Jakarta region makes in-country data residency real. Neither was true two years ago.Why me — I've been building Flash Dental's ticketing system, so I know this operation from the inside, on its real documents — and a career of field-worker mobile tools (Invoice2go, Pawoon) and messy-data pipelines is this exact problem, over and over. Not a concept deck — the operation I know best, modernized.
Let's prove it on one operation — in a week or two.
v1 is a grounded copilot over one operation's real, messy documents. The mess becomes answerable, and we measure the lift — first-time-fix, cycle time, warranty leakage caught — before touching anything else. Three things to start:
1 · Access
One operation's document sources — the messier, the better.
2 · A GCP project
In the Jakarta region, for data residency.
3 · A design partner
One person on the business side to define "measured right."
The rest is the same engine you just watched run. Give me one messy operation and two weeks — and the shop floor starts speaking to the boardroom.