← Selected work

NilamFlow features page: harvest management, NilamAI, dual payroll engine, inventory and sales, profit tracking and live market prices
nilamflow.com, public features page.

Independent product · Agriculture

NilamFlow

Multi-tenant farm-management SaaS for Indian plantations: harvest, payroll, graded stock and buyer orders in one system, on the web and in native iOS and Android apps.

What I owned
Founder and architect. Laravel 12 with Livewire Volt, an API for the mobile apps, and Razorpay billing.
What made it hard
  • Pickers are paid by the kilo, the day or the tree; permanent staff by monthly salary.
  • Stock is tracked by grade.
  • Prices follow APMC and Rubber Board markets.
  • Billing is GST-aware.
  • Buyers order through a marketplace.
  • Field entry has to work offline.
How it works
Closing a harvest session writes one inventory transaction for the session’s produce and a payroll run for each picker. The session then moves to payroll pending. Buyer orders stay deliberate: the farmer lists stock, a buyer orders against the listing, and fulfilment commits the stock.
Decision
One shared database instead of a schema per tenant. Every farm-scoped row carries a farm ID, and a global query scope reads the active farm: the session on the web, an X-Farm-Id header on the API.
Tradeoff
One schema to migrate and operate. But every farm-scoped query depends on that context being set, and a missing context returns empty results.
What shipped
Live at nilamflow.com, with iOS and Android apps. Production-ready modules:
  • Harvest and harvest payroll
  • Inventory, transfers and processing
  • Retail and vendors
  • Recurring payroll and leave
  • Razorpay billing and plan limits
  • Market prices
  • API v1
What improved
A harvest weight is entered once. Closing the session produces the stock movement and the pickers’ pay, so nothing is re-keyed between sheets.