Every estimate is stored permanently, so it can be found and reopened at any point — most importantly for the supplement workflow: a fault-code-only estimate can sit for days waiting on a technician's physical diagnosis while other vehicles are worked on. Find it, open it, confirm the diagnosed codes, and save.
| Estimate ID | Vehicle | Claim / VIN | State | Grand Total | Status | Source | Last Updated | |
|---|---|---|---|---|---|---|---|---|
|
Search for an estimate
Click Search to browse everything, or filter by ID, vehicle, or
state.
|
||||||||
The software's own name, logo, and browser-tab icon — shown across the Workshop header, login screen, landing page, and (once you configure the same via customer-portal-web) the public wizard. Distinct from PDF Branding, which is your shop's own business identity printed on the generated estimate document itself.
Configure the company details, logo, and watermark that appear on every generated PDF estimate.
| State | Rate Status | Body $/hr | Paint $/hr | Mech $/hr | Supplies $/hr | Parts Tax % | Source / Date | |
|---|---|---|---|---|---|---|---|---|
| Click Refresh to load | ||||||||
| Username | Role | Contact | Status | Created | |
|---|---|---|---|---|---|
| Click Refresh to load | |||||
Actual Cash Value lookups (used for the total-loss threshold) fall back through three tiers: paid vendor APIs below, then a generated depreciation table, then a static estimate. Vendor API keys are never displayed once saved — only a short suffix, so you can confirm one is set.
Replacement-part price lookups (the eBay-sourced quote on REPLACE lines) are gated per calling surface the same way ACV Tier-1 is — a shop can allow a paid parts vendor for Workshop estimates while keeping the Public kiosk on the free vendor. Only eBay has a live backend today, so both toggles currently have no effect — they're ready for when a paid vendor (e.g. a dedicated used/LKQ or OEM-dealer-network API) is added.
VIN decoding runs through a local NHTSA vPIC-backed microservice. It decodes locally first and falls back to a configurable third-party vendor when needed. The connection settings below are this app's own — the vendor's own API key/URL live on the decoder service itself.
Shop/insurer business rules for estimate money math — applies to every estimate on every surface (Public kiosk and Workshop alike), not gated per surface like ACV/Parts.
Controls how confident the grounding model (GroundingDINO) must be before a per-part AI-cropped photo is shown on an estimate. Real-world testing found no single value cleanly separates correct crops from wrong ones — a low floor lets some confidently-wrong photos through, a high floor can suppress nearly all crops. Tune this based on real estimates as they come in; takes effect on the very next estimate generated, no restart needed. Not gated per surface — applies identically to Public and Workshop.
Stripe and PayPal configuration for the separate customer-portal (Angular + Node) app — this app never stores these values itself; every save here is proxied live to customer-portal-api over the internal service network. Takes effect on that service's very next request, no restart needed.
How and where this app sends customer/admin email — provider config, the shared From Address, link-building base URL, and support routing. Proxied live to customer-portal-api, same as Payment Providers above.
Pay-per-estimate and subscription pricing, both admin-configurable. Proxied live to customer-portal-api, same as the other Customer Portal tiles.
Webhook signature failures, fulfillment errors after a payment already succeeded, and synchronous PayPal-capture failures — recorded with enough detail (event/order id, the affected estimate, a truncated stack trace) to actually debug, not just "something failed".
Customer-reported issues — exhausted regenerate attempts, general "Report an Issue" submissions, plain data-error reports, and generation failures — each carries a tracking code and, for a guest, a contact email. Processing a refund (generation failures only) charges nothing new; it reverses the original report-unlock payment via Stripe/PayPal directly.
Browse past vision-sourced estimates — photos, VIN/vehicle specs, OBD fault codes, and per-part damage/disposition labels — to curate a dataset for fine-tuning the vision model. Select rows and export a zip (original photos + a manifest.json of the labels). Filter to "Reviewed only" for technician-corrected labels, the higher-value signal.
Name/logo/favicon shown to customers on the self-service wizard (customer-portal-web, selfestimator.com) — separate from App Branding's Workshop-internal identity (eadjustor.com).
On/off switches for optional customer-facing features, plus Google Sign-In — folded in here rather than given its own tile since it's a single field, not really payment/email/ pricing. Toggles below are proxied through a curated view of the Customer Portal's own config (not a second copy); Google Client ID is saved via the same general settings endpoint the other Customer Portal tiles use.
Edit the text shown on the public FAQ, Terms of Service, Privacy Policy, and Refund
Policy pages — changes go live immediately, no deploy needed. This is a plain text
editor, not rich formatting: for Terms / Privacy / Refund Policy,
start a new section with a line beginning ## (e.g. ## 1.
Refunds), and separate paragraphs with a blank line. For FAQ,
start each entry with a line beginning Q: and its answer on the next
line(s) beginning A: (an answer can span several lines — the next
Q: line starts a new entry). Reviews is a real list
editor below instead of raw text — add/remove entries directly, each with a name,
star rating, and comment. Manually-entered reviews here are shown, with the name as
typed, alongside real customer feedback in the landing page's "Reviews (N)" dialog —
a real customer's own submitted feedback shows their own typed name if they gave one,
otherwise "Verified Customer".