A modern, elegant portfolio website built with Next.js 14, featuring smooth animations, responsive design, and an intuitive user experience.
npm install
npm run dev
Navigation & Footer (components/Navigation.tsx, components/Footer.tsx):
Metadata (app/layout.tsx):
Portfolio Data (lib/data.ts):
public/projects/Supported image formats: JPG, PNG, WebP, SVG
About Content (app/about/page.tsx):
Contact Page (app/contact/page.tsx):
The contact form currently logs submissions to the console. To receive actual emails:
Option A: Use Resend
npm install resend
Update app/api/contact/route.ts:
import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);
// In POST handler:
await resend.emails.send({
from: 'onboarding@resend.dev',
to: 'your-email@example.com',
subject: `New Contact Form: ${name}`,
html: `<p><strong>From:</strong> ${name} (${email})</p>
<p><strong>Project Type:</strong> ${projectType}</p>
<p><strong>Message:</strong> ${message}</p>`
});
Option B: Use SendGrid, Mailgun, or other email service
Global Styles (app/globals.css):
--accent: Primary accent color--primary: Primary text color--background: Background colorReplace placeholder images in public/projects/ with your actual work:
npm run build.nextIf using email services, add these to your deployment platform:
RESEND_API_KEY (if using Resend)├── app/
│ ├── layout.tsx # Root layout with navigation
│ ├── page.tsx # Home/portfolio gallery
│ ├── about/page.tsx # About page
│ ├── contact/page.tsx # Contact page
│ └── api/contact/route.ts # Contact form API
├── components/
│ ├── Navigation.tsx # Header navigation
│ ├── Footer.tsx # Footer component
│ ├── PortfolioGrid.tsx # Portfolio gallery
│ ├── ProjectCard.tsx # Project card component
│ ├── ProjectModal.tsx # Project lightbox modal
│ ├── ContactForm.tsx # Contact form
│ └── AnimatedSection.tsx # Animation wrapper
├── lib/
│ └── data.ts # Portfolio data
└── public/
└── projects/ # Portfolio images
For issues or questions, please open an issue on GitHub or contact the developer.
This project is open source and available under the MIT License.