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-Idheader 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.
Open NilamFlow (opens in a new tab) App Store: NilamFlow (opens in a new tab) Google Play: NilamFlow (opens in a new tab)