The problem
Importing a vehicle goes through many hands: the shipping line, the customs broker, the agent who handles the plate and the consignee. Each unit piles up documents, payments and deadlines, and the temporary plate expires if the paperwork drags on. With spreadsheets and scattered messages it is hard to know what stage each vehicle is at, which payments are missing and which plates are about to expire.
What it does
Operations summary
Registered and in-transit vehicles, pending customs payments, temporary plates about to expire and the CIF value of units not yet delivered with plates.
Per-vehicle tracking
Sixteen statuses, from shipment to delivery of the permanent plate, with a list filterable by status.
Plate fee calculation
The permanent plate fee based on CIF value, CO₂ emissions and model year, plus a surcharge when the temporary plate expires.
Documents and log
Bill of lading, customs declaration, Carfax and other documents per vehicle, with a comment log.
Directory
Clients, consignees, agents and customs brokers, with reversible deletion.
Users and roles
Administrator and collaborator. Only administrators delete records and manage catalogues and users; the first sign-in requires a password change.

How it is built
- Java 21 back end with Spring Boot 3.4, Spring Security with JWT, JPA and MySQL 8.4 with Flyway migrations.
- Angular 18 front end with PrimeNG, in light and dark mode.
- Documents in private object storage, served through the API.
- Over 300 automated tests across front end and back end, including integration tests with Testcontainers.
- A limit on sign-in attempts, and Docker containers for the API, the web app and the database.
Status and authorship
The team built it in 2025 from a scope defined with a vehicle importer. The system and its code belong to Devkora; in 2026 it was modernised and published as a demo with fictitious data, with no information about that company.
