A modern, secure portfolio website with integrated financial tracking dashboard using Gmail API for automated transaction extraction from bank emails. Built with React, Node.js, PostgreSQL, and Docker.
- β¨ Modern, premium UI with glassmorphism effects
- π¨ Vibrant gradients and smooth animations
- π± Fully responsive design
- π― Sections: Landing, About, Projects, Contact
- β‘ Built with React and Vite for blazing-fast performance
- π Secure JWT authentication
- π§ Gmail API integration for automated transaction tracking
- π° Real-time transaction monitoring from bank emails
- π Transaction history with filtering and search
- Analytics and spending insights
- Frontend: React 18, Vite, React Router
- Backend: Node.js, Express
- Database: PostgreSQL 16
- Authentication: JWT with bcrypt
- Email API: Gmail API for transaction extraction
- Containerization: Docker & Docker Compose
- Docker and Docker Compose installed
- Gmail API credentials (see docs/GMAIL_SETUP.md)
cd /Users/sanchitingale/Development/PortFoliioThe .env file is already created. Update Gmail credentials:
# Add your Gmail API credentials (see docs/GMAIL_SETUP.md for instructions)
GMAIL_CLIENT_ID=your_gmail_client_id
GMAIL_CLIENT_SECRET=your_gmail_client_secret
GMAIL_REDIRECT_URI=http://localhost:3000/api/gmail/callbackdocker-compose up --buildThis will start:
- PostgreSQL database on port 5432
- Backend API on port 3000
- Frontend on port 5173
- Portfolio Website: http://localhost:5173
- Backend API: http://localhost:3000
- Database: localhost:5432
Click "Banking Dashboard" in the navigation and use:
- Username:
demo - Password:
demo1234
Or register a new account!
PortFoliio/
βββ server/ # Backend Node.js application
β βββ config/ # Database, Gmail configuration
β βββ middleware/ # Authentication middleware
β βββ routes/ # API routes
β βββ services/ # Gmail sync service layer
β βββ db/ # Database schema
β βββ index.js # Express server
βββ src/ # Frontend React application
β βββ components/ # React components
β βββ App.jsx # Main app with routing
β βββ main.jsx # React entry point
β βββ index.css # Global styles
βββ docs/ # Documentation
β βββ GMAIL_SETUP.md # Gmail API setup guide
βββ docker-compose.yml # Docker multi-container setup
βββ Dockerfile.dev # Development Dockerfile
βββ vite.config.js # Vite configuration
βββ package.json # Dependencies
# Start all services
docker-compose up
# Start in detached mode
docker-compose up -d
# View logs
docker-compose logs -f
# Stop all services
docker-compose down
# Rebuild containers
docker-compose up --build
# Access PostgreSQL
docker exec -it portfoliio-db psql -U portfoliio_user -d portfoliio_db- Landing: Hero section with stats and animations
- About: Skills showcase with progress bars
- Projects: Project cards with tags
- Contact: Contact form and social links
- Login: Authentication with registration
- Dashboard: Banking dashboard with account management
- BankCard: Individual bank account card with balance/transactions
POST /api/auth/register- Register new userPOST /api/auth/login- User loginGET /api/auth/verify- Verify token
GET /api/banking/transactions/recent- Get recent transactionsGET /api/banking/accounts- List linked accountsPOST /api/banking/accounts/link- Link bank account
GET /api/gmail/connect- Initiate Gmail OAuthGET /api/gmail/callback- OAuth callbackPOST /api/gmail/sync- Sync transactions from Gmail
- β JWT-based authentication
- β Bcrypt password hashing
- β HTTPS enforcement (production)
- β Rate limiting
- β Helmet security headers
- β CORS protection
- β No credential storage (AA framework)
- β Environment variable protection
For proper transaction tracking, you need to set up Gmail API access:
-
See Complete Guide: docs/GMAIL_SETUP.md
-
Quick Setup:
- Create Google Cloud Project
- Enable Gmail API
- Configure OAuth consent screen
- Create OAuth 2.0 credentials
- Add credentials to .env file
-
Connect Gmail:
- Login to dashboard
- Go to Settings
- Click "Connect Gmail Account"
- Authorize access
- GCP e2-micro instance running
- Docker installed on instance
- Domain with SSL certificate
# SSH to your GCP instance
# Clone repository
# Update .env with production values
# Run containers
docker-compose -f docker-compose.prod.yml up -d| Variable | Description | Default |
|---|---|---|
DB_USER |
PostgreSQL username | portfoliio_user |
DB_PASSWORD |
PostgreSQL password | portfoliio_password |
DB_NAME |
Database name | portfoliio_db |
JWT_SECRET |
JWT signing secret | (change in production) |
GMAIL_CLIENT_ID |
Gmail API client ID | - |
GMAIL_CLIENT_SECRET |
Gmail API client secret | - |
GMAIL_REDIRECT_URI |
Gmail OAuth redirect | http://localhost:3000/api/gmail/callback |
This is a personal project, but suggestions are welcome!
MIT License - feel free to use this for your own projects!
- Google for the Gmail API
- React and Vite teams
- All open source contributors
Built with β€οΈ using modern web technologies