Product — Vehicle inspection booking & station platform Produs — Programări ITP și platformă pentru stații

ITP booking for drivers, a platform for the stations Programări ITP pentru șoferi, platformă pentru stații

ArvITP gathers every RAR-authorized inspection station in the covered counties into one place and connects the two sides that each needed it. The driver finds a station that fits their vehicle, sees live slots and books online — then keeps every legal deadline in a digital garage. The station gets a free tool to run its day: bookings, the inspection report, team, invoices, reports. Built end to end by Arverion — domain and law, design, web app, API, mobile apps, infrastructure.

ArvITP adună într-un singur loc toate stațiile ITP autorizate RAR din județele acoperite și leagă cele două părți care aveau nevoie de asta. Șoferul găsește o stație potrivită mașinii lui, vede orele libere și rezervă online — apoi își ține toate termenele legale într-un garaj digital. Stația primește gratuit un program cu care își conduce ziua: programări, raportul de inspecție, echipă, facturi, rapoarte. Construit cap-coadă de Arverion — domeniul și legislația, designul, aplicația web, API-ul, aplicațiile mobile, infrastructura.

StatusStare
Live in productionLive în producție
Live atLive la
Our roleRolul nostru
Product, design & engineeringProdus, design și inginerie
Built withConstruit cu
Next.js · NestJS PostgreSQL + RLS React Native (iOS & Android)React Native (iOS & Android)
ArvITP public site — search for a RAR-authorized inspection station
The public siteSite-ul public — search for a station from where you are, with a map that tells apart the ones you can book online. — cauți o stație pornind de unde ești, cu o hartă care deosebește stațiile rezervabile online.
The problemProblema

Calls, uncertain waits, and public data nobody can useTelefoane, așteptări incerte și date publice pe care nu le poți folosi

For the driver, ITP is a rare chore — once every two years on a normal car, just long enough to forget. When the deadline nears, it's calls to several stations, "try tomorrow", and sometimes a wasted trip because the station won't inspect an LPG car or the insurance lapsed on the day.

Pentru șofer, ITP-ul e o corvoadă rară — o dată la doi ani la un autoturism obișnuit, exact cât să-l uiți. Când se apropie termenul, urmează telefoane la mai multe stații, „sunați mâine", și uneori un drum degeaba: stația nu inspectează mașini cu GPL sau RCA-ul nu mai era valabil în ziua inspecției.

The station runs its day on a paper diary and Excel. The phone interrupts the inspection in progress. And although RAR publishes the list of authorized stations, it's built for reading, not searching — no map, no hours, no link to the person's car.

Stația își ține ziua pe agendă de hârtie și în Excel. Telefonul întrerupe inspecția în curs. Iar deși RAR publică lista stațiilor autorizate, e gândită pentru consultare, nu pentru căutare — fără hartă, fără ore, fără legătură cu mașina omului.

The approachAbordarea

One product, two sides, built on the same dataUn produs, două părți, pe aceleași date

We built a 2-in-1 product on one data model. The driver gets a single place to find the right station, compare and book — free, with instant confirmation — and a digital garage with reminders. The station gets a complete management tool: the work day, the inspection report, team, real capacity, invoicing and reports.

Am construit un produs 2-în-1 pe un singur model de date. Șoferul primește un singur loc în care să găsească stația potrivită, să compare și să rezerve — gratuit, cu confirmare imediată — plus un garaj digital cu mementouri. Stația primește un program de gestiune complet: ziua de lucru, raportul de inspecție, echipă, capacitatea reală, facturarea și rapoartele.

Free for the driver. The tool is free for the station too — commission applies only to the bookings the platform brings in. Behind them sit an admin console for the platform operator and a field tool for the sales agents who enroll the stations.

Gratuit pentru șofer. Unealta e gratuită și pentru stație — comisionul se aplică doar rezervărilor aduse de platformă. În spatele lor stau o consolă de administrare pentru operatorul platformei și un instrument de teren pentru agenții care înrolează stațiile.

DriverȘofer

Find, compare and book a station; keep every vehicle, document and deadline in a digital garage.

Găsește, compară și rezervă o stație; ține fiecare mașină, document și termen într-un garaj digital.

Pays nothing.Plătește nimic.

StationStație

A full management platform: work day, RNTR-1 inspection report, team, capacity, invoicing and reports.

O platformă de management completă: ziua de lucru, raport RNTR-1, echipă, capacitate, facturare și rapoarte.

