This guide will walk you through setting up your personal portfolio website.
- Node.js 20.x or later
- npm, yarn, or pnpm
- A code editor (VS Code recommended)
- Click the "Fork" button on the repository page
- Clone your forked repository:
git clone https://github.com/YOUR_USERNAME/portfolio.git
cd portfolio- Click "Use this template" on GitHub
- Create a new repository
- Clone your new repository
npm installCreate your environment file:
cp .env.example .env.localEdit .env.local with your values:
# Required
NEXT_PUBLIC_SITE_URL="https://yourdomain.com"
# Optional - Analytics
NEXT_PUBLIC_GA_MEASUREMENT_ID="G-XXXXXXXXXX"
NEXT_PUBLIC_GTM_ID="GTM-XXXXXXXX"
NEXT_PUBLIC_CLARITY_PROJECT_ID="XXXXXXXXXX"Edit content/en/profile.json:
{
"personalInfo": {
"name": "Your Name",
"position": "Software Engineer",
"company": "Your Company",
"about": "A brief description about yourself...",
"imageUrl": "/images/profile.webp",
"cv": {
"url": "/files/cv.pdf",
"fileName": "Your Name - CV.pdf"
}
},
"skills": [
{
"name": "Frontend Development",
"icon": "monitor",
"items": [
{
"name": "React",
"level": "Expert",
"levelType": "expert",
"icon": "code"
}
]
}
],
"certificates": [],
"projects": [],
"blogPosts": [],
"socialLinks": [
{
"name": "GitHub",
"url": "https://github.com/yourusername"
},
{
"name": "LinkedIn",
"url": "https://linkedin.com/in/yourusername"
}
]
}Edit content/en/metadata.json:
{
"title": "Your Name - Software Engineer",
"description": "Your professional description for search engines...",
"keywords": ["software engineer", "developer", "portfolio"],
"openGraph": {
"title": "Your Name - Software Engineer",
"description": "Your description for social media...",
"siteName": "Your Portfolio",
"images": [
{
"url": "/images/og-banner.en.webp",
"width": 1200,
"height": 630,
"alt": "Your Name - Portfolio"
}
]
},
"twitter": {
"card": "summary_large_image",
"site": "@yourusername",
"creator": "@yourusername",
"images": {
"url": "/images/og-banner.en.webp",
"alt": "Your Name - Portfolio"
}
}
}Replace public/images/profile.webp with your photo:
- Recommended size: 400x400px or larger (square)
- Format: WebP (for best performance)
- You can use PNG/JPG, but WebP is preferred
Replace public/files/cv.pdf with your resume.
Create social media preview images:
- Start dev server:
npm run dev - Go to http://localhost:3000/og-preview
- Select language and customize
- Take screenshot (Ctrl+Shift+S or browser screenshot)
- Convert to WebP using squoosh.app
- Save as
public/images/og-banner.{lang}.webp
# Add French
npm run lang:add -- fr
# Add multiple languages
npm run lang:add -- de es it ja
# See all available languages
npm run lang:list- Create directory:
mkdir content/fr - Copy template:
cp content/en/*.json content/fr/ - Translate the content
- Update
lib/i18n/config.ts - Update
lib/i18n/translations.ts
npm run devnpm run build
npm run start- Push to GitHub
- Import project on vercel.com
- Add environment variables
- Deploy!
docker build -t portfolio .
docker run -p 3000:3000 portfolioAny platform supporting Node.js:
- Netlify
- Railway
- Render
- DigitalOcean App Platform
# Clear cache and rebuild
rm -rf .next node_modules
npm install
npm run build# Clear Next.js cache
rm -rf .next
npm run devnpm installEdit app/globals.css and modify CSS variables:
:root {
--primary: 222.2 47.4% 11.2%;
--accent: 210 40% 96.1%;
}- Create
components/sections/NewSection.tsx - Add data structure to
profile.json - Import in
app/[lang]/page.tsx
Edit app/layout.tsx:
import { Your_Font } from "next/font/google";
const font = Your_Font({
subsets: ["latin"],
weight: ["400", "700"],
});- Check README.md for detailed documentation
- Open an issue on GitHub
- Review existing issues for common problems
Before deploying, make sure you have:
- Updated personal information in
profile.json - Updated SEO metadata in
metadata.json - Replaced profile image
- Added your CV/resume
- Created OG banner images
- Set environment variables
- Tested build locally
- Verified all links work