Case · field operations
Who is on board right now
Technicians who board vessels to do maintenance. They clock in with their phone's location, work on an order and clock out. From the office, that was the question that had to be answered in one second: who is on board, on which vessel and since when.
The detail that makes it a product
The map does not plot every attendance record: only the ones with a clock-in and no clock-out yet. That is, it does not tell you what happened, it tells you what is happening. It looks like a detail, and it is the decision that separates a dashboard people watch from a report that gets filed away.
Permissions per resource, because not everyone sees the same thing
A technician, a supervisor and whoever does the invoicing need different screens of the same system. Permissions are granted per resource and grouped into roles, and the frontend router honors that same list: if you do not have the permission, the screen does not exist for you.
How it is built
A Node API with Express and Prisma on MySQL, a React frontend built with Vite, and the map with Leaflet over open tiles. All of it in containers.
- Node · Express
- Prisma
- MySQL
- React · Vite
- Leaflet
- Docker
What you learn taking a system out of the network it was born in
These screenshots come from running the whole thing outside the client's infrastructure, with made-up data. What turned up along the way:
- The list of allowed origins was written into the code, with the client's domains in it. From anywhere else, the system answers with a server error that does not say what is wrong. That belongs in an environment variable.
- A master permission that opens every route is convenient while you are developing, and it is exactly what you have to review before handing out real roles.
- The development server is not the production one. Building and serving with nginx, as on the real server, removes a whole class of surprises.
Do you have people working where the office does not reach?
Work reports, clock-in with location, orders closed out in the field and a number you can trust at the end of the month. You can have that without chasing anyone on WhatsApp.
Let's talk →