A modern financial management application with Nordic-inspired design, built with Next.js 14, TypeScript, and Prisma. Features a cosmic aurora theme, real-time financial tracking, and comprehensive financial tools.
- 🔐 Secure JWT authentication
- 💳 Transaction management (deposits, withdrawals, transfers)
- 📊 Interactive financial analytics with Recharts
- 🧮 Comprehensive financial calculators
- 🌌 Nordic-inspired cosmic design system
- 💰 Savings calculator
- 🏦 Loan calculator
- 📈 Investment planner
- 💵 Tax calculator
- 🏠 Mortgage calculator
- 🎯 Retirement planner
- 🌠 Aurora borealis animations
- ⭐ Twinkling star effects
- 🎨 Nordic color palette
- 🌊 Glass-morphism UI elements
- 📱 Fully responsive design
:root {
--aurora-green: #7CFCD0;
--nordic-blue: #1E3D59;
--frost-blue: #E2E8F0;
--northern-pink: #FF61A6;
--snow-white: #F7F9FC;
}
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Database: Neon PostgreSQL
- ORM: Prisma
- Styling: Tailwind CSS
- Authentication: JWT + bcrypt
- Charts: Recharts
- Animations: CSS + React
- Icons: FontAwesome
- Deployment: Vercel
- Clone the repository:
git clone https://github.com/yourusername/fintech-bank.git
cd fintech-bank
- Install dependencies:
npm install
- Set up environment variables:
# Database (Neon)
DATABASE_URL="postgresql://user:password@endpoint/database"
DIRECT_URL="postgresql://user:password@endpoint/database"
# Authentication
JWT_SECRET="your-secret-key"
JWT_EXPIRES_IN="7d"
- Initialize database:
npx prisma generate
npx prisma db push
npx prisma db seed
- Run development server:
npm run dev
- Connect your repository to Vercel
- Add your environment variables in Vercel dashboard:
DATABASE_URL="your-neon-db-url" DIRECT_URL="your-neon-direct-url" JWT_SECRET="your-secret" JWT_EXPIRES_IN="7d"
- Add build command override (optional, if needed):
prisma generate && next build
- Deploy!
Note: Prisma Client needs to be generated during build time on Vercel. The build command in package.json already includes
prisma generate
to handle this automatically.
model User {
id Int @id @default(autoincrement())
email String @unique
username String
passwordHash String
firstName String?
lastName String?
accounts Account[]
transactions Transaction[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Account {
id Int @id @default(autoincrement())
accountType AccountType
accountName String
balance Float @default(0)
userId Int
user User @relation(fields: [userId], references: [id])
transactions Transaction[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Transaction {
id Int @id @default(autoincrement())
type TransactionType
amount Float
description String
accountId Int
account Account @relation(fields: [accountId], references: [id])
userId Int
user User @relation(fields: [userId], references: [id])
categoryId Int
category Category @relation(fields: [categoryId], references: [id])
createdAt DateTime @default(now())
}
model Category {
id Int @id @default(autoincrement())
name String
type TransactionType
icon String
transactions Transaction[]
@@unique([name, type])
}
enum AccountType {
CHECKING
SAVINGS
INVESTMENT
}
enum TransactionType {
DEPOSIT
WITHDRAWAL
TRANSFER
}
POST /api/auth/register
- Create new accountPOST /api/auth/login
- User loginGET /api/user
- Get user profile
GET /api/transactions
- List transactionsPOST /api/transactions/deposit
- Make depositPOST /api/transactions/withdraw
- Make withdrawalPOST /api/transactions/transfer
- Make transferPOST /api/transactions/expense
- Record expense
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature
) - Commit changes (
git commit -m 'Add amazing feature'
) - Push to branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License.