A modern, responsive portfolio website built with Next.js, TypeScript, and Tailwind CSS. Features a clean design with smooth animations, dark mode support, and automatic PDF resume generation.
- 🎨 Modern and clean design
- 🌙 Dark mode support with next-themes
- 📱 Fully responsive layout
- ⚡ Fast and optimized with Next.js 15
- 🎭 Smooth animations using Framer Motion
- 🧩 Interactive components
- 📝 Contact form with Formspree integration
- 🎯 SEO friendly with automatic sitemap generation
- 📄 Automatic PDF resume generation with customizable data
- 🚀 Easy deployment to Vercel
- Next.js 15
- TypeScript
- Tailwind CSS
- Framer Motion
- React Icons
- Puppeteer (for PDF resume generation)
- Font Awesome (for PDF icons)
- Formspree (for contact form)
- next-sitemap (for SEO and sitemap generation)
-
Clone the repository:
git clone https://github.com/sergot/personal-portfolio.git
-
Install dependencies:
npm install
-
Set up environment variables:
cp .env.example .env.local
Edit
.env.localand add your Formspree ID (see Environment Variables section below). -
Run the development server:
npm run dev
-
Open http://localhost:3000 in your browser.
The application uses environment variables for configuration. Create a .env.local file in the root directory with the following variables:
# Formspree ID for contact form
NEXT_PUBLIC_FORMSPREE_ID=your-form-id
# Your website URL (for sitemap generation)
SITE_URL=https://sergot.pl
| Variable | Description | Example |
|---|---|---|
NEXT_PUBLIC_FORMSPREE_ID |
Your Formspree form ID (not the full URL) | abcdefgh |
SITE_URL |
Your website URL for sitemap generation | https://sergot.pl |
All personal information is centralized in the src/data directory:
- Update personal info in
src/data/personal.ts - Modify experience in
src/data/jobs.ts - Update skills in
src/data/skills.ts - Edit projects in
src/data/projects.ts
The website uses Tailwind CSS for styling with dark mode support:
- Colors: Update the color scheme in
tailwind.config.js - Typography: Modify font settings in
src/app/layout.tsx - Dark mode: Customize dark mode colors in
src/app/globals.css - Components: Each component in
src/componentshas its own styles
The site includes automatic PDF resume generation:
- Update the template in
scripts/generate-pdf.ts - Customize the data in the data files:
- Personal information (including website URL) in
src/data/personal.ts - Experience details in
src/data/jobs.ts - Skills and categories in
src/data/skills.ts - Projects (including GitHub links) in
src/data/projects.ts
- Personal information (including website URL) in
- Generate a new PDF:
npm run pdf
- The PDF will be saved to
public/your-name-resume.pdf
The contact form is integrated with Formspree:
- Sign up at Formspree
- Create a new form and get your form ID (the part after
f/in the endpoint URL) - Add your form ID to
.env.localasNEXT_PUBLIC_FORMSPREE_ID=your-form-id - The form includes:
- Name validation
- Email validation
- Message length requirements
- Success/error handling
- Loading states
scripts/ # Utility scripts (PDF generation)
next-sitemap.config.js # Sitemap generation configuration
src/
├── app/ # Next.js app directory
├── components/ # React components
├── data/ # Data files (personal, jobs, skills, projects)
├── styles/ # Global styles
└── types/ # TypeScript type definitions
The website is optimized for deployment on Vercel:
- Push your code to GitHub
- Connect your repository to Vercel
- Add environment variables in the Vercel dashboard
- Deploy!
Alternative deployment options:
- Netlify
- AWS Amplify
- GitHub Pages
npm run dev- Start development servernpm run build- Build for production (automatically generates sitemap)npm run start- Start production servernpm run pdf- Generate PDF resumenpm run sitemap- Generate sitemap manuallynpm run lint- Run ESLintnpm run type-check- Run TypeScript checks
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.