VisaEase is a modern, full-stack web application designed to streamline visa applications, consultations, and immigration services. Built with React 19, Express.js, and MongoDB, it provides a comprehensive platform for applicants, visa officers, and administrators to manage the entire visa application lifecycle.
- Features
- Tech Stack
- Project Structure
- Installation & Setup
- API Documentation
- User Roles & Permissions
- Database Schema
- Deployment
- Contributing
- User Registration & Authentication with JWT tokens and secure password hashing
- Multi-step Visa Application Form with real-time validation
- Document Upload with Cloudinary integration (passport, photos, supporting docs)
- Application Tracking with real-time status updates
- Application History with detailed timeline view
- Profile Management with editable personal information
- Consultation Booking for immigration services
- Visa Inquiry Form for pre-application questions
- Dedicated Officer Dashboard with application queue
- Application Review System with approve/reject/request info capabilities
- Document Verification with inline viewing
- Application Assignment - automatic or manual assignment
- Review Comments and feedback system
- CSV Export functionality for reporting
- Application Filtering by status and visa type
- Performance Analytics for processed applications
- Comprehensive Admin Dashboard with 6 management tabs:
- Overview & Analytics: Statistics, charts, and trends
- User Management: Create, edit, delete users (applicants, officers, admins)
- Application Management: View all applications, delete, track
- Visa Type Configuration: Create/edit visa types, fees, requirements
- Document Management: View all documents, verify, delete
- Audit Logs: Track all system actions and user activities
- Advanced Analytics with Recharts visualizations
- System-wide Search and filtering capabilities
- Bulk Operations for efficient management
- Admin Secret Key registration for security
- Modern UI with Tailwind CSS and custom gradients
- Role-based Theming: Red (Applicants), Blue (Officers), Purple (Admins)
- Responsive Design - mobile, tablet, and desktop optimized
- Animated Backgrounds with decorative elements
- Loading States with custom spinners
- Empty States with helpful guidance
- Toast Notifications for user feedback
- Password Strength Meter with zxcvbn
- Form Validation with real-time feedback
- JWT Authentication with HTTP-only token storage
- Role-based Authorization (RBAC) middleware
- Password Encryption with bcryptjs
- Admin Secret Key for admin registration
- Protected Routes on frontend and backend
- CORS Configuration for secure API access
- Input Validation with Mongoose schemas
- XSS Protection through sanitized inputs
| Technology | Version | Purpose |
|---|---|---|
| React | 19.0.0 | UI framework with latest features |
| Vite | 6.2.0 | Build tool and dev server |
| React Router | 7.5.1 | Client-side routing |
| Tailwind CSS | 4.1.5 | Utility-first styling |
| Framer Motion | 12.9.4 | Animation library |
| GSAP | 3.13.0 | Advanced animations |
| Recharts | 3.3.0 | Data visualization charts |
| React Icons | 5.5.0 | Icon library |
| Axios | 1.13.1 | HTTP client |
| zxcvbn | 4.4.2 | Password strength estimation |
| PapaParse | 5.5.3 | CSV parsing/generation |
| Technology | Version | Purpose |
|---|---|---|
| Node.js | - | JavaScript runtime |
| Express | 5.1.0 | Web application framework |
| MongoDB | - | NoSQL database |
| Mongoose | 8.14.2 | ODM for MongoDB |
| JWT | 9.0.2 | Token-based authentication |
| bcryptjs | 3.0.2 | Password hashing |
| Cloudinary | 1.41.3 | Cloud image storage |
| Multer | 2.0.2 | File upload handling |
| CORS | 2.8.5 | Cross-origin resource sharing |
| dotenv | 16.5.0 | Environment variable management |
- Vercel - Deployment platform
- MongoDB Atlas - Cloud database hosting
- ESLint - Code linting
- Concurrently - Run multiple commands
- Git - Version control
visa-page-pallavi/
โ
โโโ ๐ฑ Frontend (React + Vite)
โ โโโ src/
โ โ โโโ components/
โ โ โ โโโ ๐ Authentication
โ โ โ โ โโโ Login.jsx # User login (2-column, blue)
โ โ โ โ โโโ AdminAuth.jsx # Admin login (purple/red)
โ โ โ โ โโโ AdminRegister.jsx # Admin registration
โ โ โ โ โโโ AuthBackground.jsx # Animated background
โ โ โ โ โโโ ProtectedRoute.jsx # Route protection
โ โ โ โ
โ โ โ โโโ ๐ค Applicant Portal
โ โ โ โ โโโ ApplicantDashboard.jsx # Dashboard (red theme)
โ โ โ โ โโโ VisaApplicationForm.jsx # Application form
โ โ โ โ โโโ DocumentUpload.jsx # Document upload
โ โ โ โ โโโ ApplicationHistory.jsx # Past applications
โ โ โ โ โโโ Profile.jsx # Profile management
โ โ โ โ
โ โ โ โโโ ๐ฎ Officer Portal
โ โ โ โ โโโ OfficerDashboard.jsx # Dashboard (blue theme)
โ โ โ โ โโโ OfficerReviewForm.jsx # Review form
โ โ โ โ
โ โ โ โโโ ๐ Admin Portal
โ โ โ โ โโโ AdminDashboard.jsx # Dashboard (purple theme)
โ โ โ โ โ # 6 Tabs: Overview, Users, Applications,
โ โ โ โ โ # Visa Types, Documents, Audit
โ โ โ โ โโโ Analytics.jsx # Analytics charts
โ โ โ โ
โ โ โ โโโ ๐ Landing Pages
โ โ โ โโโ Home.jsx # Landing page
โ โ โ โโโ Navbar.jsx # Navigation
โ โ โ โโโ Footer.jsx # Footer
โ โ โ โโโ About.jsx # About page
โ โ โ โโโ Services.jsx # Services page
โ โ โ โโโ Contact.jsx # Contact page
โ โ โ โโโ Blog.jsx # Blog page
โ โ โ
โ โ โโโ context/
โ โ โ โโโ AuthContext.jsx # Auth state management
โ โ โ
โ โ โโโ api/
โ โ โ โโโ index.js # Axios config
โ โ โ
โ โ โโโ App.jsx # Main app component
โ โ โโโ main.jsx # Entry point
โ โ
โ โโโ public/
โ โ โโโ favicon.png
โ โ
โ โโโ index.html
โ โโโ vite.config.js
โ โโโ tailwind.config.js
โ
โโโ ๐ง Backend (Express + MongoDB)
โ โโโ server/
โ โโโ server.js # Express server entry
โ โ
โ โโโ config/
โ โ โโโ db.js # MongoDB connection
โ โ โโโ cloudinary.js # Cloudinary config
โ โ
โ โโโ models/ # Mongoose schemas
โ โ โโโ User.js # User model
โ โ โโโ Applicant.js # Applicant profile
โ โ โโโ Officer.js # Officer profile
โ โ โโโ VisaApplication.js # Application
โ โ โโโ ApplicationStatus.js # Status enum
โ โ โโโ VisaType.js # Visa types
โ โ โโโ Document.js # Documents
โ โ โโโ Review.js # Reviews
โ โ
โ โโโ controllers/ # Business logic
โ โ โโโ authController.js # Authentication
โ โ โโโ applicationController.js # Applications
โ โ โโโ documentController.js # Documents
โ โ โโโ reviewController.js # Reviews
โ โ โโโ adminController.js # Admin operations
โ โ
โ โโโ routes/ # API routes
โ โ โโโ auth.js # /api/auth/*
โ โ โโโ applicationRoutes.js # /api/applications/*
โ โ โโโ documentRoutes.js # /api/documents/*
โ โ โโโ reviewRoutes.js # /api/reviews/*
โ โ โโโ adminRoutes.js # /api/admin/*
โ โ
โ โโโ middleware/
โ โ โโโ authMiddleware.js # JWT + RBAC
โ โ
โ โโโ utils/
โ โโโ seeder.js # Database seeding
โ โโโ users.js # Seed user data
โ
โโโ ๐ Configuration
โ โโโ package.json # Dependencies
โ โโโ .env # Environment variables
โ โโโ .env.example # Environment template
โ โโโ vercel.json # Vercel config
โ โโโ .gitignore
โ
โโโ README.md # This file
- Node.js v16+ (Download)
- MongoDB Atlas account (Sign up)
- Cloudinary account (Sign up)
- Git for version control
git clone https://github.com/radheshpai87/visa-page-pallavi.git
cd visa-page-pallavinpm installCreate a .env file in the root:
# MongoDB Connection
MONGO_URI=mongodb+srv://username:password@cluster.mongodb.net/visaease?retryWrites=true&w=majority
# JWT Secret
JWT_SECRET=your_super_secret_jwt_key
# Admin Secret Key
ADMIN_SECRET_KEY=your_admin_secret_key
# Cloudinary
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
# Server
PORT=5000
NODE_ENV=developmentnpm run server:seedCreates sample users:
- Applicant:
applicant@test.com/password123 - Officer:
officer@test.com/password123 - Admin:
admin@test.com/password123
Both frontend & backend:
npm run dev:allOr separately:
# Terminal 1
npm run server
# Terminal 2
npm run dev- Frontend: http://localhost:5173
- Backend: http://localhost:5000/api
Production: https://visa-ease.vercel.app/api
Development: http://localhost:5000/api
Register new user
Body:
{
"username": "john_doe",
"email": "john@example.com",
"password": "SecurePass123!",
"phone": "+1234567890",
"role": "applicant"
}Login user
Body:
{
"email": "john@example.com",
"password": "SecurePass123!"
}Register admin (requires secret key)
Body:
{
"username": "admin",
"email": "admin@example.com",
"password": "AdminPass123!",
"adminSecretKey": "your_secret_key"
}Get current user
Headers: Authorization: Bearer <token>
Create application (Applicant)
Get applications
Get single application
Update status (Officer/Admin)
Delete application (Admin)
Upload documents
Get application documents
Delete document (Admin)
System statistics
Get all users
Create user
Update user
Delete user
๐ช Admin (Full Access)
โโโ Manage Users
โโโ Manage Applications
โโโ Configure Visa Types
โโโ View Analytics
โโโ Audit Logs
๐ฆ Officer (Review Authority)
โโโ Review Applications
โโโ Update Status
โโโ Add Comments
โโโ Export Data (CSV)
๐ฅ Applicant (End User)
โโโ Create Applications
โโโ Upload Documents
โโโ Track Status
โโโ View History
| Feature | Applicant | Officer | Admin |
|---|---|---|---|
| Register/Login | โ | โ | โ (secret) |
| Create Application | โ | โ | โ |
| View Own Apps | โ | โ | โ |
| Review Apps | โ | โ | โ |
| Change Status | โ | โ | โ |
| Upload Docs | โ | โ | โ |
| Delete Docs | โ | โ | โ |
| View All Apps | โ | โ | โ |
| Manage Users | โ | โ | โ |
| View Analytics | โ | Limited | โ |
| Export CSV | โ | โ | โ |
User - Authentication
- username, email, password (hashed), role, phone
Applicant - Profile
- user_id, first_name, last_name, passport_number, dob, nationality
Officer - Profile
- user_id, badge_number, department, position
VisaApplication - Applications
- applicant_id, type_id, status_id, officer_id, application_date
Document - Files
- application_id, document_type, file_path (Cloudinary), verified
Review - Comments
- application_id, officer_id, rating, comments, recommendation
VisaType - Configuration
- name, fee, duration_days, required_docs_list
ApplicationStatus - Status Enum
- name (Pending, In Review, Approved, Rejected), description, color
- Push to GitHub
git add .
git commit -m "Deploy to Vercel"
git push origin main-
Connect to Vercel
- Go to vercel.com
- Import your repository
-
Add Environment Variables
MONGO_URIJWT_SECRETADMIN_SECRET_KEYCLOUDINARY_CLOUD_NAMECLOUDINARY_API_KEYCLOUDINARY_API_SECRETNODE_ENV=production
-
Deploy
- Click "Deploy"
- Wait for build completion
- Test authentication flows
- Verify file uploads
- Check API endpoints
- Test role-based access
- Verify database connection
- Test on mobile devices
- Enable Vercel Analytics
We welcome contributions!
- Fork the repository
- Create feature branch:
git checkout -b feature/amazing - Make changes
- Test thoroughly:
npm run dev:all - Commit:
git commit -m "Add feature" - Push:
git push origin feature/amazing - Open Pull Request
- Use ES6+ syntax
- Follow React Hooks best practices
- Use async/await
- Add meaningful comments
- Keep components focused
- Use Tailwind CSS for styling
This project is proprietary software. All rights reserved.
Radhesh Pai
- GitHub: @radheshpai87
- React team for React 19
- Vercel for hosting
- MongoDB for database
- Cloudinary for storage
- Tailwind CSS for styling
- All open-source contributors
- Email notifications
- SMS alerts (Twilio)
- Payment gateway
- Multi-language support (i18n)
- Document OCR verification
- Video consultations
- Mobile app (React Native)
- Real-time chat
- 2FA authentication
- Social login (OAuth)
- Advanced analytics
- Automated testing
Last Updated: November 2025
Happy Coding! ๐