Rannikon: Building a Full-Stack Farm Timesheet System from Scratch
How I designed, built, and deployed a complete workforce management platform for Rannikon Puutarha berry farm in Finland, serving 300+ seasonal workers across 6 house groups in 5 languages.
01 · The Overview
Rannikon Puutarha is one of Finland's largest berry farms, located in Halikko, Southwest Finland. Every season they employ over 300 seasonal workers from Ukraine, Cambodia, Vietnam, Nepal, and beyond, each required to track their daily working hours across four official payroll paper forms: the white paper, orange paper, weekly summary, and green paper.
Before Rannikon existed, every worker filled these forms by hand. Every calculation was done manually. Supervisors recorded arrival times in notebooks. Payroll staff spent days verifying hundreds of paper submissions at the end of each month. Mistakes were common. Disputes over hours happened regularly.
I built Rannikon to solve all of this.
02 · The Challenge
The farm had no digital system for tracking worker hours. The existing process:
- Workers arrived at the farm and supervisors wrote down their work numbers and start times in notebooks
- Workers manually calculated their own hours across 4 different paper forms
- Calculation errors were frequent: the formula for white paper, orange paper, and weekly summary is complex
- Supervisors sent handwritten daily logs to housemasters via Facebook groups
- Housemasters manually sorted logs by house group and forwarded to payroll
- Payroll staff received hundreds of paper submissions monthly with no way to verify them against original supervisor records
The farm manager, Lina Rannikko, had no digital visibility into daily operations. The payroll team, led by Aleksi and Johanna, had no automated verification system.
03 · The Solution
I approached Lina Rannikko directly and proposed building a complete digital workforce management system. She approved the project, and I built the entire system solo over several months.
Rannikon is a full-stack SaaS application with:
- A web app at
rannikon.com - A native Android mobile app on Google Play Store
- A Fastify REST API at
api.rannikon.com - A PostgreSQL database hosted on Supabase EU
- Deployed on Render with auto-deploy from GitHub
04 · The Calculation Engine
The core of the system is the automatic hour calculation engine. Workers enter three values: actual start time, actual finish time, and total break duration. The engine automatically calculates:
White paper: work paid by the hour
- White start = actual start time
- White finish = actual start + 8 hours + eating break (30 min if break is 30 min or more)
- White hours = always 8:00 (or less if worker finished early)
- Extra breaks = total break minus 30 minutes eating break
Orange paper: extra work paid by the hour
- Orange start = white finish
- Orange finish = actual finish
- Orange break = same as extra break on white paper
- Orange hours = orange finish minus orange start minus orange break
Weekly summary: auto-generated from all entries
- Working hours row (max 8 per day)
- Extra hours row (max 3 per day Monday to Friday, max 11 Saturday)
- Berry picking kg row
- Total hours per day and per week
Green paper: berry picking, salary paid by kg
- Separate from field work entries
- Workers enter start time, finish time, kg picked, and what was picked
- No calculation: displays exactly what the worker entered
- Eating break column always shows 1 hour
This calculation engine runs entirely on the backend (Fastify), ensuring all workers see the same accurate result regardless of device or browser.
05 · The Role System
Rannikon has 6 user roles, each with a dedicated page and specific permissions:
Worker
- Logs daily hours
- Views and downloads all 4 papers as PDF or Excel
- Edits any cell directly on the papers
- Submits monthly papers to payroll
Supervisor
- Records worker batches at the farm (multiple workers, one start time)
- Records breaks throughout the day (system accumulates total)
- Sets finish time per batch: auto-fills all workers' timesheets
- Sends daily worklog to admin via email
- Exports PDF and Excel of the day's worklog
Housemaster
- Receives daily worklogs from admin sorted by their house group
- Downloads as PDF, Excel, or image
- Shares to Facebook group or WhatsApp
-
Workers are automatically sorted by work number into 6 house groups:
100–199: Kivilinna / Salo200–299: Karton Cambodia300–399: Karton International400–499: Vassila500–599: Suppala600+: Salo / Turku
Admin
- Views all 300+ workers
- Receives all supervisor daily logs
- Auto-sorts worklogs by house group and work number
- Sends each group worklog to the correct housemaster
- Simultaneously sends to payroll for verification
- Invites new users with role assignment via email
- Manages all roles: worker, supervisor, housemaster, payroll, admin
Payroll
- Receives daily supervisor worklogs from admin for verification
- Receives monthly paper submissions from workers
- Smart verification system compares supervisor recorded hours vs. worker submitted hours
- Shows match, mismatch, missing from worker, missing from supervisor per day
- Approves, rejects, or flags submissions needing review
- Exports verification reports as PDF
Worker archive: daily worklog visibility
Every worker can log in and view the archive page, a chronological record of all supervisor worklogs recorded at the farm. Workers use this to cross-check their own recorded hours before submitting to payroll. Worklogs are stored by date and accessible to all workers regardless of house group. This gives every worker full transparency into what was recorded on the field by their supervisor, eliminating disputes over hours.
Rannikon board: real-time farm display system
Rannikon Puutarha is installing televisions in each house group building. These screens sync directly with the supervisor recording system in real time. As supervisors record worker arrivals, batches, and finish times on the field, the information appears live on the television screens in each house.
At weekends, the weekly worklogs are displayed on the house televisions. Workers can walk up to the screen and see their recorded hours, start times, finish times, and total hours for the week without needing to open the app.
This feature eliminates the need for housemasters to manually post worklogs to Facebook groups every day. The information reaches workers automatically through the screens installed in their living spaces.
06 · The Technical Stack
- Frontend:
Next.js 16,React,jsPDF,jspdf-autotable,xlsx, DM Sans font - Backend:
Fastify 5,PostgreSQL, JWT authentication, Google OAuth - Database: Supabase EU West (Ireland)
- Email: Resend (
noreply@rannikon.com) - Mobile:
React Native(Expo SDK 54),expo-print,expo-sharing,expo-secure-store - Hosting: Render (web service + static site)
- Languages: English, Ukrainian, Khmer (Cambodia), Vietnamese, Nepali
- Version control: GitHub (
github.com/victorabuchi/rannikon)
Key technical decisions
- Calculation engine lives entirely on the backend: no duplicate logic on the frontend
- Dates stored as noon UTC to avoid timezone off-by-one errors in Finland (UTC+3)
- JWT tokens with 30-day expiry stored in
localStorage - CORS configured explicitly to allow the
DELETEmethod - Green paper entries live in a separate table (
green_paper_entries) from field work entries (timesheet_entries) - Smart time input parsing: accepts
10:00,10.00,10,00, and1000formats
07 · The Impact
- 300+ active workers using the system across 6 house groups
- 5 languages supported: workers use the app in their native language
- Zero manual calculation errors: the engine handles all math automatically
- Supervisors save hours daily: batch recording replaces manual notebooks
- Payroll verification reduced from days to minutes
- Lina Rannikko (farm manager) officially approved and endorsed the system
- Published on Google Play Store
- Farm manager connected Victor with other companies for potential projects
08 · What I Learned
1. Talk to real users first
The calculation formula changed multiple times based on feedback from actual farm workers and payroll staff. Getting it right required understanding the physical paper forms workers had been using for years.
2. Keep calculation logic in one place
A major bug occurred early on because the frontend had its own copy of the calculation formula that diverged from the backend. Always have one source of truth.
3. Build for the real context
Workers use the app in fields with poor connectivity, on cheap Android phones, in languages other than English. Every design decision had to account for this.
4. Start simple, add complexity gradually
The system started as a basic timesheet calculator. Supervisor batch recording, payroll verification, and the berry picking green paper were all added based on direct requests from stakeholders.
5. Personal relationships matter in business
The project moved forward because of face-to-face meetings with Lina, Aleksi, and Johanna, not just emails or messages.
09 · Tech Links
- Live app: rannikon.com
- GitHub: github.com/victorabuchi/rannikon
- Mobile (GitHub): github.com/victorabuchi/rannikon-mobile
Are you looking for a developer who can build real solutions for real problems?
contact@victorabuchi.com