DSE-Mriya
Internal · PWAInternal productAn internal PWA for the heavy-equipment department: an operator logs plan and actuals from the field in a minute, the manager sees it all in numbers and exports to Excel. Built for my own department's need.
Why it exists
The heavy-equipment department at Mriya Resort & SPA runs dozens of jobs a day: operators spray, cultivate and mulch the vineyards, and occasionally take on land work on the side — planting grape seedlings and preparing plots. Reporting used to be verbal and on paper — who did what and where, how much got done, how long each machine ran — almost impossible to turn into numbers.
I run this department and built a tool for my own pain: a simple app where an operator logs plan and actuals from their phone in the field in under a minute, and I, as the manager, see the whole picture in numbers and export it to Excel. Designed, styled and coded solo.
Plan in the morning, actuals in the evening
The workflow mirrors the real day. In the morning the operator opens the app, picks a location, a machine and the plots, and sets the plan and the start-of-shift engine hours. In the evening they come back and close the actuals in three fields: how much was done, end-of-shift engine hours, notes. No extra screens — everything is large and built for a thumb.
Login is a short PIN, no usernames or passwords — faster in the field. Forms are cached offline, so poor signal among the vineyards doesn't stop a report — data syncs the moment there's a network.
The manager sees it all in numbers
The whole point of the project. The dashboard shows a summary for the period: hectares and rows worked (plan vs actual) and the engine hours each machine ran. Below it are the breakdowns I used to total up by hand.
- By operator — who did how much and logged what hours
- By machine — the load on each tractor
- By job type — where the hectares and rows went
- Periods: week, month, quarter, year, or a custom range
Journal and Excel export
Every record lands in a filterable journal — by operator, machine and dates — so it's easy to pull up the history for any plot or person. One button exports the journal to Excel: a ready table for payroll, work orders and reporting upwards, with no manual re-typing.
Under the hood
A small but real app: one Next.js codebase serves both the operator PWA and the admin panel. Built simple and reliable — to work in the field and need no babysitting.
- Next.js 16 (App Router) · React 19 · TypeScript 5.9
- PostgreSQL 17 + Prisma 7
- Tailwind 4 + custom shadcn-style components, charts on Recharts
- PWA via @ducanh2912/next-pwa: add-to-home-screen, offline form cache
- PIN login with bcrypt and rate limiting, cookie sessions
- Excel export with exceljs; deployed via Dokploy with automatic TLS
A working day — in one window
The entire operator journey — from login to a closed shift — fits into a few simple, thumb-friendly screens.