DemoVideo.mp4
Welcome to the Paytm! This is a financial technology application that allows users to send, receive, and manage their balances seamlessly. Built with a focus on security and scalability.
Venamo is a payment app that enables peer-to-peer (P2P) transactions, allowing users to transfer money easily and securely. Users can check their balances and view transaction histories. The app is built with Next.js for both the frontend and backend, and Prisma with PostgreSQL for the database. It utilizes Turborepo for efficient monorepo management, with Express.js handling webhooks.
- π Secure Authentication: Supports login with email and phone number as well as OAuth providers like Google.
- πΈ Real-time P2P Transfers: Send and receive money between users.
- π Balance Management: Displays both available and locked balances.
- π Transaction History: Detailed transaction records, including timestamps and providers.
- Monorepo Management: Turborepo
- Frontend: Next.js
- Backend: Next.js,Node.js, Express
- Database: PostgreSQL
- ORM: Prisma
- Styling: Tailwind CSS
- State Management: Recoil
Your installation instructions look clear and well-structured! However, there are a few minor improvements and clarifications that can enhance clarity and correctness. Hereβs a refined version:
- Build the Docker image:
docker build -t image_name . - Run the Docker container:
docker run -p 3000:3000 image_name
-
Clone the repository:
git clone https://github.com/miravanisri/Venamo_PaymentApp.git cd Venamo_PaymentApp -
Install dependencies:
npm install
-
Configure environment variables: Create a
.envfile in the project root and add the following variable:DATABASE_URL=your_database_url -
Set up the database:
npx prisma migrate dev --name init
-
Generate the Prisma client:
npx prisma generate
-
Seed the database with initial data:
npx prisma db seed
-
Run the application:
npm run dev
- Database URL: Make sure to replace
your_database_urlwith the actual database connection string. - Container Port: Ensure that the application inside the Docker container is listening on port
3000, as you are mapping it to the host.
project-name/
βββ apps
β βββ user-app # Frontend built with Next.js
βββ packages
β βββ db # Prisma and PostgreSQL database setup
β βββ store # Recoil state management
βββ components # Reusable UI components
βββ ... # Other files and directories
model User {
id Int @id @default(autoincrement())
email String? @unique
name String?
number String @unique
password String
OnRampTransaction OnRampTransaction[]
Balance Balance[]
sentTransfers p2pTransfer[] @relation(name: "FromUserRelation")
receivedTransfers p2pTransfer[] @relation(name: "ToUserRelation")
}
model Merchant {
id Int @id @default(autoincrement())
email String @unique
name String?
auth_type AuthType
}
model OnRampTransaction {
id Int @id @default(autoincrement())
status OnRampStatus
token String @unique
provider String
amount Int
startTime DateTime
userId Int
user User @relation(fields: [userId], references: [id])
}
model p2pTransfer {
id Int @id @default(autoincrement())
amount Int
timestamp DateTime
fromUserId Int
fromUser User @relation(name: "FromUserRelation", fields: [fromUserId], references: [id])
toUserId Int
toUser User @relation(name: "ToUserRelation", fields: [toUserId], references: [id])
}
model Balance {
id Int @id @default(autoincrement())
userId Int @unique
amount Int
locked Int
user User @relation(fields: [userId], references: [id])
}
enum AuthType {
Google
Github
}
enum OnRampStatus {
Success
Failure
Processing
}
- OAuth & Credentials Provider: Login via email/phone or Google using secure
bcrypthashing for password storage.
- Real-time Transfers: Allows users to send money to other users by providing their phone number.
- Transaction Logs: Keeps track of all the userβs transactions.
- Available and Locked Balances: Displays the current balance with details about locked funds.
- Frontend: Deploy the Next.js frontend on Vercel.
- Backend: Host the backend on Heroku or DigitalOcean.
- Database: Use NeonDB or Aiven for PostgreSQL hosting.
This project is licensed under the MIT License. See the LICENSE file for details.