Moneta is a premium, full-stack Mobile Financial Services (MFS) wallet that simulates real-world e-banking and digital cash transfers. Built with a Next.js 16 App Router frontend, a Node.js / Express backend API, and MongoDB Atlas for cloud persistence — it delivers a secure and intuitive digital banking experience in a responsive mobile-app shell.
Live at → https://moneta-topaz.vercel.app
| Technology | Version | Role |
|---|---|---|
| Next.js | 16.2.10 |
React framework (App Router) |
| React | 19.2.4 |
Core UI library |
| Tailwind CSS | ^4 |
Utility-first CSS |
| DaisyUI | ^5.6.10 |
Component library with light/dark themes |
| Better Auth | ^1.6.23 |
Authentication client |
| React Toastify | ^11.1.0 |
Toast notifications |
| Fontshare | — | Premium typography (Satoshi + Clash Display) |
| Technology | Version | Role |
|---|---|---|
| Node.js | ≥18 |
Runtime |
| Express.js | ^4.21.2 |
HTTP server & routing |
| MongoDB Atlas | — | Cloud-hosted database |
| Mongoose | ^8.9.5 |
MongoDB ODM |
| Better Auth | ^1.6.23 |
Authentication engine |
| dotenv | ^16.4.5 |
Environment variable loader |
| cors | ^2.8.5 |
Cross-origin request handling |
- Credentials Login — session-based auth via Better Auth with hashed phone + password
- Secure Registration — Name, Phone, Password, and 4-digit security PIN sign-up flow
- Mandatory PIN Checks — every financial action (deposit, transfer, cashout, bills) requires PIN verification
- Show/Hide PIN Toggle — visual masking control for field reassurance
- Live Balance Card — real-time account balance fetched from MongoDB
- Add Money — simulated card (Visa/Mastercard) and bank deposit integrations
- Cash Out — withdraw funds with a standard 1.85% agent fee calculation
- Send Money — atomic peer-to-peer transfers using phone number identifiers
- Pay Bill — settle utility bills (Electricity, Water, Gas, Internet) with biller and subscriber validation
- Transaction Ledger — full history with category filters (Add, Cashout, Transfer, Bill, Bonus) and name/reference search
- Claim Bonus — redeem promo codes (
WELCOME50→ +$50) verified against database, one-time use enforced
- Mobile App Shell — styled viewport wrapper mimicking a modern smartphone frame with elevation shadows
- DaisyUI v5 Themes — built-in light/dark mode switcher
- Responsive Sliding Action Sheets — bottom-slide modal panels for all financial actions
moneta/
├── README.md # This file
├── .gitignore # Root Git config
├── moneta-client/ # Next.js App Router frontend
│ ├── src/
│ │ ├── app/ # Routes, layouts, pages
│ │ └── components/ # UI components
│ ├── public/
│ ├── package.json
│ └── next.config.mjs
└── moneta-server/ # Express.js REST API
├── routes/wallet.js # All wallet API endpoints
├── models/ # Mongoose schemas
├── middleware/ # Auth middleware
├── auth.js # Better Auth config
├── db.js # MongoDB connection
├── server.js # Entry point
├── seed.js # Database seeder
└── package.json
- Node.js v18 or higher
- npm v9 or higher
- A MongoDB Atlas account (free tier works)
git clone https://github.com/iMoloy/moneta.git
cd monetacd moneta-server
npm installCreate your environment file:
cp .env.example .envOpen .env and fill in the required values:
# MongoDB Atlas connection string
MONGODB_URI=mongodb+srv://<user>:<password>@cluster.mongodb.net/moneta
# Better Auth — generate with: openssl rand -hex 32
BETTER_AUTH_SECRET=your_secret_key_here
# URL of the running frontend (for CORS)
CLIENT_URL=http://localhost:3000Start the backend:
npm run devServer runs on http://localhost:5000
(Optional) Seed the database with demo billers and deposit sources:
npm run seedcd ../moneta-client
npm installCreate your environment file:
cp .env.example .env.localOpen .env.local and set the backend URL:
NEXT_PUBLIC_API_URL=http://localhost:5000
BETTER_AUTH_SECRET=your_secret_key_here # must match server
NEXT_PUBLIC_APP_URL=http://localhost:3000Start the frontend:
npm run devApp runs on http://localhost:3000
| Command | Description |
|---|---|
npm run dev |
Start development server with HMR |
npm run build |
Build production bundle |
npm run start |
Serve production build |
npm run lint |
Run ESLint |
| Command | Description |
|---|---|
npm run dev |
Start server with --watch (auto-restart) |
npm run start |
Start production server |
npm run seed |
Seed MongoDB with demo data |
- 🌐 Live App → https://moneta-topaz.vercel.app
- 🐙 GitHub → github.com/iMoloy/moneta
- 💼 Author → linkedin.com/in/iMoloy