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=[email protected]| 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: "[email protected]",
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=[email protected]- 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

