AgroGuide
MERN platform with a Flask-served ML engine for farmers
The problem
Farmers often decide on crops and treatments without timely, data-based advice. The useful data is out there in models and public sources, but not in one place that's easy to use.
My approach
AgroGuide puts a MERN web app in front of a Flask ML service. The Express API handles users, auth, payments and data, and passes prediction requests to Python, so each part is written in the language that suits it.
How it's built
- Client1
React
SPA with protected routes, forms and result views
- API2
Node.js · Express
REST endpoints, JWT auth, validation, payment flow
- Data3
MongoDB
Users, records and prediction history
- ML Service4
Flask · TensorFlow · Scikit-learn
Model inference exposed as a REST API
- External5
Third-party APIs
Real-world data feeding recommendations
Authentication
Register/login with hashed passwords and JWT-protected endpoints.
ML predictions
Inputs are validated in Node, sent to Flask, and results saved per user.
Payment flow
Premium features sit behind a payment step built into the API.
External data
External APIs are called from the server so keys never reach the browser.
Challenges & decisions
Bridging Node and Python
Kept a small JSON contract between Express and Flask so I could change either side without breaking the other.
Keeping the UI responsive
Inference calls can be slow, so the UI shows loading and error states instead of freezing.
Tech stack
- React
- Node.js
- Express.js
- MongoDB
- Flask
- Python
- TensorFlow
- Scikit-learn
- JWT
What I learned
- →Designing APIs between two services, not just client and server
- →Packaging ML models so they can sit behind a stable API
- →Owning everything: schema, API, UI and model integration