A full-stack application for parsing, storing, filtering, and analyzing Mobile Money (MoMo) SMS transactions. Built with a modern JavaScript stack (Express.js + MySQL backend, HTML/CSS/JavaScript frontend) to help users visualize transaction trends and statistics.
- Demo Video - Video demonstration of key features and functionality
- Source Code Archive - Complete project files in .zip format
- Database File - MySQL database with actual data
- Technical Report - PDF report covering our approach, challenges, and key decisions made
-
Transaction CRUD API with filters and pagination
-
Advanced Search via full-text
originalSMSfield -
Transaction Statistics with breakdown by type and totals
-
Health Check Endpoint at
/api/health -
Type and Table-aware Routes
/api/transactions/:transactionIdresolves usingtransactionId(can benull)/api/transactions/:type/:idresolves usingtypetable and numeric ID
-
Dashboard: Overview of volume and trends by type and time
-
Transaction List Page: Paginated and filterable
-
Transaction Detail Page: Deep-dive into a single transaction
-
Filtering:
- By type
- Date range
- Amount range
- Full-text search (
qparam)
-
Responsive Design: Mobile-friendly layout
-
Backend:
- Node.js + Express
- MySQL (via
mysql2) - Fast-XML-Parser for parsing raw messages
-
Frontend:
- Vanilla JavaScript
- Tailwind CSS (via CDN)
- Chart.js (for all graphs)
-
Dev Tools:
- Nodemon, dotenv, ESLint, Prettier
http://localhost:3000
| Endpoint | Method | Description |
|---|---|---|
/api/transactions |
GET | List transactions with filters, pagination, and full-text search |
/api/transactions/stats |
GET | Return statistics like total amount, averages, etc. |
/api/transactions/types |
GET | Return all available transaction types |
/api/transactions/:transactionId |
GET | Get a transaction by its unique transactionId |
/api/transactions/:type/:id |
GET | Get a transaction by table and internal ID |
/api/health |
GET | Health check |
project-root/
├── backend/
│ ├── controllers/
│ ├── routes/
│ ├── services/
│ ├── utils/
│ ├── database.js
│ └── app.js
├── frontend/
│ ├── index.html # Dashboard
│ ├── transactions.html # List view
│ ├── transaction.html # Detail view
│ ├── css/
│ │ └── styles.css
│ ├── js/
│ │ ├── dashboard.js
│ │ ├── transactions.js
│ │ ├── transaction.js
│ │ └── utils.js
├── .env
├── package.json
└── README.md (this file)
These are the supported categories for transaction analysis:
- INCOMING: Money received
- RECLAIMED: Reclaimed transactions
- PAYMENT: Payments to code holders
- BANK_DEPOSIT: Bank deposits
- TRANSFER: Transfers to mobile numbers
- WITHDRAWN: Withdrawals from agents
- AIRTIME_BILL: Airtime bill payments
- UTILITY_BILL: Utility bill payments (Cash Power, etc.)
- THIRD_PARTY: Transactions initiated by third parties
cd backend
npm install
cp .env.example .env
# fill .env with user and password
npm run setup:db
npm startOpen http://localhost:3000 in your browser.
- No export or download features are implemented
- No caching or local storage usage in frontend
- No user auth or sessions yet
- All filters apply only to the transaction list
- Charts are powered by Chart.js
For support or technical help, contact the dev team.
Built for MTN MoMo Analytics | 2025
