I Made an App for ₹10 Dal Rice and I’d Do It Again
Imagine you’re a migrant worker. You just moved to a new city and you’re hungry. Luckily, you know the Shiv Bhojan scheme exists. But where’s the nearest center? You don’t have a smartphone. You don’t speak English. You don’t know the area.
The Problem: A Meal Scheme That’s Hard to Find
Back in January 2020, Maharashtra’s government launched something cool. They called it the Shiv Bhojan scheme. The idea was to give cheap meals to people who need them. Really cheap. Just ₹10 per plate.
What’s in the plate? Two rotis, some vegetables, dal, and rice. That’s it, a proper meal. The government actually pays ₹50 in cities and ₹35 in villages for each plate. But the person eating it? They only pay ₹10. Coincidentally perfect for a college student suffering from month-end-lack-of-money crisis (me).
Pretty smart, right? Over 900 meal centers opened across Maharashtra. Millions of people got fed. But here’s the thing - nobody could actually find these centers easily.
Great Scheme, Terrible Discoverability
The Real Problem
The government has all the data. They know where every center is. They have health data. They have cleanliness scores. But it is all stuck distributed in spreadsheets and files which arguably aren’t that easy to access even for tech savvy people.
So three big problems popped up:
Problem 1: There was no easy way to find a center. No app. Nothing in Marathi or Hindi - the languages predominantly spoken across Maharashtra.
Problem 2: Nobody knew if a center was in a safe, clean area. What if the water was bad? What if there were disease issues in that district?
Problem 3: The government didn’t know which areas needed more centers. Which districts had the most hungry people? Which areas had the fewest centers?
Enter Trawler
That’s where Trawler comes in. It’s an AI platform built to fix all three problems.
The name “Trawler” refers to a type of fishing vessel that drags a net through the water to catch fish. In the context of the project, it suggests a systematic approach to searching for and identifying the best shivbhojan facilities, akin to how a trawler gathers resources from the sea.
Trawler doesn’t just tell you where the nearest meal center is. It tells you if it’s in a safe area. It tells you which districts need more centers the most. And it talks to you in your language - English, Hindi, or Marathi.
How Does It Work?
Trawler takes four different datasets and mixes them together:
- Location data - Where are all the meal centers?
- Health data - What’s the health situation in each district? How many kids are malnourished? How many people have diarrhea?
- Cleanliness scores - Which cities are clean? Which are dirty?
- Population data - How many people live in each area?
To be more specific, these were the datasets used:
- kml_shivbhojan_eateries.kml — KML geographic data containing eateries from Shivbhojan
- NFHS-5-MH-Maharashtra.csv — National Family Health Survey 5 data for Maharashtra state
- ss-2022.csv — Swacch Sarvekshan 2022 data
- Census_2011/ — Shapefile dataset with Indian Census 2011 district-level boundaries (contains .shp, .dbf, .shx, .prj and related files)
All of this data is available openly on the internet, most from Indian Government’s own data repository - data.gov.in.
Then it does some smart math. It creates scores.
The Scores That Matter
Food Safety Score: Each meal center gets a score from 0 to 10. How safe is it to eat there? The score looks at the city’s cleanliness, how many people have sanitation, and disease rates. Now you can pick the safest center near you.
Vulnerability Index: Some districts have more hungry people. More malnourished kids. More disease. Trawler calculates a score for each district. Higher score = more people in need.
Coverage Gap Score: This is the important one. It combines two things: “How many hungry people are in this district?” and “How many meal centers are there?”. If a district has lots of hungry people but few centers, it gets a high score. That means it needs more centers.
Priority Tier: Districts get labeled as Critical, High, Moderate, or Low. Critical means “open more centers here NOW.”
The AI Chatbot
Now here’s the cool part. You can just talk to all of this data, that too in your language.
You can say: “Find me a meal center near Bibwewadi.” Trawler figures out where Bibwewadi is. Finds the five safest centers nearby. Done.
You can say: “What’s the health situation in Nashik?” Trawler tells you. Malnutrition rates. Disease rates. Everything.
The chatbot speaks English, Hindi, and Marathi. It knows decent bits about the scheme too. Cost. Operating hours. Who can eat there. Neat stuff.
Why This Matters
Before Trawler, this information was invisible. A social worker couldn’t tell a hungry person which center was safest. An NGO couldn’t figure out which district needed help the most. A journalist couldn’t see where the scheme was failing. All of this was mostly intuition based, nothing to quantify this “gut feeling”.
Now they can. All in one place. All in simple, natural language.
Who Uses It?
A migrant worker: Finds the nearest safe meal center in their language. No forms. No apps to download. Just a chat.
A social worker: Checks the health data for a district before visiting. Understands the malnutrition problem. Gives better advice.
An NGO: Looks at the dashboard. Sees which districts are marked “Critical.” Proposes new centers there. Has data to back it up.
A journalist: Filters the data. Finds districts with zero centers. Writes a story. Holds the government accountable.
A government official: Sorts districts by coverage gap. Opens new centers where they’ll help the most people.
The Math Behind Trawler
Now here’s where it gets interesting. Trawler doesn’t just throw data around randomly. It uses specific formulas to calculate everything. Let me break it down in simple terms.
Step 1: Data Normalisation
First, Trawler takes all the messy data from different sources and puts it on the same scale between 0 and 1. Think of it like converting everything to a common language so you can compare apples to apples.
Swachh Survekshan normalisation:
The Swachh Survekshan (cleanliness survey) score is out of 7500. Trawler converts it to 0-1:
Normalised Score = Swachh Survekshan Score / 7500
Where the result is between 0 and 1. A score of 3750 becomes 0.5, and a score of 7500 becomes 1.0.
NFHS-5 percentage to proportion:
NFHS data comes as percentages. Trawler converts them to 0-1:
Proportion = NFHS Percentage / 100
So if 40% of people have diarrhea, that becomes 0.40.
Step 2: Food Safety Score (0-10)
This is how Trawler rates each meal center for safety. It combines three factors:
Inputs per eatery:
| Factor | Source | What it measures |
|---|---|---|
| Cleanliness Score | Swachh Survekshan 2022 | How clean is the city? (0-1) |
| Sanitation Access | NFHS-5 | What % of households have proper toilets? (0-1) |
| Diarrhea Rate | NFHS-5 | What % of children have diarrhea? (0-1) |
The weights:
- Cleanliness: 50% weight
- Sanitation: 30% weight
- Diarrhea: 20% weight
The formula:
Raw Score = (0.5 × Cleanliness) + (0.3 × Sanitation) + (0.2 × (1 - Diarrhea Rate))
Notice the diarrhea is inverted (1 - Diarrhea Rate) because we want LOWER diarrhea to mean a safer environment.
Convert to 0-10 scale:
Food Safety Score = Raw Score × 10
Example: A center in a clean city (cleanliness 0.8), with good sanitation (0.7), and low diarrhea (0.1):
Raw Score = (0.5 × 0.8) + (0.3 × 0.7) + (0.2 × (1 - 0.1))
Raw Score = 0.4 + 0.21 + 0.18 = 0.79
Food Safety Score = 0.79 × 10 = 7.9 out of 10
Default fallbacks when a district has no data:
- Cleanliness: 0.5
- Sanitation: 0.5
- Diarrhea Rate: 0.1
This ensures Trawler never breaks, even with incomplete data (tends to be the case with a lot of locally sourced data).
Step 3: Vulnerability Index (0-10)
This measures how much a district needs help. It looks at four health indicators from NFHS-5:
The four indicators:
- Lack of sanitation access (% without proper toilets)
- Diarrhea prevalence (% of children with diarrhea)
- Child stunting (% of children who are malnourished)
- Women’s anemia (% of women with anemia)
The formula:
All four indicators are converted to 0-1 scale. Then we average them:
Vulnerability Index = (Indicator 1 + Indicator 2 + Indicator 3 + Indicator 4) / 4
Then multiply by 10 to get a 0-10 score.
Example: A district with:
-
40% without sanitation
-
15% diarrhea rate
-
35% child stunting
-
50% women’s anemia
Average = (40 + 15 + 35 + 50) / 4 = 35 out of 100 Vulnerability Index = 3.5 out of 10
This is a moderately vulnerable district. Higher scores mean more people in need.
Step 4: Coverage Gap Score (0-10)
This is the big one. It tells you which districts need new meal centers the most. It combines two things:
- Vulnerability - How many hungry, sick people are there?
- Coverage deficit - How many centers per person?
Inputs per district:
| What | Source |
|---|---|
| Vulnerability Index | Calculated above (0-10) |
| Number of Centers | Count of Shivbhojan centers in the district |
| Population | Census 2011 data |
Step A: Calculate centers per lakh population
Centers per Lakh = (Number of Centers / Population) × 100,000
For example, if a district has 50 centers and 5 million people:
Centers per Lakh = (50 / 5,000,000) × 100,000 = 1 center per lakh
Step B: Calculate coverage deficit
The ideal is 10 centers per lakh. We measure how far we are from that:
Coverage Deficit = 1 - (Centers per Lakh / 10)
But if Centers per Lakh is already 10 or more, the deficit is 0 (good coverage).
Examples:
- 0 centers per lakh → deficit = 1.0 (no coverage)
- 5 centers per lakh → deficit = 0.5 (half coverage)
- 10 centers per lakh → deficit = 0.0 (full coverage)
Step C: Combine vulnerability and coverage
The weights are:
-
Vulnerability: 60%
-
Coverage Deficit: 40%
Coverage Gap Score = (0.6 × Vulnerability / 10) + (0.4 × Coverage Deficit)
Then multiply by 10 to get a 0-10 score.
Example 1 - Critical District:
- Vulnerability: 7.5 out of 10 (lots of hungry, malnourished people)
- Centers: 2 per lakh (should be 10+)
- Coverage Deficit: 1 - (2/10) = 0.8
Calculation:
Coverage Gap = (0.6 × 7.5/10) + (0.4 × 0.8)
Coverage Gap = 0.45 + 0.32 = 0.77
Coverage Gap Score = 0.77 × 10 = 7.7 → **Critical priority**
Example 2 - Low Priority District:
- Vulnerability: 2.0 out of 10 (fewer health issues)
- Centers: 8 per lakh (pretty good coverage)
- Coverage Deficit: 1 - (8/10) = 0.2
Calculation:
Coverage Gap = (0.6 × 2.0/10) + (0.4 × 0.2)
Coverage Gap = 0.12 + 0.08 = 0.2
Coverage Gap Score = 0.2 × 10 = 2.0 → **Low priority**
Step 5: Priority Tier
Once Trawler calculates the Coverage Gap Score, it puts districts into buckets:
- Critical: Score ≥ 7.0 (open centers here immediately)
- High: Score 5.0 to 6.9 (plan to open centers soon)
- Moderate: Score 3.0 to 4.9 (consider for future expansion)
- Low: Score < 3.0 (good coverage, can wait)
- Unknown: No data available
Step 6: Nearest Eatery Search
When you ask Trawler “Find me a center near me,” here’s what it does:
- It takes your location (latitude and longitude)
- It calculates the real geographic distance to every meal center (using geodesic distance, not straight lines)
- It finds all centers within 5 km of you
- It sorts them by Food Safety Score (highest first)
- It gives you the top 5
So you get the 5 safest centers within walking/biking distance.
Step 7: Summary of All Weights & Thresholds
Here’s a quick reference table of all the numbers Trawler uses:
| Parameter | Value | Used In |
|---|---|---|
| Cleanliness weight | 50% | Food Safety Score |
| Sanitation weight | 30% | Food Safety Score |
| Diarrhea weight | 20% | Food Safety Score |
| Vulnerability weight | 60% | Coverage Gap Score |
| Coverage weight | 40% | Coverage Gap Score |
| Ideal centers per lakh | 10 | Coverage deficit calculation |
| Default cleanliness | 0.5 | When data is missing |
| Default sanitation | 0.5 | When data is missing |
| Default diarrhea rate | 0.1 | When data is missing |
| Search radius | 5.0 km | Nearest center search |
| Critical threshold | ≥ 7.0 | Priority tier |
| High threshold | ≥ 5.0 | Priority tier |
| Moderate threshold | ≥ 3.0 | Priority tier |
Why These Weights?
You might wonder: why 50% for cleanliness, 30% for sanitation, 20% for diarrhea? Why 60% vulnerability and 40% coverage?
These weights reflect what matters most:
- Cleanliness is 50% because it’s the most visible and controllable factor in food safety. If the city is clean, the food environment is likely safer.
- Sanitation is 30% because it’s a major health factor but not directly about the food itself. Good toilets prevent disease spread.
- Diarrhea is 20% because it’s an outcome indicator - if diarrhea is low, the environment is probably safe.
- Vulnerability is 60% because the scheme’s main goal is to help the most vulnerable people. A district with lots of hungry, malnourished kids should get priority.
- Coverage is 40% because even vulnerable areas don’t need new centers if they already have enough. It’s about filling gaps, not just helping the most vulnerable.
These weights can be adjusted based on policy priorities. If the government decides cleanliness matters less, the weight can be lowered.
What Happens When Data is Missing?
Real-world data is messy. Sometimes a district doesn’t have NFHS data. Sometimes a city wasn’t surveyed by Swachh Survekshan.
Trawler has fallbacks:
- For Food Safety Score: If data is missing, it assumes middle-of-the-road values (0.5 for cleanliness, 0.5 for sanitation, 0.1 for diarrhea rate).
- For Coverage Gap Score: If population data is missing, it uses a simple rule: if there are 0 centers, coverage deficit is 1.0. If there are any centers, it’s 0.5.
This way, Trawler never breaks. It always gives you an answer, even if the data isn’t perfect.
What’s Next?
Trawler is good. But it can get better.
Better population data: Right now, some population numbers are missing. Fix that, and the coverage scores get more accurate.
Keep the AI updated: As the scheme changes, the chatbot needs to know. A simple system to feed it new information would help.
More detailed data: Right now it’s district-level. What if it was neighborhood-level? Even better.
Real-time updates: If a center closes, Trawler should know instantly. Not days later.
Smaller areas: Break it down to talukas, not just districts. More precise planning.
The Bottom Line
Trawler takes government data that was sitting in files. It turns it into something useful. Something human. Something that helps hungry people find food. Helps social workers do their job better. Helps officials make smarter decisions.
You can check out the source code here: https://github.com/AdityaBhattacharya1/trawler
References
[1] Times of India - “What is Shiv Bhojan scheme: Here is all you need to know…” (Jan 27, 2020)
[2] NDTV - “Maharashtra Launches Rs 10 Lunch Plate Scheme On Republic Day” (Jan 27, 2020)
[3] Indian Express - “Maharashtra: Uddhav Thackeray’s Rs 10 meal scheme to be rolled out on January 26” (Jan 5, 2020)
[4] Economic Times - “Rs 10 Shiv Bhojan meal actually costs Rs 50 in cities” (Feb 28, 2020)