GEMA PlantationMobile + web + AI
Taking palm oil plantation work off paper
One data flow for a palm oil plantation: an offline Android app for field supervisors, a web CMS for estate offices and management, and a sync with the company's ERP.
- Role
- Software engineer and product lead: Android app, web CMS and backend
- Period
- Dec 2025 – Present
- Team
- I lead 2–4 developers (usually 2) and coordinate with implementators and clients
- Status
- Piloting
- Scale
- In pilot with a plantation client, development continuing
- 1×recorded once in the field, no re-typing in the office
- 9management reports, from harvest to worker performance
- 6fruit ripeness classes detected on the phone
Every job now has a photo, location, unique record number and timestamp, and the chain from block to hauling to delivery note is connected. Time and cost savings will be measured during the pilot, so I'm not claiming percentages yet.
Context
The problem
Field supervisors wrote everything in notebooks and clerks typed it into the system later, so the office saw yesterday's work at best. Paid work days were hard to verify without photos or locations. Mistakes, duplicates and buddy-punching affected wages and bonuses. Most blocks have no internet, and the gap between fruit harvested and fruit hauled was hard to trace.
Solution
What we built
The office plans the day's work in the CMS. Supervisors download it, take attendance, and record the work with photos and GPS on the phone, fully offline. Harvest is collected, delivery notes are printed over Bluetooth or written to an NFC card, and everything uploads when there's signal. The CMS turns it into dashboards and reports without anyone re-typing.
- Kotlin
- Hilt
- Room
- CameraX
- TensorFlow Lite
- YOLOv8
- NFC
- Bluetooth printing
Web CMS, backend and infrastructure
- Next.js
- React
- TypeScript
- Tailwind CSS
- TanStack Query
- Motion
- Leaflet
- .NET Core
- SQL Server
- Swagger
- IIS
- NGINX
- GitHub Actions
- Third-party LLM
Workflow
How the data flows
- PlanThe estate office creates and confirms the daily work plan (RKH) in the CMS.
- DownloadSupervisors pull the plan and master data onto their phones.
- AttendanceWorkers check in by QR code or face recognition.
- RecordHarvest or upkeep work is logged as a work record (BKM), with photos and GPS.
- HaulHarvest is collected, and a delivery note (SPB) is printed or written to an NFC card.
- ReportRecords, hauling and delivery notes upload to the CMS for dashboards and reports.
Scope
What's in it
Android app (field)
- Harvest: regular and piecework, manual (per collection point) and mechanical (per lane)
- Upkeep: jobs, workers, output and materials used
- Photo per worker and GPS trail
- Attendance by QR code or face recognition
- Delivery notes via Bluetooth thermal printer or NFC card
- Fruit ripeness detection with the camera, on the device
- Offline-first, with safe retries and no duplicate uploads
Web CMS (office)
- Dashboards for production, tonnage, % hauled and harvester productivity
- Comparison with the previous day, month or date range
- Daily plans, work records, uncollected fruit with age indicator, hauling and delivery notes
- 9 management reports in PDF and Excel
- Leaflet map of supervisor locations
- GapAI, an assistant on a third-party LLM that answers questions about plantation data
- Role-based access and dark mode
Backend and integration
- .NET Core APIs for the mobile app and the CMS, on SQL Server
- Direct connection to the ERP database to sync master data, daily plans and purchase orders
- Deployed on IIS behind NGINX, with CI/CD on GitHub Actions
- External API for clients running a different ERP
Business rules
Rules the system enforces
- One work record number per job and block. A daily plan can produce several records.
- Harvest records (PN) and upkeep records (RW) are numbered separately.
- One work day per worker per day. Bonuses come from output.
- A worker already booked on another job that day triggers a warning before saving.
- Records lock once they reach the server.
Decisions
Decisions and trade-offs
Offline-first, with NFC as the fallback transport
Everything is saved locally and queued. Where there's no signal at all, harvest and delivery data moves between devices on an NFC card. Uploads can be retried safely without creating duplicates.
Ripeness detection on the phone
A YOLOv8 model runs in TensorFlow Lite with a GPU delegate: tensor input and output tuned, NMS, bounding box overlay, and throttling so the camera stays smooth.
Numbering that matches how the estate works
One record per job and block, separate series for harvest and upkeep, double-booking checks, and records locked after upload. Wages and bonuses depend on it.
Standalone or integrated
Each client runs on its own server and database. The system works on its own, or syncs with the client's existing ERP when they have one.
Integrate with the ERP at the database
The .NET Core backend reads the ERP database directly, so master data, daily plans and purchase orders arrive without exports or extra middleware. Clients on a different ERP get an external API instead.
One form for two harvesting methods
Some divisions harvest manually per collection point, others mechanically per lane. Both fit one form, so supervisors don't switch screens.
My role
What I owned
- Went on site to estates for field studies, and gathered requirements with the client and field staff.
- Lead the product and a small team (usually 2, up to 4 developers); estimate and plan the work.
- Designed the Android app to work with little or no internet.
- Built harvest and upkeep records, including numbering, validation, manual and mechanical harvesting, regular and piecework.
- Integrated TFLite ripeness detection and face recognition for attendance.
- Implemented NFC read and write, the delivery note flow and supervisor location tracking.
- Built the CMS dashboards, comparisons, 9 reports, GIS map and role-based features.
- Connected an LLM as an in-app assistant scoped to plantation data.
- Built the backend and the integration with the company ERP, plus an external API.
- Handled build issues, database migrations and field performance.
- Presented the product to clients, trained users, and support them online and on site.
- Designed the product brochure and presentation decks.
Artefacts

Have a process that should be a system?
I'm not looking for a new role, but I'm always up for a conversation about a system, a process or a collaboration.