A modern, interactive developer portfolio with a unique terminal interface and classic view mode.
- Dual Interface: Switch between Terminal and Classic modes
- Interactive Terminal: Linux-like command system
- Blog System: MDX-powered blog with syntax highlighting
- Fully Typed: TypeScript for type safety
- Responsive: Mobile-first design
- Dark Mode: Built-in theme switching
- SEO Friendly: Optimized metadata and structure
- Framework: Next.js 16 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS + shadcn/ui
- Animations: Framer Motion
- Blog: Contentlayer + MDX
- State Management: Zustand
- Code Quality: ESLint + Prettier + Husky
- Deployment: Vercel
# Clone repository
git clone https://github.com/mylcin/terminal-portfolio.git
cd terminal-portfolio
# Install dependencies
npm install
# Setup Husky
npm run prepare
# Create environment file
cp .env.local.example .env.local
# Start development server
npm run devhelp # Display all available commands
echo # Print text to terminal
about # Learn more about me
experience # View work experience
projects # See my projects
skills # View technical skills
education # Display educational background
certifications # List certifications
contact # Get contact information
blog # Read blog posts
social # View social media links
resume # Download resume
clear # Clear terminal
ascii # Display ASCII art
mode [type] # Change mode (terminal/classic)
theme [type] # Change theme (dark/light)Blog posts are written in MDX and stored in content/blog/.
Create a new post:
# Create file: content/blog/my-post.mdx
---
title: "My Post Title"
description: "Post description"
date: "2024-01-01"
published: true
tags: ["nextjs", "react"]
author: 'Mustafa YalΓ§Δ±n'
---
Your content here...Edit configuration files in src/config/:
about.ts- About informationascii.ts- ASCII configurationcertifications.ts- Certificationscommands.ts- Terminal commandscontact.ts- Contact informationeducation.ts- Educationexperience.ts- Work experienceprojects.ts- Projectssite.ts- Site metadataskills.ts- Skills
Edit src/app/globals.css to change color scheme:
:root {
--primary: 222.2 47.4% 11.2%;
/* ... */
}npx shadcn@latest add [component-name]terminal-portfolio/
βββ content/ # Blog posts (MDX)
βββ public/ # Static files
βββ src/
β βββ app/ # Next.js app directory
β βββ components/ # React components
β β βββ blog/ # Blog components
β β βββ classic/ # Classic mode components
β β βββ shared/ # Shared components
β β βββ terminal/ # Terminal components
β β βββ ui/ # shadcn/ui components
β βββ config/ # Configuration files
β βββ lib/ # Utilities
β βββ store/ # Zustand stores
β βββ types/ # TypeScript types
βββ .contentlayer/ # Generated by Contentlayer
βββ ...
Set these in your Vercel dashboard:
NEXT_PUBLIC_SITE_URL='localhost:3000'npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm run lint:fix # Fix ESLint errors
npm run format # Format with Prettier
npm run type-check # Check TypeScript types- Use functional components with hooks
- Follow ESLint and Prettier rules
- Write meaningful commit messages
- Keep components small and focused
- Use TypeScript strictly
# Commits are automatically linted via Husky
git add .
git commit -m "feat: add new feature"
git push- Define command in
src/config/commands.ts - Implement handler in
src/lib/commands.ts - Update types if needed
- Create component in
src/components/classic/ - Add to
src/app/page.tsx - Style with Tailwind CSS
Contributions are welcome! Please feel free to submit a Pull Request. βοΈ If you find this useful, please give it a star!
MIT License - feel free to use this project for your portfolio!
- Delete .contentlayer folder and run build again
- Use Webpack instead of Turbopack
rm -rf .contentlayer
npm run build- Ensure client-side only rendering for terminal
- Check
mountedstate in components
For issues or questions:
- Open an issue on GitHub
- Check existing documentation
- Review Next.js 16 documentation