Dev Lab

Automotive · 2026

Admin panel for a car rental

The fleet, the customers with their documents, and rental contracts with printable forms. Everything needed to hand a car over and not lose the paperwork.

Client
RentIt.md
Year
2026
Discipline
CRM systems
Timeline
part of the RentIt project

The problem

A rental business has two sides. The storefront, where someone picks a car, and the back office, where that same car has to be handed over: check the documents, draw up the contract, record the condition at handover and at return. The second half usually stays on paper and in messages. While the fleet and the prices are edited straight in the database, every rate change is a developer task, and contracts get printed from a Word template that everyone keeps their own copy of.

What we did

We built a separate application on its own domain. The fleet is edited through the interface, together with the rate ladder: the longer the rental, the cheaper the day, and that formula is the same on the site and in the panel because it lives in a shared package. A customer record holds the ID card and the driving licence, both sides, with expiry dates, and those files are private and served only against a token, unlike the car photos. The contract is assembled from a template: rental, handover and return, three documents, each exported to PDF. The signed scan is uploaded back into the same contract, so the paper and the digital version sit together.

The outcome

The panel is in production on its own domain. The fleet and the prices change without a developer, and every rental carries three documents plus the signed scans.

Stack

  • React 19
  • TypeScript
  • Vite
  • Mantine
  • RTK Query
  • Node.js
  • Express
  • MongoDB
  • docxtemplater

What the system does

Fleet

  • The car record: body, gearbox, drive, fuel, seats
  • A rate ladder by duration: the longer it runs, the cheaper the day
  • The same pricing formula on the site and in the panel
  • The car description in three languages
  • A photo gallery with drag-and-drop upload
  • Picking which cars go on the site's front page

Customers

  • ID card and licence, both sides, in the customer record
  • The expiry date of each document
  • Status: active or blocked
  • A rental counter
  • Search by name and phone
  • Customer documents are private and served only against a token

Contracts

  • A contract for the chosen car, customer and dates
  • Three documents from templates: rental, handover, return
  • PDF generated from a DOCX template
  • The signed scan is uploaded back into the same contract
  • States: active, completed, cancelled
  • Search by contract title
  • A signature counter: "0 of 3 signed" on every contract
  • Rental length in days, computed from the dates

Access and files

  • Three levels: read, write, user management
  • Token in an httpOnly cookie, with a separate CSRF header on writes
  • The role is checked against the database on every request
  • Car photos are public, customer documents are not
  • A size limit and a type allowlist on upload

Interface

  • Light and dark theme, following the system setting by default
  • Skeletons while loading and explicit empty states, not blank tables
  • States are coloured badges: active, completed, blocked

Screens from the system

  • The fleet, with the lowest rate derived from the ladder
  • Customers and their document scans, with expiry dates
  • A contract: three documents, PDF generation and the signed scan
  • Rental contracts, with the length and state of each
  • Editing a car: the rate ladder and the photo gallery

In numbers

documents for every rentalrental, handover, return
3
access levels
3
pricing formula for site and panelin a shared package
1