Skip to content

mylcin/terminal-portfolio

Repository files navigation

Terminal Portfolio

A modern, interactive developer portfolio with a unique terminal interface and classic view mode.

πŸš€ Features

  • 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

πŸ› οΈ Tech Stack

  • 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

πŸ“¦ Installation

# 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 dev

Open http://localhost:3000

🎯 Terminal Commands

help              # 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

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...

🎨 Customization

1. Update Personal Info

Edit configuration files in src/config/:

  • about.ts - About information
  • ascii.ts - ASCII configuration
  • certifications.ts - Certifications
  • commands.ts - Terminal commands
  • contact.ts- Contact information
  • education.ts - Education
  • experience.ts - Work experience
  • projects.ts - Projects
  • site.ts - Site metadata
  • skills.ts - Skills

2. Customize Colors

Edit src/app/globals.css to change color scheme:

:root {
  --primary: 222.2 47.4% 11.2%;
  /* ... */
}

3. Add shadcn/ui Components

npx shadcn@latest add [component-name]

πŸ“‚ Project Structure

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
└── ...

πŸš€ Deployment

Environment Variables

Set these in your Vercel dashboard:

NEXT_PUBLIC_SITE_URL='localhost:3000'

πŸ”§ Scripts

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

πŸ“– Development Guidelines

Code Style

  • Use functional components with hooks
  • Follow ESLint and Prettier rules
  • Write meaningful commit messages
  • Keep components small and focused
  • Use TypeScript strictly

Git Workflow

# Commits are automatically linted via Husky
git add .
git commit -m "feat: add new feature"
git push

Adding New Commands

  1. Define command in src/config/commands.ts
  2. Implement handler in src/lib/commands.ts
  3. Update types if needed

Adding New Sections

  1. Create component in src/components/classic/
  2. Add to src/app/page.tsx
  3. Style with Tailwind CSS

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request. ⭐️ If you find this useful, please give it a star!

πŸ“„ License

MIT License - feel free to use this project for your portfolio!

Troubleshooting

Issue: Contentlayer build fails

  • Delete .contentlayer folder and run build again
  • Use Webpack instead of Turbopack
rm -rf .contentlayer
npm run build

Issue: Zustand hydration mismatch

  • Ensure client-side only rendering for terminal
  • Check mounted state in components

Support

For issues or questions:

  • Open an issue on GitHub
  • Check existing documentation
  • Review Next.js 16 documentation

About

A hybrid terminal-style portfolio with classic web interface, allowing access to all sections via terminal or web.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors