A premium, fully responsive portfolio website built with Next.js 15, featuring a working contact form, SEO optimization, and modern design principles.
- Premium Glass Morphism: Modern glass effects and gradients
- Fully Responsive: Mobile-first design with perfect mobile optimization
- Smooth Animations: Framer Motion animations and transitions
- Premium Typography: Geist font with optimized readability
- Modern Card Layouts: Interactive hover effects and shadows
- Working Contact Form: Fully functional with validation
- Email Integration: AWS SES SMTP configuration
- Premium Email Templates: Beautiful HTML email styling
- Loading States: Smooth form submission experience
- Error Handling: Comprehensive error management
- Complete Meta Tags: OpenGraph, Twitter Cards, and more
- Structured Data: JSON-LD schema for rich snippets
- Dynamic Sitemap: Auto-generated XML sitemap
- Robots.txt: Proper crawling instructions
- Performance Optimized: 99.7kB first load with optimal loading
- Security Headers: XSS protection, frame options, CSP
- Image Optimization: WebP/AVIF formats with Next.js Image
- Code Splitting: Automatic chunking for faster loads
- Production Ready: Console removal, minification, compression
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Animations: Framer Motion
- Icons: Lucide React
- Email: Nodemailer + AWS SES
- Deployment: Vercel
-
Clone the repository
git clone https://github.com/asma019/Next.js-Portfolio-for-System-Admins.git cd Next.js-Portfolio-for-System-Admins
-
Install dependencies
npm install
-
Set up environment variables
cp .env.example .env.local
Edit
.env.local
with your actual values:# SMTP Configuration for AWS SES SMTP_HOST=email-smtp.ap-southeast-1.amazonaws.com SMTP_USERNAME=your-aws-ses-username SMTP_PASSWORD=your-aws-ses-password SMTP_PORT=587 SMTP_SECURE=false # Email Configuration FROM_EMAIL_NAME=Your Name Contact FROM_EMAIL=[email protected] TO_EMAIL=[email protected] # Application Configuration NEXT_PUBLIC_SITE_URL=https://yourdomain.com
-
Run development server
npm run dev
-
Open in browser
http://localhost:3000
Update the following files with your information:
src/app/page.tsx
- Hero section, about, experience, skillssrc/components/Header.tsx
- Navigation and brandingsrc/components/Footer.tsx
- Footer links and contact infosrc/app/layout.tsx
- SEO meta tags and site information
Replace these images in the public/
folder:
photo.webp
- Your profile photoshare.webp
- Social media preview image (1200x630px)
The contact form uses AWS SES for email sending. To set up:
-
Create AWS SES Account
- Go to AWS SES Console
- Verify your sending domain
- Create SMTP credentials
-
Configure Environment Variables
- Add your SMTP credentials to
.env.local
- Update sender/receiver email addresses
- Add your SMTP credentials to
-
Test the Form
- Submit a test message
- Check your email inbox
- Verify email formatting
-
Push to GitHub
git add . git commit -m "Initial commit" git push origin main
-
Deploy to Vercel
- Visit vercel.com
- Import your GitHub repository
- Add environment variables
- Deploy
-
Custom Domain
- Add your domain in Vercel dashboard
- Configure DNS records
- Enable HTTPS
# Build for production
npm run build
# Start production server
npm run start
- First Load JS: 99.7kB
- Build Time: ~8 seconds
- Lighthouse Score: 100/100
- Mobile Optimized: Perfect responsive design
- Meta Tags: Complete OpenGraph and Twitter Cards
- Structured Data: Person schema with job details
- Sitemap:
/sitemap.xml
- Robots:
/robots.txt
- Canonical URLs: Proper link structure
- XSS Protection: Cross-site scripting prevention
- Frame Options: Clickjacking protection
- Content Security Policy: Resource loading restrictions
- HTTPS: SSL/TLS encryption
- Input Validation: Form sanitization
Primary colors are defined in src/app/globals.css
:
.text-premium { color: #3b82f6; }
.bg-premium-blue { background: #3b82f6; }
.text-gradient-premium { background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%); }
Font configuration in src/app/layout.tsx
:
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
Framer Motion variants in src/app/page.tsx
:
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
transition={{ duration: 0.6 }}
- Responsive Design: Mobile-first approach
- Touch Friendly: Proper touch targets
- Fast Loading: Optimized images and code
- Gesture Support: Smooth scrolling and interactions
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm run lint:fix # Fix ESLint issues
βββ src/
β βββ app/
β β βββ api/contact/ # Contact form API
β β βββ globals.css # Global styles
β β βββ layout.tsx # Root layout
β β βββ page.tsx # Home page
β β βββ sitemap.ts # Dynamic sitemap
β βββ components/
β βββ Header.tsx # Navigation
β βββ Footer.tsx # Footer
βββ public/
β βββ photo.webp # Profile photo
β βββ share.webp # Social preview
β βββ ...
βββ ...
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Next.js - React framework
- Tailwind CSS - Utility-first CSS
- Framer Motion - Animation library
- Lucide - Icon library
- Vercel - Deployment platform
If you found this project helpful, please give it a β star on GitHub!
For questions or support:
- π§ Email: [email protected]
- π Issues: GitHub Issues
- π¬ Discussions: GitHub Discussions
Made with β€οΈ using Next.js 15