A modern, responsive portfolio website built with Next.js, TypeScript, and Firebase. Features real-time contact forms, email notifications, and interactive skill visualizations.
- Responsive design optimized for all devices (mobile, tablet, desktop)
- Smooth scroll navigation with active section highlighting
- Gradient color schemes with custom animations
- Interactive hover effects and transitions
- Custom loading animations
- Real-time form submissions stored in Firebase Firestore
- Automated email notifications to admin
- Confirmation emails sent to users
- Loading states and error handling
- Form validation with TypeScript
- Hero Section - Eye-catching introduction with CTA buttons
- About Me - Professional bio with profile image
- Education - Academic qualifications with timeline
- Experience - Work history with detailed descriptions
- Projects - Portfolio showcase with live demos and source code
- Skills - Interactive skill bars with proficiency levels
- Certifications - Professional achievements and awards
- Contact - Integrated contact form with email functionality
- Server-Side Rendering (SSR) for improved SEO
- Type-safe codebase with TypeScript
- Component-based architecture
- Optimized images with Next.js Image component
- Environment variable configuration
- Firebase Firestore integration
- Email service with Nodemailer
- Next.js 15 - React framework
- React.js - UI library
- TypeScript - Type safety
- Tailwind CSS - Styling
- shadcn/ui - Component library
- Lucide React - Icons
- Next.js API Routes - Serverless functions
- Node.js - Runtime environment
- Nodemailer - Email service
- Firebase Firestore - NoSQL database
- Vercel - Deployment platform
- Node.js 18+ installed
- pnpm installed (or npm/yarn)
- Firebase account
- Gmail account for email notifications
git clone https://github.com/rupeshv2121/Portfolio-Nextjs.git
cd Portfolio-Nextjspnpm install
# or
npm installCreate a .env.local file in the root directory:
# Firebase Configuration
NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project.appspot.com
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=your_measurement_id
# Gmail Configuration
GMAIL_USER=your-email@gmail.com
GMAIL_APP_PASSWORD=your-16-character-app-password- Go to Firebase Console
- Create a new project or select existing one
- Enable Firestore Database
- Update Firestore Security Rules:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /contacts/{contactId} {
allow read: if false;
allow create: if request.resource.data.keys().hasAll(['name', 'email', 'subject', 'message', 'timestamp'])
&& request.resource.data.name is string
&& request.resource.data.email is string
&& request.resource.data.email.matches('.*@.*\\..*');
}
match /{document=**} {
allow read, write: if false;
}
}
}- Go to Google App Passwords
- Create a new app password for "Mail"
- Copy the 16-character password
- Add it to
.env.localasGMAIL_APP_PASSWORD
pnpm dev
# or
npm run devOpen http://localhost:3000 in your browser.
pnpm build
pnpm startPortfolio-Nextjs/
βββ app/
β βββ api/
β β βββ send-email/
β β βββ route.ts # Email API endpoint
β βββ globals.css # Global styles
β βββ layout.tsx # Root layout
β βββ page.tsx # Main portfolio page
βββ components/
β βββ ui/ # shadcn/ui components
β βββ modern-loader.tsx # Loading animation
β βββ theme-provider.tsx # Theme configuration
βββ lib/
β βββ firebase.ts # Firebase configuration
β βββ utils.ts # Utility functions
βββ public/
β βββ GP4845.jpg # Profile image
βββ .env.local # Environment variables
βββ components.json # shadcn/ui config
βββ next.config.mjs # Next.js config
βββ package.json # Dependencies
βββ tailwind.config.ts # Tailwind config
βββ tsconfig.json # TypeScript config
- Push your code to GitHub
- Go to Vercel Dashboard
- Import your repository
- Add environment variables in Vercel:
GMAIL_USERGMAIL_APP_PASSWORD- All Firebase variables (NEXT_PUBLIC_*)
- Deploy!
Make sure to add all variables from .env.local to Vercel's environment variables section.
Edit app/page.tsx to update:
- Personal bio and description
- Education details
- Work experience
- Projects showcase
- Skills and proficiency levels
- Certifications and achievements
- Social media links
Update the skills array in the Skills section:
{
name: "Your Skill",
level: 85 // 0-100
}Modify gradient colors in Tailwind classes:
className="bg-gradient-to-r from-orange-500 via-yellow-500 to-blue-500"Add new project objects to the projects array in the Projects section.
The contact form sends emails to both you and the user:
- Admin notification: Receives all form submissions
- User confirmation: Sends automatic thank you message
Email templates can be customized in app/api/send-email/route.ts
- Environment variables stored securely
- Firebase security rules implemented
- Form validation on both client and server
- XSS protection with React
- CSRF protection with Next.js
- Verify Gmail App Password is correct (16 characters without spaces)
- Check if 2-Step Verification is enabled on Gmail
- Ensure environment variables are set in Vercel
- Update Firestore security rules as shown above
- Verify Firebase configuration in
.env.local
- Clear
.nextfolder:rm -rf .next - Delete
node_modulesand reinstall:rm -rf node_modules && pnpm install
- Lighthouse Score: 95+
- Page Load Time: <200ms
- First Contentful Paint: <1s
- Time to Interactive: <2s
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is open source and available under the MIT License.
Rupesh Varshney
- Website: portfolio-nextjs-blush.vercel.app
- GitHub: @rupeshv2121
- LinkedIn: rupeshvarshney
- Email: rupeshvarshney7@gmail.com
- Next.js for the amazing framework
- Vercel for hosting
- shadcn/ui for beautiful components
- Tailwind CSS for utility-first CSS
- Firebase for backend services
β Star this repository if you found it helpful!
Made with β€οΈ by Rupesh Varshney | π© Jai Siya Ram π©