TechRent
A CRM for construction equipment rental — booking with availability checks, a fleet calendar, payments, manager permissions and an audit log.
- Role
- Analysis, design, development with Claude Code (graduation project)
- Period
- 2026.06 → 2026.10
- Status
- Production
- Stack
- Go · PostgreSQL · React · TypeScript · Zustand · Docker · Nginx · OpenAPI · BPMN
Interface
01 / 06Problem
Small companies own equipment — excavators, cranes, dump trucks — and part of the time it sits idle. Renting it out pays, but rentals are tracked in spreadsheets and on paper. It is easy to promise one machine to two customers or hand over one that is under repair, and who owes what has to be worked out by hand. A heavyweight ERP is too expensive and too slow to roll out for this.
Solution
TechRent replaces spreadsheets with a simple web service for managers. The system checks whether equipment is free on the requested dates, calculates the rental price from the rates, tracks payments and shows who owes money. The administrator invites managers by link and grants them per-module permissions, and every change goes into an audit log.
A graduation project. I handed the finished system to a company with its own equipment fleet for review and got feedback from its head. I ran it as the analyst and architect — requirements, data model, API, role model — and wrote the code with Claude Code step by step, reviewing every step. I documented the key feature, booking, as an end-to-end case and accepted the implementation against the code, which surfaced 11 mismatches with the requirements.
Goals
- 01Prevent double booking and renting out broken equipment
- 02See the whole fleet's availability for a month in a minute
- 03Calculate prices and debts without manual maths
- 04Give managers exactly the permissions they need
Features
Key requirements
| ID | Requirement | Priority |
|---|---|---|
| FR-01 | One piece of equipment cannot have two active orders with overlapping dates — even under concurrent requests. | Must |
| FR-02 | Broken equipment cannot be booked (422); equipment under maintenance cannot be booked for those dates (409). | Must |
| FR-03 | Price: several days — daily rate × days inclusive; a single day — hourly rate × hours. | Must |
| FR-04 | Payments on an order cannot exceed the order total. | Must |
| FR-05 | The order number ТР-year-NNN is unique and never reused after an order is deleted. | Must |
| FR-06 | A manager sees and changes only the modules the administrator opened to them. | Should |
| NFR-01 | Integrity at the database level: CHECK, UNIQUE, foreign keys and an EXCLUDE constraint. | Must |
| NFR-02 | Every create, update and delete is logged; a logging failure does not roll back the operation. | Must |
| NFR-03 | The whole system starts with a single docker compose up. | Should |
Scenarios
- 01Finds free equipment in the calendar and marks the dates
- 02The form fills in the rates and calculates the total; the manager picks the customer and site
- 03In one transaction the server checks breakdowns, maintenance and overlaps
- 04The order gets number ТР-2026-015 and the event goes into the audit log
- 01Creates a manager and ticks the modules and actions they may use
- 02Gets a one-time link valid for 7 days and passes it on
- 03The manager sets their own password — the administrator never sees it
- 04Permissions go into the token at sign-in; the menu shows only what is allowed
Timeline
- Steps 1–3FoundationDocker Compose, a Go API on Chi, migrations embedded in the binary, JWT and roles.
- Steps 4–7Core recordsEquipment catalogue, customers and sites, orders with pricing, payments.
- Steps 8–11ControlAudit log, Gantt calendar, equipment maintenance, date-derived order statuses.
- Steps 12–14Staff and financeDetail panels, manager invitations and permissions, financial summary and debtors.
- AcceptanceCase and feedbackThe end-to-end booking case, 11 findings from the code and the company's feedback; all three high-severity ones and repeated numbers fixed.
- NextNotifications and documentsTelegram notifications, contract, invoice and certificate in PDF, fleet utilisation analytics.
Challenges
Outcome
A working CRM built in 14 steps — about 5,500 lines of Go and 6,500 lines of TypeScript — reviewed by a real company. An end-to-end booking case, OpenAPI, BPMN and a data dictionary; of 11 analyst findings all three high-severity ones and repeated numbers are fixed, and the races are verified with concurrent requests.
Next — server-side checks for order edit and cancel permissions, Telegram notifications and PDF documents.