Technical Architecture
From intake to seal, six stages.
Every report runs the same pipeline: who does what, where each datum comes from, which key signs it — all of it below.
Ed25519 signature · SHA-256 chain · RFC 3161 timestamp · 15 modules
Pipeline
Six stages. Each with a named owner, an input and an output.
A typical report is finished in 42-50 minutes. The measurement stage takes most of that; every other stage together stays under 15 minutes.
- 01
Intake
Reception · < 5 min
InVIN, plate, odometer, customer identityOutWork order ID · chain-root entryThe vehicle enters the centre; reception records the VIN and the odometer. That first record becomes the root of the chain — everything after it references this record's hash.
- 02
Assignment
Branch manager · < 2 min
InWork order ID, an available technicianOutAssignment record · notificationAn available technician is assigned. The technician's tablet syncs the work order and queues the modules. Offline mode can take over.
- 03
Measurement
Technician · ~35 min
InVehicle · measuring equipment · technician tabletOut15 module outputs · photo evidence · OCR outputThe 15 modules are completed in order. The technician photographs the reading on the instrument's own display and types the value into the tablet form; on some modules OCR suggests it automatically. Every entry is stored in structured fields and the photographs are attached to the module.
- 04
Quality control
Branch manager · ~8 min
InCompleted module outputsOutApproval · or a return with a noteThe manager reviews each module and compares the form entries against the attached photographs. Anything missing or inconsistent sends the work order back to the technician; every return is written into the chain with its reason.
- 05
Sealing
Branch manager · < 1 s
InApproved report payloadOutEd25519 signature · SHA-256 root · RFC 3161 timestampThe manager signs the report with an Ed25519 private key. The report hash references the hash of the previous attested report; the chain grows. The timestamp comes from an independent TSA.
- 06
Publication
System · < 2 s
InSigned reportOutQR · shareable URL · VIN history entryThe report is published at the public verification endpoint. A QR code is generated, the dealer panel receives it, and the VIN history is extended. A buyer can verify it from any device.
Test Modules
15 modules, 183 separate checkpoints.
Each module's data source — a form entry, photo evidence, or both — is written into the report explicitly. Photographs are attached to their module and bound into the report chain under the same hash.
- M01Body panelsForm + photoPanel gauge + photo22
- M02PaintForm + photoPaint thickness gauge + photo18
- M03EngineForm + photoOBD device display + photo34
- M04DynamometerForm + photoDynamometer display + photo6
- M05BrakesForm + photoBrake tester display + photo8
- M06SuspensionForm + photoTester display + photo4
- M07Side slipForm + photoTester display + photo2
- M08OBD / faultsForm + photoOBD scanner display + photo15
- M09TyresForm + photoTread depth + photo8
- M10ChassisPhotoPhoto set from under the lift12
- M11Road testForm entryTechnician observation form9
- M12InteriorPhotoTablet photo set14
- M13Exterior bodyPhotoTablet photo set11
- M14Seals & fluidsForm + photoObservation form + photo7
- M15Airbag & electricsForm + photoScanner display + photo13
Cryptographic Layer
Break the chain once and everything breaks.
Every attested report carries a payload, a signature and a chain hash. The payload is serialised field by field as canonical JSON; it is signed with the manager's Ed25519 private key; then a SHA-256 chain hash is computed that references the previous report's root hash.
Keys live on the branch manager's own device. The Centre package includes HSM support; the signing operation can be delegated to a hardware module.
Security architecture in detail →1. Canonicalise the payload
> canonical = rfc8785(rapor)
// → deterministic bytes, keys in alphabetical order
2. Ed25519 signing
> digest = sha256(canonical)
> sig = ed25519.sign(signer_priv, digest)
// → 64-byte signature, verifiable with the public key
3. Chain hash
> prev_root = chain.tail_for(vin)
> root = sha256(canonical || sig || prev_root)
// → a separate Merkle-like chain per VIN
4. Timestamp
> stamp = rfc3161.stamp(root)
// → trusted time from an independent TSA
5. Publication
> publish(rapor, sig, root, stamp)
// → publishes to the public verification endpoint + QR
Data Residency
Every data type has a place, a period and a named reader.
All customer data is held active-active in two data centres inside Türkiye (TR1: İstanbul, TR2: Ankara). Data does not leave the country; our subprocessor chain is KVKK compliant — KVKK is Türkiye's data-protection law.
- Report dataTürkiye · TR1/TR210 yearsReport owner + inspection centre + public verification (summary only)
- Personal data (PII)Türkiye · TR1/TR22 years (KVKK)Authorised centre staff + the vehicle owner
- Signing keysLocal device / optional HSMFor the life of the keyThe signer alone (branch manager)
- Photo archiveTürkiye · TR1/TR25 yearsCentre audit staff + system auditor
- Verification logsTürkiye · TR1/TR2Aggregate counter, no individual recordNone — the counter is public
Service Level
A stated commitment, a measured uptime.
Public verification endpoint
12-month rolling
99.95%
Centre panel (signing)
12-month rolling
99.9%
Technician tablet (offline-first)
operating hours
99.5%
API (dealer / integration)
12-month rolling
99.9%
SLA targets are contractual for the Branch and Centre packages. A best-effort principle applies during the pilot. Credit rules in the event of an outage are set out in the Terms of Use document.
Change one byte and the chain breaks.
API documentation, webhook events and the OpenAPI 3.1 definition live in the developer portal; for a security review, talk to the solutions team.