Tool is free; commission only on platform bookings.Unealta e gratuită; comision doar pe rezervările platformei.

Platform operatorOperator platformă

An admin console: enroll stations, contracts generated from data and signed on screen, settlements, audit log.

O consolă de administrare: înrolarea stațiilor, contracte generate din date și semnate pe ecran, decontări, jurnal de audit.

Runs the whole platform.Conduce toată platforma.

Field agentAgent de teren

A phone-first tool: a work list by city, the visit sheet, GPS position, and the contract generated and signed on the spot.

Un instrument gândit pentru telefon: listă de lucru pe oraș, fișa de vizită, poziția GPS și contractul generat și semnat pe loc.

Enrolls stations in the field.Înrolează stații pe teren.
For the driverPentru șofer

The right station, live slots, and a price that's the price paidStația potrivită, ore libere reale și un preț care e prețul plătit

Search starts from the person, not the county border: from the phone's location or a locality, the radius grows until there are enough stations. It's a match, not just proximity — the restrictions in the RAR register ("doesn't inspect LPG vehicles" and others) become simple questions, asked only when they'd change the result. Slots are real-time, computed from the station's schedule, lanes and inspectors on duty.

Căutarea pornește de la om, nu de la granița administrativă: din poziția telefonului sau dintr-o localitate, raza crește până se adună suficiente stații. E o potrivire, nu doar proximitate — restricțiile din registrul RAR („nu inspectează vehicule cu GPL" și altele) devin întrebări simple, puse doar când schimbă rezultatul. Orele libere sunt în timp real, calculate din programul stației, bancurile ei și inspectorii de serviciu.

Station page · prices + live slotsPagina stației · prețuri + ore libere — the price shown is the price paid at the counter and on the invoice. The commission is computed from it, never added on top. — prețul afișat e prețul plătit la ghișeu și pe factură. Comisionul se calculează din el, nu se adaugă peste.
The same, on a phoneAcelași lucru, pe telefon — booking in the browser or in the native app, with SMS confirmation. — rezervare în browser sau în aplicația nativă, cu confirmare prin SMS.

"My Garage" keeps every deadline — and reads the registration for you„Garajul meu" ține fiecare termen — și îți citește talonul

A car is added by photographing its registration document: from one to three photos, AI reads the plate, the VIN, make, model and technical data by the harmonized European field codes — and nothing is saved without the person's confirmation. The garage then tracks inspection, insurance, road-tax vignette, first-aid kit, extinguisher, service and tyres, with automatic reminders before each deadline.

O mașină se adaugă fotografiind talonul: din una până la trei fotografii, AI citește numărul, seria de șasiu (VIN), marca, modelul și datele tehnice după codurile europene armonizate ale câmpurilor — iar nimic nu se salvează fără confirmarea omului. Garajul ține apoi ITP, RCA, rovinietă, trusă, extinctor, revizie și anvelope, cu mementouri automate înainte de fiecare termen.

The digital garageGarajul digital — vehicles and every deadline in one place. When an inspection passes at the station, the next ITP date lands here automatically. The owner's photos aren't kept, and name, address and personal ID aren't retained. — mașinile și fiecare termen la un loc. Când o inspecție trece la stație, următorul termen ITP ajunge aici automat. Fotografiile nu sunt păstrate, iar numele, adresa și CNP-ul nu sunt reținute.

The public site also carries an ITP guide built from the RNTR-1 order: what gets checked, the grounds for rejection by deficiency group and severity, and how long an inspection is valid for each vehicle type and use — each rule shown next to the article of law it comes from.

Site-ul public are și un ghid ITP construit după ordinul RNTR-1: ce se verifică, motivele de respingere pe grupe de deficiențe și gravitate, și cât e valabil ITP-ul pe fiecare tip de vehicul și regim — fiecare regulă alături de articolul de lege din care vine.

For the stationPentru stație

A platform the station actually runs its day onO platformă pe care stația chiar își conduce ziua

The work day is the screen the inspector lives on: who's next, at what time, which car, which person. Online bookings and walk-ins sit in the same grid, and bookings left unclosed from earlier days appear on top so nothing is lost.

Ziua de lucru e ecranul pe care stă inspectorul: cine urmează, la ce oră, ce mașină, ce persoană. Programările online și cele de la ghișeu sunt în aceeași grilă, iar cele rămase neînchise din zilele trecute apar deasupra, ca să nu se piardă nimic.

The work dayZiua de lucru — online and walk-in bookings in one grid; a walk-in is taken on the spot from the same screen. — programări online și de la ghișeu într-o singură grilă; cine vine fără programare intră pe loc, din același ecran.

The inspection report, exactly as RNTR-1 requiresRaportul de inspecție, exact cum cere RNTR-1

  • The three results in the orderCele trei rezultate din ordin — good; good with minor deficiencies recorded; rejected. Not a plain "pass/fail", because the third exists and means something else. — bun tehnic; bun tehnic cu deficiențe minore; respins. Nu un simplu „admis/respins", pentru că varianta a treia există și înseamnă altceva.
  • 31 deficiency types31 de tipuri de deficiențe — by the groups in the operations plan, with severity (minor, major, dangerous) and search by code or name. — pe grupele din Planul operațiunilor, cu gravitate (minoră, majoră, periculoasă) și căutare după cod sau denumire.
  • The next ITP date computes itselfUrmătorul termen ITP se calculează singur — from 23 validity rules, by vehicle type, use and age at the inspection date. The inspector sees it proposed and can correct it; on a pass it lands in the driver's garage. — din 23 de reguli de valabilitate, după tipul vehiculului, regim și vechime la data inspecției. Inspectorul îl vede propus și îl poate corecta; la o trecere ajunge în garajul șoferului.

The rest fits the same logic: real capacity is computed, not declared — from lanes, inspectors on duty and the limit per vehicle type, so a station can't sell slots it can't honour. Blocking a time range shows a preview of how many bookings are affected and how many customers can be told, before confirming. And customers brought in by the platform are protected — their phone numbers are masked and they're excluded from win-back campaigns.

Restul urmează aceeași logică: capacitatea reală se calculează, nu se declară — din bancuri, inspectorii de serviciu și limita pe tip de vehicul, deci o stație nu poate vinde locuri pe care nu le poate onora. Blocarea unui interval arată întâi câte programări sunt afectate și câți clienți pot fi anunțați, înainte de confirmare. Iar clienții aduși de platformă sunt protejați — telefoanele le sunt mascate și sunt excluși din campaniile de reactivare.

Behind the platformÎn spatele platformei

An admin console and a field toolO consolă de administrare și un instrument de teren

The platform operator enrolls stations and companies (details pulled from ANAF by tax code), and contracts are generated from data: the commission clause is written from the real parameters and carries a worked numeric example, computed by the very same function that computes the money at booking. The partner signs on screen, and a contract can only be activated once signed.

Operatorul platformei înrolează stații și firme (datele preluate de la ANAF după CUI), iar contractele sunt generate din date: clauza de comision e scrisă din parametrii reali și are alături un exemplu numeric, calculat cu exact aceeași funcție care calculează banii la rezervare. Partenerul semnează pe ecran, iar un contract poate fi activat doar semnat.

Admin consoleConsola de administrare — enrolment, settlements, integrity checks, a failures screen and an audit log for privileged actions. — înrolare, decontări, verificări de integritate, un ecran pentru eșecuri și jurnal de audit pentru acțiuni privilegiate.
Contract, generated from dataContract, generat din date — the commission clause with a worked example, signed on screen. — clauza de comision cu exemplu numeric, semnat pe ecran.

There's an activation gate: a station can take bookings only when it has a contract, active RAR authorization, a schedule, prices, lanes, a map position and a settlement model — a half-configured station never sells slots it can't honour. And for the sales agents, a separate phone-first field tool: a work list by city, the visit sheet, the station's GPS position captured on the spot, the company linked by tax code, and the contract generated, sent, signed and activated right there. The agent never has access to other stations' real data, and a built-in demo station (with invented customers) is kept out of settlements, reports and the public AI feed.

Există o poartă de activare: o stație poate primi rezervări doar când are contract, autorizație RAR activă, program, prețuri, bancuri, poziție pe hartă și model de decontare — o stație configurată pe jumătate nu vinde locuri pe care nu le poate onora. Iar pentru agenți, un instrument de teren gândit pentru telefon: listă de lucru pe oraș, fișa de vizită, poziția GPS a stației luată pe loc, firma legată după CUI, și contractul generat, trimis, semnat și activat pe loc. Agentul nu are acces la datele reale ale altor stații, iar o stație demo (cu clienți inventați) e exclusă din decontări, rapoarte și fluxul public pentru asistenți AI.

A detail that travelsUn detaliu care circulă

Every station gets its own share cardFiecare stație are propriul cartonaș

Each station page has its own 1200×630 image, generated on the server with the station's name, locality and its photo. When someone shares the page in a message or on social media, the preview shows the station — not a generic logo.

Fiecare pagină de stație are propria imagine de 1200×630, generată pe server cu numele, localitatea și fotografia stației. Când cineva distribuie pagina într-un mesaj sau pe rețele, previzualizarea arată stația — nu o siglă generică.

The pages also carry schema.org structured data (AutomotiveBusiness with address, hours and offers), so search engines read them the right way — and coordinates appear only where the position is known to street or building level.

Paginile au și date structurate schema.org (AutomotiveBusiness cu adresă, program și oferte), ca motoarele de căutare să le citească corect — iar coordonatele apar doar unde poziția e cunoscută la nivel de stradă sau clădire.

Auto-generated share card for a station, with its photo
An auto-generated share cardUn cartonaș generat automat — name, locality and the station's photo, rendered on demand. — numele, localitatea și fotografia stației, generate la cerere.
Under the hoodSub capotă

Interesting problems, solved properlyProbleme interesante, rezolvate ca la carte

Competing companies share one database, money has to be correct to the ban, and the law changes by vehicle type. A few of the pieces we're proud of:

Firme concurente lucrează în aceeași bază de date, banii trebuie să fie corecți la ban, iar legea se schimbă în funcție de tipul vehiculului. Câteva dintre piesele cu care ne mândrim:

Data isolation enforced by the databaseIzolarea datelor, garantată de baza de date

No station can see another's bookings or customers. The rule lives in PostgreSQL Row-Level Security, not in a filter the code might forget — and with no context, queries return zero rows: the system fails closed.

Nicio stație nu vede programările sau clienții alteia. Regula stă în PostgreSQL Row-Level Security, nu într-un filtru pe care codul l-ar putea uita — iar fără context, interogările întorc zero rânduri: sistemul eșuează închis.

Commission with VAT, computed once and rightComisionul cu TVA, calculat o dată și corect

Over a quarter of stations aren't VAT-payers, so one percentage would mean two contracts. The base is the price without VAT; everything is computed in bani, as integers, in one tested function — and a DB constraint checks each booking splits exactly three ways.

Peste un sfert dintre stații nu sunt plătitoare de TVA, deci un singur procent ar însemna două contracte. Baza e prețul fără TVA; totul se calculează în bani, ca numere întregi, într-o singură funcție testată — iar o constrângere verifică la fiecare rezervare că suma se împarte exact în trei.

ITP validity, computed from the lawValabilitatea ITP, calculată din lege

The RNTR-1 rules are data, not code: 23 rules, each with its article, ordered most-specific first. The same table feeds the public page, the inspector's report and the garage reminders — one rule, three places.

Regulile RNTR-1 sunt date, nu cod: 23 de reguli, fiecare cu articolul ei, ordonate de la cea mai specifică. Același tabel alimentează pagina publică, raportul inspectorului și mementourile din garaj — o regulă, trei locuri.

AI reads the registration — nothing trusted blindlyAI citește talonul — nimic crezut pe cuvânt

A wrong VIN looks exactly like a good one, so every field goes through the same validation as typed input. The read make is cross-checked against the manufacturer decoded from the VIN by our own offline decoder; what doesn't match is flagged. Photos are shrunk before sending and aren't kept.

Un VIN greșit arată exact ca unul bun, așa că fiecare câmp trece prin aceleași validări ca o valoare tastată. Marca citită se încrucișează cu producătorul decodat din VIN de un decodor propriu, offline; ce nu se potrivește e marcat. Fotografiile sunt micșorate înainte de trimitere și nu sunt păstrate.

Share cards generated per stationCartonașe generate per stație

A 1200×630 image rendered on demand with the station's name, locality and photo, so a shared link previews the station itself — paired with schema.org structured data for search engines.

O imagine de 1200×630 generată la cerere cu numele, localitatea și fotografia stației, ca un link distribuit să arate chiar stația — alături de date structurate schema.org pentru motoarele de căutare.

A role matrix a test keeps honestO matrice de roluri pe care un test o ține onestă

Six roles across the consoles. A test reads both halves from the source — the roles declared on each API route and every call the screens make — and fails if a role could see a call to a route that would refuse it. No button that leads to "access denied".

Șase roluri în console. Un test citește ambele jumătăți din sursă — rolurile declarate pe fiecare rută și fiecare apel făcut din ecrane — și pică dacă un rol ar vedea un apel către o rută care l-ar refuza. Niciun buton care duce la „acces interzis".

And the small things: reminder SMS are sent without diacritics on purpose (a single "ș" would triple the cost by switching character sets); geocoding is checked and coordinates are rejected if they fall in the wrong county; and there's an AI-ready public feed (llms.txt plus a JSON endpoint) for stations that take online bookings.

Și lucrurile mici: SMS-urile de memento se trimit fără diacritice intenționat (un singur „ș" ar tripla costul schimbând setul de caractere); geocodarea e verificată și coordonatele sunt respinse dacă nimeresc în alt județ; și există un flux public pregătit pentru AI (llms.txt plus un endpoint JSON) pentru stațiile care primesc programări online.

In the catalogÎn catalog

A catalog built to book fromUn catalog gândit ca să rezervi din el

709
RAR-authorized stations in the catalog.stații autorizate RAR în catalog.
108 / 5 counties/ 5 județe
localities covered.localități acoperite.
581
stations positioned to street or building level.stații poziționate la nivel de stradă sau clădire.
31
deficiency types in the inspection nomenclature.tipuri de deficiențe în nomenclator.
23
ITP validity rules (RNTR-1), as data.reguli de valabilitate ITP (RNTR-1), ca date.
75 + 24
web screens plus mobile screens, over 50 API controllers.ecrane web plus ecrane mobile, peste 50 de controllere API.

Catalog figures are served live from arvitp.ro and can change over time — a snapshot as of October 2026, not fixed metrics. Cifrele din catalog sunt servite live de pe arvitp.ro și se pot schimba în timp — un instantaneu din octombrie 2026, nu metrici fixe.

Web and nativeWeb și native

Native iOS and Android, the same accountiOS și Android native, același cont

ArvITP ships as a web app plus native iOS and Android apps, published in the App Store and Google Play. They carry map search and booking, the garage with camera reading of the registration and trip logs, push notifications for reminders, deep links that open the right screen, a few screens for station staff, and light/dark/auto themes. We say this in words rather than showing store badges, which are third-party marks with their own brand guidelines.

ArvITP este livrat ca web app plus aplicații native iOS și Android, publicate în App Store și Google Play. Au căutare cu hartă și programare, garajul cu citirea talonului din cameră și foile de parcurs, notificări push pentru mementouri, deep links care deschid ecranul potrivit, câteva ecrane pentru personalul stației și temă deschisă/închisă/automată. Spunem asta în cuvinte, nu prin badge-uri de store, care sunt mărci terțe cu propriile ghiduri de brand.

Honest notesNote oneste

What this case study does and doesn't claimCe afirmă și ce nu afirmă acest studiu de caz

RAR is a state authority, not a partnerRAR e autoritate de stat, nu partener

The product refers to "RAR-authorized stations" and uses authorization data published by the Romanian Auto Register. That's about authorization data only — nothing here implies an official partnership or affiliation with RAR.

Produsul se referă la „stații autorizate RAR" și folosește date de autorizare publicate de Registrul Auto Român. E vorba doar despre date de autorizare — nimic de aici nu sugerează un parteneriat sau o afiliere oficială cu RAR.

Catalog figures are a live snapshotCifrele sunt un instantaneu live

709 stations, 108 localities and the other catalog numbers are what arvitp.ro showed as of October 2026, served live. They change, so treat them as a snapshot, not fixed metrics.

709 stații, 108 localități și celelalte cifre din catalog sunt ce afișa arvitp.ro în octombrie 2026, servite live. Se schimbă, deci sunt un instantaneu, nu metrici fixe.

The console screens use demo dataEcranele de consolă folosesc date demo

The public-site screenshots are from production (read-only, public company data). The station, admin and garage screens are from a local instance with a demo station and invented accounts — plate numbers and phones are made up.

Capturile de pe site-ul public sunt din producție (doar citire, date publice de firmă). Ecranele de stație, admin și garaj sunt dintr-o instanță locală cu o stație demo și conturi fictive — numerele de înmatriculare și telefoanele sunt inventate.

Turn a tedious errand into a tapTransformă o corvoadă într-un singur tap

If your service runs on phone calls and paper schedules, we can turn it into a product — web and native, booking and back office included, built end to end. Dacă serviciul tău merge pe telefoane și planificări pe hârtie, îl putem transforma într-un produs — web și native, cu rezervare și back office incluse, construit cap-coadă.