SmartRemit is a full-stack fintech application that helps users make a better decision about when to send an international money transfer.
Instead of simply displaying an exchange rate, SmartRemit combines historical FX data, forecasting, rolling backtesting, model selection, and recommendation logic to answer a practical question:
Should I send the money now, or is waiting likely to give me a better outcome?
| Resource | Link |
|---|---|
| π Live Frontend | Open SmartRemit |
| βοΈ Production API | smartremit-api.onrender.com |
| π€ ML Service | smartremit-ml.onrender.com |
| π» GitHub Repository | Saptami191/Smart-Remittance-App |
Deployment note: the application is actively being stabilized for production. The API, ML service, authentication, and cloud deployment are being tested independently before the final public demo is considered production-ready.
International remittance users face a simple but important decision:
Send money now or wait for a potentially better exchange rate?
Most remittance interfaces provide the current rate but do not help users reason about short-term FX movement or quantify what waiting could mean for the amount they want to send.
SmartRemit turns that uncertainty into a data-driven decision-support workflow.
Remittance Amount
β
Current FX Rate
β
Historical FX Intelligence
β
Multiple Forecasting Candidates
β
Rolling Backtesting
β
Best Validated Model
β
Expected Gain / Loss
β
Send Now / Wait Recommendation
- π Tracks and analyses historical exchange-rate behaviour
- π€ Evaluates multiple forecasting strategies
- π§ͺ Uses rolling backtesting instead of blindly trusting one model
- π― Selects a forecasting candidate based on recent validation performance
- π° Estimates potential gain for a user-defined remittance amount
- π‘ Generates an actionable Send Now / Wait recommendation
- π Provides an exchange-rate intelligence dashboard
- π Uses JWT authentication and bcrypt password hashing
- ποΈ Stores users and remittance history in MongoDB Atlas
- βοΈ Separates the API and ML workloads for cloud deployment
A core engineering principle in SmartRemit is:
A complex model should not win just because it is complex.
The forecasting pipeline compares multiple candidates:
| Candidate | Role |
|---|---|
| Naive | Recent-rate baseline |
| Moving Average (7) | Short-term smoothing |
| Exponential Smoothing | Recency-weighted trend |
| Prophet | Time-series forecasting |
Candidates are evaluated using rolling validation with:
- MAE β Mean Absolute Error
- RMSE β Root Mean Squared Error
- MAPE β Mean Absolute Percentage Error
- Comparison against a naive baseline
The best-performing candidate can be promoted as the production forecasting artifact.
This prevents the system from assuming that Prophet, or any other sophisticated model, will automatically outperform a simple baseline.
A recent training run evaluated four candidates over rolling 30-observation validation windows:
naive 1.121667
moving_average_7 1.047762 β selected
exponential_smoothing 1.081665
prophet 1.299733
The important part is the validation and promotion process, not the absolute score. SmartRemit uses evidence from recent historical data before selecting the production candidate.
βββββββββββββββββββββββββ
β Vercel β
β Frontend / Static β
βββββββββββββ¬ββββββββββββ
β HTTPS
βΌ
βββββββββββββββββββββββββ
β Render β
β Node / Express β
β API Service β
βββββββββ¬ββββββββ¬ββββββββ
β β
ββββββββββββ ββββββββββββ
βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ
β MongoDB Atlas β β Render ML β
β Users / History β β Python / FastAPIβ
βββββββββββββββββββ ββββββββββ¬βββββββββ
β
βΌ
ββββββββββββββββββββββ
β Forecasting + β
β Backtesting + β
β Model Selection β
ββββββββββββββββββββββ
Frontend
- Static HTML/CSS/JavaScript
- Hosted on Vercel
API service
- Node.js + Express
- Authentication
- Protected application APIs
- MongoDB integration
- Hosted on Render
ML service
- Python + FastAPI
- FX forecasting
- Model evaluation and selection
- Hosted separately on Render
This separation keeps model-serving workloads independent from the application API and makes each component easier to deploy and scale.
Authentication uses:
- JWT access tokens
- bcrypt password hashing
- Protected API routes
- MongoDB-backed user accounts
POST /api/signup
POST /api/loginPOST /api/route
GET /api/forecast
POST /api/fraud
GET /api/historyProtected endpoints require a valid JWT in the request authorization header.
Example:
Authorization: Bearer <JWT_TOKEN>Passwords are never intended to be stored as plaintext. Secrets such as MONGO_URI and JWT_SECRET must remain in deployment environment variables.
| Layer | Technology |
|---|---|
| Frontend | HTML, CSS, JavaScript |
| Backend | Node.js, Express |
| Authentication | JWT, bcrypt |
| Database | MongoDB Atlas, Mongoose |
| ML / Forecasting | Python, FastAPI, Prophet, Scikit-learn |
| Evaluation | Rolling backtesting, MAE, RMSE, MAPE |
| Deployment | Vercel + Render |
| CI/CD | GitHub Actions |
| Source Control | Git + GitHub |
Smart-Remittance-App/
β
βββ backend/
β βββ controllers/ # Authentication and application logic
β βββ middleware/ # JWT authentication middleware
β βββ models/ # MongoDB/Mongoose models
β βββ routes/ # API routes
β βββ app.js / server.js # Node backend entry points
β βββ package.json
β
βββ ml_service/
β βββ main.py # ML API entry point
β βββ train_forecast.py # Training + model selection
β βββ ingest_fx_data.py # FX data ingestion
β βββ test_forecast_service.py
β βββ requirements.txt
β
βββ ml_model/ # Promoted model artifacts
βββ index2.html # Authentication UI
βββ dashboard.html # Main application dashboard
βββ style2.css # Authentication styling
βββ vercel.json # Frontend/API deployment configuration
βββ render.yaml # Render Blueprint configuration
βββ requirements.txt # Root-level compatibility requirements
βββ README.md
- Node.js 20+
- Python 3.10+
- MongoDB Atlas account or local MongoDB
- Git
git clone https://github.com/Saptami191/Smart-Remittance-App.git
cd Smart-Remittance-AppCreate backend/.env:
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_long_random_secret
ML_SERVICE_URL=http://localhost:8000Never commit this file.
cd backend
npm install
npm startIn a second terminal:
cd ml_service
pip install -r requirements.txt
uvicorn main:app --reload --port 8000python train_forecast.pyServe the repository with a local static server rather than relying on file:// URLs when testing API calls.
For example, with Python:
python -m http.server 5500Then open:
http://localhost:5500/index2.html
Run the forecasting service tests with:
pytest -q ml_service/test_forecast_service.pyThe project also uses CI validation around the forecasting pipeline so model changes can be evaluated before promotion.
The repository includes a Render Blueprint with separate services for the Node API and Python ML service.
Runtime: Node
Root Directory: backend
Build: npm install
Start: npm start
Runtime: Python
Root Directory: ml_service
Build: pip install -r requirements.txt
Start: uvicorn main:app --host 0.0.0.0 --port $PORT
MONGO_URI
JWT_SECRET
ML_SERVICE_URL
Do not commit:
- MongoDB passwords
- JWT secrets
- API keys
.envfiles- private deployment credentials
A forecasting model can look impressive while performing poorly on unseen data. SmartRemit therefore evaluates candidates using rolling historical validation rather than trusting training accuracy.
If a sophisticated model cannot reliably beat a simple baseline, there is little engineering justification for deploying the sophisticated model.
The API handles authentication, user data, business logic, and request routing. The ML service handles forecasting and model inference. Separating them reduces coupling and makes deployment and scaling more manageable.
The application needs stateless authentication for protected APIs while avoiding plaintext password storage. JWT handles authenticated requests; bcrypt handles password hashing.
- Full-stack application structure
- Node/Express backend
- MongoDB integration
- JWT authentication architecture
- bcrypt password hashing
- FX forecasting pipeline
- Rolling backtesting
- Baseline comparison
- Automatic candidate selection
- Promoted model artifact
- Render Blueprint configuration
- Vercel frontend deployment
- Finish end-to-end production authentication verification
- Complete ML/API production integration testing
- Improve recommendation calibration
- Add stronger API failure recovery
- Add observability and structured logging
- Load-test the application
- Add real-time FX data refresh
- Expand remittance corridor coverage
- Add explainable recommendation summaries
SmartRemit is designed as a proof-of-work fintech/AI system, not an LLM wrapper.
The strongest technical story is the combination of:
Real financial decision problem
β
Historical FX data
β
Multiple forecasting candidates
β
Rolling validation
β
Evidence-based model selection
β
Expected financial impact
β
Actionable recommendation
For an AI/finance evaluation, the project demonstrates that AI/ML is being used where it has a concrete job: forecasting uncertain FX behaviour and supporting a financial decision.
The next major evolution is to add agentic workflows around routing, compliance, explanation, and failure recovery without turning the product into an unnecessary LLM wrapper.
Saptami Biswas
B.Tech Electrical Engineering Β· NIT Agartala
- GitHub: @Saptami191
- Repository: Smart-Remittance-App
This project is released under the MIT License.