A dynamic CV / portfolio site with a full admin panel for managing projects, certificates, profile content, and incoming messages.
🌐 Live: https://cv-phi-pied.vercel.app
- 🏠 Landing page with profile summary, skills, and featured projects
- 📄 Dynamic projects & certificates sections loaded from MongoDB
- ✉️ Contact form that stores messages in the database
- 🔐 JWT-based authentication with a bootstrap
createAdminscript - 🧾 CRUD for projects, certificates, and profile details
- 📥 Inbox view for visitor messages
| Layer | Tech |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| UI | Tailwind CSS 4, Headless UI, Lucide icons |
| Data | MongoDB + Mongoose |
| Auth | JWT + bcrypt |
| UX | react-hot-toast, React 19 |
npm install
cp .env.example .env.local # fill MongoDB URI + JWT secret
npm run devnode scripts/createAdmin.jsnpm run build
npm run startDeploys cleanly to Vercel — just set the environment variables in the project settings.
app/ # Next.js App Router pages
components/ # UI components (Navbar, Footer, Admin*)
lib/ # db connection & helpers
models/ # Mongoose models: Profile, Project, Certificate, Message, User
scripts/ # createAdmin.js
types/ # Shared TypeScript types
middleware.ts # Route protection
Hesam Hadadi — Senior Frontend Engineer · hesamhaddadi.com