Jharkhand Fresh
Subscription delivery that turns into tomorrow's orders by itself
A daily delivery service with a prepaid wallet. A customer app, a delivery app, an admin panel and a backend that converts subscriptions into orders every evening.

The challenge
Daily essentials such as milk are bought the same way every day, yet in most Indian towns the arrangement is still informal: a standing order agreed in person, cash collected at the end of the month, and a phone call when plans change.
Jharkhand Fresh wanted to run that service properly, with customers managing their own schedules and paying in advance.
The requirement
- Customers subscribe once and receive deliveries on a schedule they control.
- Payment is prepaid, through a wallet, so there is nothing to collect at the door.
- Delivery staff need a simple list of the day’s drops and a way to prove each one.
- The team needs to manage products, stock, warehouses and offers.
- Orders should only be offered where a warehouse can serve the address.
The solution
For customers. Sign-in is by phone number and one-time code. Customers browse the catalogue, add a delivery address on a map and set up subscriptions: daily, alternate days, chosen weekdays or a single delivery, in a morning or evening slot. Any subscription can be paused or cancelled. They top up a wallet, with coupons that can give cashback on a recharge, and see every transaction.
For delivery staff. The delivery app lists the day’s orders with customer details, one-tap calling and directions. Each delivery is confirmed with a photo, and a problem at the door can be reported as an exception.
For the team. The admin panel manages products and stock, categories, banners, warehouses and coupons.
Architecture
A NestJS API on PostgreSQL serves both apps and the admin panel. Warehouses and addresses are stored as geographic points, and PostGIS distance queries decide which warehouse can serve an address.
The core of the product is a scheduled job. Every evening it reads the active subscriptions, creates the next day’s orders and debits each customer’s wallet. Other jobs send low-balance reminders twice a day, in time for a customer to top up before the cut-off.
Payments go through Cashfree and Razorpay. Gateways sometimes fail to send a confirmation, so the backend handles their webhooks and also polls pending transactions on a timer. A recharge is never left in limbo.
Sign-in uses Firebase phone authentication with tokens verified on the server, and notifications use Firebase Cloud Messaging. Both apps check a minimum supported version on start, so an outdated build can be retired.
Technology
Flutter with Riverpod for both apps; NestJS, TypeORM and PostgreSQL with PostGIS; React and Tailwind CSS for the admin panel; Cashfree and Razorpay; Firebase Authentication and Cloud Messaging; Google Maps.
Outcome
Jharkhand Fresh runs on a complete system: customers manage their own subscriptions and wallet, orders are generated automatically each evening, and delivery staff work from an app that records proof of every drop.

