DMG
The system a paintless dent repair company works in: every dent on every panel, priced as it is counted.
The dents, the price, the paperwork, and the shop it belongs to.
The estimate
Seventeen body panels, from the hood to the cowl. On each one the technician counts dents in three severity classes, and separately the technical ones, which are priced apart. Then says what the panel needs: pulled, painted, replaced, or left alone. Aluminium carries its own coefficient, because it does not behave like steel.
The pricing
Four kinds of matrix, each configurable per company: hail and remove-and-install, and their French counterparts. Over them, twenty kinds of add-on — glue pull, limited access, laminated glass, heat induction — each set as a fixed sum or as a percentage.
The paperwork
Estimates and invoices numbered per company and per year, each from its own counter, in a single indivisible write. The estimate leaves as a PDF built from scratch, with the damaged car in it, and goes to the client by e-mail.
The company
Four roles, and permissions kept in the database rather than in code — rebuilt into abilities on every single request. Fourteen of the thirty tables carry the company that owns the row, so one shop’s work never reaches another’s.
From a tap on a panel to a document the client receives.
-
1
The car is drawn, not described
The technician opens the shape of the vehicle in front of them — sedan, SUV, wagon, van or pickup — and taps the panel they are looking at. The panel takes the colour of what it needs, and the count goes in where it happened.
-
2
The price follows the count
Every dent typed re-runs the whole calculation: the panel’s own difficulty, the severity of the dent, the metal it is made of, and whether it will be painted after. Nobody looks anything up.
-
3
The estimate leaves as a document
The numbers become a PDF with the car drawn into it, numbered from the company’s own counter, and sent to the client. The same figures become the invoice, without being typed again.
The technician counts dents on a picture of the car, and the price is already there.
One process, one database, and nothing else to keep running.
Interface
Sixty-one screens: the estimates, the matrices, the invoices and the settings a shop keeps for itself, in one application.
- TypeScript
- Next.js 15
- React 19
- Tailwind CSS
- TanStack Query
Server
One process, twenty-five modules, and an API that describes itself — so the screens and the server never drift apart.
- NestJS 11
- Prisma
- Swagger / OpenAPI
- CASL
Data
Thirty tables for the work itself, and object storage for the photographs and the documents that hang off an estimate.
- PostgreSQL
- MinIO
Delivery
Every part builds into its own image, and the finished estimate leaves the building as a PDF attached to an e-mail.
- Docker
- GitLab CI
- Mailgun
- pdfmake
The difficult parts are the car, the coefficients, and the cents.
A car you can tap
Five vehicle shapes, and on each one every panel is its own region: tap it and it takes the colour of what it needs — pulled, painted, replaced, untouched. Around five thousand lines of it, because a technician standing next to a car will not read a list of panel names.
Dents turned into time
The French way of pricing hail does not count money, it counts time: a band of dents becomes a number of time units, sixty to the hour. Then four coefficients multiply — how hard that panel is, how deep the dent, whether the metal is aluminium, whether it will be painted. The engine reads the bands from a matrix the shop can edit itself.
Money that never rounds
Every amount is held as a whole number of cents, on both sides of the wire, and only turned into money when it is shown. There is no decimal column anywhere in the database — the kind of decision that costs an afternoon once and never costs anything again.
The estimate is made where the car is.
A hail estimate is not written at a desk. The technician walks around the car with the phone he already carries, opens the vehicle, and taps the panel in front of him. The same numbers that go in there are the ones that leave as the estimate.
Delivered, and counted.
Twenty-two months, from June 2024 to April 2026. Eight people appear in the history; five carried it.
Twenty-two months of work, delivered.
Have a project idea? Write down a quote!
Got a project? Drop us a line if you want to work together on something exciting. Or do you need our help? Feel free to contact us.