A modern, responsive, and customizable portfolio template for developers and freelancers
Demo β’ Features β’ Installation β’ Usage β’ Deployment β’ Tutorials
A professional portfolio template built with Next.js 16, React 19, and Tailwind CSS 4. Features a modern App Router architecture, server components, and data-driven configuration for easy customization.
- β Cutting-Edge Tech Stack: Built with Next.js 16, React 19, and Tailwind CSS 4
 - β Fully Responsive: Optimized for all devices and screen sizes
 - β SEO Optimized: Better visibility on search engines with Next.js metadata API
 - β Blazing Fast Performance: Leverages Next.js 16 server components and streaming
 - β App Router: Uses the modern Next.js App Router architecture
 - β Easy Customization: Simple data-driven configuration
 - β Contact Form: Integrated email and Telegram notifications
 - β Blog Integration: Automatically fetch posts from dev.to
 - β Dark Theme: Beautiful gradient design with Lottie animations
 - β Docker Support: Easy containerized deployment
 - β Google Analytics: Track visitor insights with GTM support
 
This portfolio leverages the latest Next.js 16 and React 19 capabilities:
| Feature | Benefit | 
|---|---|
| App Router | Modern routing with layouts and nested routes | 
| Server Components | Improved performance with zero JavaScript for static content | 
| Server Actions | Simplified form handling in contact page | 
| Metadata API | Enhanced SEO with type-safe metadata | 
| Image Optimization | Automatic image optimization with next/image | 
| Font Optimization | Automatic font loading with next/font | 
| Streaming & Suspense | Better loading states and progressive rendering | 
| React 19 Features | Actions, use hook, and improved hydration | 
| Section | Description | 
|---|---|
| π¦Έ Hero | Eye-catching introduction with animated elements | 
| π€ About Me | Personal information and professional summary | 
| πΌ Experience | Work history and professional accomplishments | 
| π οΈ Skills | Technical skills with animated marquee display | 
| π Projects | Showcase your best work with descriptions and links | 
| π Education | Academic background and certifications | 
| π Blog | Latest articles from dev.to (auto-fetched) | 
| π§ Contact | Get in touch form with email/Telegram integration | 
- Overview
 - Demo
 - Features
 - Sections
 - Tech Stack
 - Installation
 - Getting Started
 - Usage
 - Deployment
 - Tutorials
 - Packages Used
 - Contributing
 - License
 - Support
 
| Technology | Version | Purpose | 
|---|---|---|
| Next.js | 16.0.1 | React framework with App Router | 
| React | 19.2.0 | UI component library with latest features | 
| Tailwind CSS | 4.x | Utility-first CSS framework | 
| SASS | Latest | CSS preprocessor | 
| Lottie | Latest | Lightweight animations | 
| Nodemailer | Latest | Email sending functionality | 
| Axios | Latest | HTTP client for API requests | 
| Docker | - | Containerization platform | 
Before you begin, ensure you have the following installed on your machine:
| Tool | Minimum Version | Download Link | 
|---|---|---|
| Node.js | v18.17.0+ | Download | 
| Git | Latest | Download | 
| pnpm (recommended) | Latest | Install | 
Note: Next.js 16 requires Node.js 18.17 or later. Node.js 20+ is recommended for optimal performance.
Check your installations with these commands:
node --version
git --version
pnpm --version  # or npm --versiongit clone https://github.com/<YOUR_GITHUB_USERNAME>/developer-portfolio.git
cd developer-portfolio# Using pnpm (recommended)
pnpm install
# Using npm
npm install
# Using yarn
yarn installcp .env.example .envEdit the .env file with your values (see Usage section).
pnpm dev
# or
npm run dev
# or
yarn devOpen http://localhost:3000 in your browser.
docker-compose up --build
# Run in detached mode
docker-compose up -d --build
# Stop
docker-compose downFor Development:
# Build the development image
docker build -t developer-portfolio:dev -f Dockerfile.dev .
# Run the container
docker run -p 3000:3000 --name portfolio-dev developer-portfolio:dev
# Stop and remove container
docker stop portfolio-dev && docker rm portfolio-devFor Production:
# Build the production image
docker build -t developer-portfolio:prod -f Dockerfile.prod .
# Run the production container
docker run -p 3000:3000 --name portfolio-prod developer-portfolio:prodCreate a .env file in the root directory with the following variables:
# Google Tag Manager (Optional - for analytics)
NEXT_PUBLIC_GTM=GTM-XXXXXXX
# Your deployed app URL
NEXT_PUBLIC_APP_URL=https://your-domain.com
# Telegram Bot Configuration (for contact form notifications)
TELEGRAM_BOT_TOKEN=your_bot_token_here
TELEGRAM_CHAT_ID=your_chat_id_here
# Gmail Configuration (for contact form emails)
GMAIL_PASSKEY=your_gmail_app_password
EMAIL_ADDRESS=your_email@gmail.com| Variable | Required | Description | 
|---|---|---|
NEXT_PUBLIC_GTM | 
No | Google Tag Manager ID for analytics tracking | 
NEXT_PUBLIC_APP_URL | 
Yes | Your portfolio's public URL | 
TELEGRAM_BOT_TOKEN | 
No | Token for Telegram bot notifications | 
TELEGRAM_CHAT_ID | 
No | Your Telegram chat ID for receiving messages | 
GMAIL_PASSKEY | 
No | Gmail app password for email notifications | 
EMAIL_ADDRESS | 
No | Your Gmail address for sending emails | 
Note: Contact form features require either Telegram or Gmail configuration (or both).
All portfolio content is managed through data files in the utils/data/ folder:
export const personalData = {
  name: "YOUR NAME",
  profile: "/profile.png", // Path to your profile image
  designation: "Software Developer", // Your job title
  description: "Your bio and introduction...", // About yourself
  email: "your.email@example.com",
  phone: "+1234567890",
  address: "City, Country",
  github: "https://github.com/yourusername",
  facebook: "https://www.facebook.com/yourprofile",
  linkedIn: "https://www.linkedin.com/in/yourprofile",
  twitter: "https://twitter.com/yourusername",
  stackOverflow: "https://stackoverflow.com/users/your-id",
  leetcode: "https://leetcode.com/yourusername/",
  devUsername: "yourusername", // dev.to username for blog integration
  resume: "https://link-to-your-resume.pdf",
};| File | Purpose | 
|---|---|
experience.js | 
Your work experience and job history | 
projects-data.js | 
Portfolio projects with descriptions and links | 
skills.js | 
Technical skills and competencies | 
educations.js | 
Academic background and certifications | 
contactsData.js | 
Contact form configuration | 
Place your profile picture in the public/ directory and update the profile field in personal-data.js:
profile: "/your-image-name.png"; // or .jpg, .webpManual Deployment:
- Sign up at Vercel
 - Import your GitHub repository
 - Add environment variables in Settings β Environment Variables
 - Deploy
 
