A modern, full-stack wallet application featuring a React Native mobile frontend and a Node.js/Express backend with Neon (serverless Postgres). The app enables users to securely manage their finances, track transactions, and view real-time summaries—all with a beautiful, responsive UI.
- User authentication (sign up, sign in) via Clerk
- View current balance, income, and expenses
- Add, view, and delete transactions
- Categorize transactions (Food, Shopping, Bills, etc.)
- Themed, modern UI with multiple color schemes
- Responsive and smooth experience on iOS, Android, and web (Expo)
- RESTful API for transaction management (CRUD)
- Transaction summary endpoints (balance, income, expenses)
- PostgreSQL (Neon serverless) integration
- Environment-based configuration
- Health check endpoint
- Frontend: React Native (Expo), Clerk for authentication, Expo Router for navigation
- Backend: Node.js, Express, Neon (serverless Postgres)
- API: RESTful, JSON-based
React-Native-Wallet/
backend/ # Node.js/Express backend
config/ # DB and cron config
controllers/ # Business logic
routes/ # API routes
server.js # Entry point
...
mobile/ # React Native frontend
app/ # App screens and routing
assets/ # Images, fonts, styles
components/ # Reusable UI components
constants/ # API URLs, color themes
hooks/ # Custom React hooks
...
- Node.js (v19+ recommended for backend)
- npm or yarn
- Expo CLI (
npm install -g expo-cli) - Neon/PostgreSQL account for backend database
- Navigate to the backend folder:
cd backend - Install dependencies:
npm install
- Create a
.envfile inbackend/:DATABASE_URL=<your_neon_postgres_connection_string> PORT=5001 # or any port you prefer
- Start the backend server:
- For development (auto-reload):
npm run dev
- For production:
npm start
http://localhost:5001by default. - For development (auto-reload):
- Navigate to the mobile folder:
cd mobile - Install dependencies:
npm install
- Start the Expo development server:
npx expo start
- Open the app in Expo Go, an emulator, or a simulator.
DATABASE_URL: Neon/Postgres connection stringPORT: Port for the server (default: 5001)
- API URL is set in
mobile/constants/api.js:Update this if you run the backend locally or deploy elsewhere.export const API_URL = "PUT THE API_URL HERE";
All endpoints are prefixed with /api/transactions.
- GET
/api/transactions/:userId - Returns all transactions for the specified user, ordered by date (newest first).
- POST
/api/transactions/ - Body:
{ "title": "string", "amount": number, "category": "string", "user_id": "string" } - Returns the created transaction.
- DELETE
/api/transactions/:id - Deletes the transaction with the specified ID.
- GET
/api/transactions/summary/:userId - Returns an object with
balance,income, andexpensesfor the user.
- GET
/api/health - Returns
{ status: "ok" }if the server is running.
- The mobile app uses Clerk for secure authentication.
- Users can sign up and sign in with email and password.
- Auth state is managed globally and required for all transaction actions.
- Multiple color themes available (see
mobile/constants/colors.js): Coffee, Forest, Purple, Ocean, Finance. - Clean, modern design with custom fonts and icons.
- Responsive layouts for all device sizes.
- Frontend:
- React Native (Expo)
- Clerk (authentication)
- Expo Router
- Custom hooks and components
- Backend:
- Node.js, Express
- Neon (serverless Postgres)
- dotenv, cors, nodemon
Contributions are welcome! Please open an issue to discuss your ideas or submit a pull request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/YourFeature) - Commit your changes (
git commit -am 'Add new feature') - Push to the branch (
git push origin feature/YourFeature) - Open a pull request
For questions, suggestions, or support, please open an issue or contact the maintainer at [[email protected]].