- Introduction
- Problem Statement
- Solution Overview
- Tech Stack
- Architecture / Diagram (if any)
- Installation & Usage
- Team Members
This project is a unified agri-support platform tailored for smallholder farmers, especially those with limited digital access. It enables farmers to receive crop-related insights, weather-based farming tips, irrigation and pesticide schedules, and direct access to a crop marketplace—either via a mobile app or an automated phone call service.
By making farming data and expert advice accessible to all, we aim to bridge the digital divide in agriculture and increase profitability for underserved rural communities.
Smallholder farmers in rural areas face multiple challenges:
-
Lack of personalized crop advice and scientific farming knowledge.
-
Dependence on middlemen, leading to reduced profits.
-
No digital access or technical literacy, excluding them from agri-tech advancements.
-
Ineligibility for credit, due to lack of formal transaction records or farm documentation.
These issues result in poor yields, financial instability, and minimal growth, keeping farmers locked in a cycle of low income and inefficiency.
Our platform provides a dual-access solution for farmers—via an Android app and a phone-based voice interface. Key features include:
-
📲 Farmer Registration: Captures key details like location, crops, and land size to tailor recommendations.
-
🌱 Crop & Process Recommendations: Uses ML to suggest best-fit crops and ideal sowing practices.
-
💧 Irrigation and Pesticide Scheduling: Offers dynamic alerts based on crop type, weather, and location.
-
🛒 Inbuilt Marketplace: Enables direct crop sales, bypassing middlemen.
-
☎ Phone Service for Non-Smartphone Users: Ensures inclusivity for digitally disconnected farmers.
-
📈 Data Generation for Credit Access: Transaction and farming data helps farmers build a credit profile for future financial inclusion.
Below is a screenshot of the dashboard interface design (implementation may differ):
This solution brings accessibility, empowerment, and profitability directly into the hands of farmers.
- Node.js >= 20
- Python >= 3.12
- Ngrok
Firstly, set up the following enviorment variables and store it in a .env
in backend folder (one will have to set up a twilio
account first)
MONGO_URI
JWT_SECRET_KEY
GEMINI_API_KEY
TWILIO_ACCOUNT_SID
TWILIO_AUTH_TOKEN
TWILIO_PHONE
ACCUWEATHER_API_KEY
# Clone the repository
git clone https://github.com/FantomCode25/GG_Coders.git
# Navigate into the project directory
cd GG_Coders
# Navigate to frontend
cd frontend
# Install npm packages
npm install
# Run the website
npm run dev
# Navigate to backend
cd backend
# Install packages
npm install
# Start server
node server.js
Here one must ensure of that the datasets
datasets/crop-predictor-with-fertilising-days.csv
datasets/vegetable-prices.csv
The columns respectively are:
datesk,Item Name,Date,price
(dataesk
is just Date but a number)Temparature,Humidity,Moisture,Soil Type,Crop Type,Nitrogen,Potassium,Phosphorous,Fertilizer Name,fertilise_once_in_days
# Navigate to ml-model
cd ml-model
# Install Python packages
python -m env .venv
source .venv/bin/activate # on linux
.venv\Scripts\activat # on windows
pip install -r requirements.txt
# Run the ML model
uvicorn main:app --reload --host 0.0.0.0 --port 8000
To share your API over the internet we will make use of ngrok, run the following on a separate terminal. Use the link given by the below commands for your API calls.
# This just makes your local domain a public domain
ngork http 8000
Additionally we provide metrics when the model is first trained in the models/metrics
folder. These images will be of great help for those who want to know more about the acuracy and other metrics of their ml model.
With the link obtained from ngrok
use one can use the following POST
request
- /predict-price
- /predict-crop-fertilizer
- /recommend-fertilizer
Each of them has the following attributes
predict-price
{
"item_name": "string",
"date": "string"
}
predict-crop-fertilizer
{
"Temparature": 0,
"Humidity": 0,
"Moisture": 0,
"Soil_Type": "string",
"Nitrogen": 0,
"Potassium": 0,
"Phosphorous": 0
}
recommend-fertilizer
{
"Temparature": 0,
"Humidity": 0,
"Moisture": 0,
"Soil_Type": "string",
"Nitrogen": 0,
"Potassium": 0,
"Phosphorous": 0,
"crop_name": "string"
}
One can learn more about this from the /docs
page.