Features:
- Native Next.js 16 support
 - Automatic deployments on push
 - Preview deployments for PRs
 - Edge runtime support
 - Global CDN and free SSL
 
Manual Deployment:
- Sign up at Netlify
 - Import your GitHub repository
 - Build command: 
npm run build - Publish directory: 
.next - Add environment variables in Site Settings β Environment
 
# Build production image
docker build -t developer-portfolio:prod -f Dockerfile.prod .
# Run
docker run -d -p 80:3000 --name portfolio developer-portfolio:prod
# Or use Docker Compose
docker-compose -f docker-compose.prod.yml up -d- Go to https://myaccount.google.com/
 - Navigate to Security β 2-Step Verification (enable if not already)
 - Go to Security β App Passwords
 - Select app: Mail, device: Other (Custom name)
 - Generate and copy the 16-character password
 - Add to 
.envfile: 
GMAIL_PASSKEY=abcd efgh ijkl mnop
EMAIL_ADDRESS=your.email@gmail.com- Open Telegram and search for 
@BotFather - Send 
/newbotcommand - Set bot name and username (must end with 
bot) - Copy the bot token
 - Send a message to your bot
 - Get chat ID from: 
https://api.telegram.org/bot<BOT_TOKEN>/getUpdates - Add to 
.envfile: 
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
TELEGRAM_CHAT_ID=123456789- Create a dev.to account
 - Open 
utils/data/personal-data.js - Set your dev.to username:
 
export const personalData = {
  // ... other fields
  devUsername: "yourusername",
};The portfolio automatically fetches and displays your latest public articles. No API key required.
| Package | Version | Purpose | 
|---|---|---|
| next | ^16.0.1 | Latest React framework with App Router and Server Components | 
| react | ^19.2.0 | JavaScript library with improved concurrent rendering | 
| react-dom | ^19.2.0 | React package for working with the DOM | 
| tailwindcss | ^4.1.16 | Modern utility-first CSS framework | 
| sass | Latest | CSS preprocessor for styling | 
| Package | Purpose | 
|---|---|
| lottie-react | Lightweight animations with Lottie files | 
| react-fast-marquee | Smooth scrolling marquee component | 
| react-icons | Popular icon library with easy integration | 
| react-toastify | Beautiful notification toasts | 
| Package | Purpose | 
|---|---|
| axios | Promise-based HTTP client | 
| nodemailer | Email sending functionality | 
| @emailjs/browser | Client-side email service | 
| react-google-recaptcha | Google reCAPTCHA integration | 
| sharp | High-performance image processing | 
| @next/third-parties | Third-party script optimization | 
β "next is not recognized as an internal or external command"
Solution:
# Option 1: Install Next.js globally
npm install -g next
# Option 2: Use npx (recommended)
npx next dev
# Option 3: Use package manager scripts
npm run devβ Port 3000 is already in use
Solution:
# Find and kill the process using port 3000
# On macOS/Linux:
lsof -ti:3000 | xargs kill -9
# On Windows:
netstat -ano | findstr :3000
taskkill /PID <PID> /F
# Or use a different port:
PORT=3001 npm run devβ Module not found or dependency errors
Solution:
# Clear cache and reinstall dependencies
rm -rf node_modules package-lock.json
npm cache clean --force
npm install
# Or with pnpm:
rm -rf node_modules pnpm-lock.yaml
pnpm store prune
pnpm installβ Environment variables not working
Solution:
- Ensure 
.envfile is in the root directory - Restart the development server after changing 
.env - Check that variables starting with 
NEXT_PUBLIC_are used for client-side code - Server-side variables should NOT start with 
NEXT_PUBLIC_ 
β Images not loading
Solution:
- Verify images are in the 
public/directory - Use paths starting with 
/(e.g.,/profile.png) - Check image file extensions match the code
 - Ensure image files are committed to your repository
 
β Contact form not sending emails
Solution:
- Verify Gmail App Password is correct (16 characters)
 - Check that 2-Step Verification is enabled on your Google account
 - Ensure 
EMAIL_ADDRESSmatches the Gmail account - Test Telegram bot token and chat ID separately
 - Check browser console for error messages
 
- Fork the repository
 - Create a feature branch: 
git checkout -b feature/AmazingFeature - Commit changes: 
git commit -m 'Add some AmazingFeature' - Push to branch: 
git push origin feature/AmazingFeature - Open a Pull Request
 
This project is licensed under the MIT License - see the LICENSE file for details.
- β Star the repository
 - οΏ½ Report bugs
 - οΏ½ Suggest features
 

