WalletPay is a full-stack digital wallet and realtime communication platform built with FastAPI, PostgreSQL, React, and WebSockets.
The application delivers secure user authentication, wallet transactions, and realtime messaging with reliable delivery and presence tracking.
It is fully deployed on Vercel, Render, and Neon, showcasing practical experience in designing, building, and deploying a modern production-ready system.
| Component | URL |
|---|---|
| Frontend Application | https://payment-wallet-chat-frontend.vercel.app |
| Backend REST API | https://payment-wallet-chat-backend.onrender.com |
| API Documentation (Swagger UI) | https://payment-wallet-chat-backend.onrender.com/docs |
- Email-based registration and login
- Secure JWT access and refresh tokens
- PIN-based protected actions
- Password and PIN verification endpoints
- Fully protected routes via dependency injection
- Add funds to wallet
- Transfer money between users
- Paginated transaction history
- Status and transaction-type tracking with Graphical analysis
- Strict server-side validation
- Authenticated WebSocket channel
- Two-way messaging between users
- Presence tracking (online/offline)
- Delivery and read receipts
- Pending message delivery after reconnection
- Chat history retrieval
- Automatic WebSocket reconnection
- Optimistic UI updates
- Server-validated persistence
- Asynchronous database operations
- React (Vite)
- React Query
- Zustand
- Axios
- Native WebSockets
- FastAPI
- SQLAlchemy (Async ORM)
- Pydantic schemas
- JWT authentication
- WebSocket router
- Vercel (Frontend hosting)
- Render (Backend hosting)
- Neon (Managed PostgreSQL)
| Method | Endpoint | Description |
|---|---|---|
| POST | /auth/signup | Register a new user |
| POST | /auth/login | Authenticate and obtain tokens |
| POST | /auth/refresh | Refresh the access token |
| Method | Endpoint | Description |
|---|---|---|
| GET | /wallet/me | Retrieve wallet details |
| POST | /wallet/add-money | Add funds |
| POST | /wallet/transfer | Transfer money to another user |
| GET | /wallet/history | Paginated transaction history |
| Method | Endpoint | Description |
|---|---|---|
| GET | /profile/ | Retrieve profile |
| PUT | /profile/ | Update profile |
| POST | /profile/verify-pin | Verify transaction PIN |
| POST | /profile/verify-password | Verify password |
| Method | Endpoint | Description |
|---|---|---|
| GET | /chat/users | List all users available for chat |
| GET | /chat/history/{identifier} | Retrieve two-way chat history |
| GET | /chat/all-messages | Fetch all messages |
| PUT | /chat/messages/{id}/read | Mark message as read |
wss://payment-wallet-chat-backend.onrender.com/api/v1/chat/ws/{user_email}?token=&user_id=
- Realtime message send/receive
- Delivery confirmations
- Read receipts
- Presence tracking
- Automatic delivery of pending messages
cd frontend npm install npm run dev
cd backend pip install -r requirements.txt uvicorn app.main:app --reload
- Import the GitHub repository
- Configure environment variables
- Build command: npm run build
- Output directory: dist
-
Deploy as a Web Service
-
Add environment variables
-
Start command: gunicorn app.main:app -k uvicorn.workers.UvicornWorker -w 4
-
Connect Neon PostgreSQL database
- backend/
- app/
- api/ — Route handlers (auth, wallet, chat, profile)
- core/ — Settings, security, config, dependencies
- crud/ — Database access layer (CRUD operations)
- db/ — Database session, initialization, migrations
- models/ — SQLAlchemy ORM models
- schemas/ — Pydantic request/response schemas
- services/ — Business logic (wallet, messaging, auth)
- Dockerfile — Backend container configuration
- app/
- frontend/
- src/
- api/ — Axios clients, API layer
- components/ — Reusable UI components
- pages/ — Route-level pages (Login, Wallet, Chat)
- context/ — Global state (auth, user, theme)
- vite.config.js — Frontend build configuration
- src/
This project is licensed under the MIT License.














