A modern, responsive portfolio website built with React, TypeScript, and Tailwind CSS. This project features both a public portfolio showcase and an admin panel for content management, showcasing professional development skills with clean, maintainable code and modern web development practices.
- Modern Tech Stack: React 18, TypeScript, Tailwind CSS, Vite
- Dual Interface: Public portfolio view + Admin panel for content management
- Responsive Design: Mobile-first approach with beautiful UI
- Type Safety: Full TypeScript implementation for better development experience
- Component Architecture: Reusable, well-structured components
- Performance Optimized: Fast loading and smooth animations
- Accessibility: WCAG compliant with proper ARIA labels
- SEO Friendly: Semantic HTML and meta tags
- Modern UI/UX: Clean design with smooth interactions
- Content Management: Admin panel for easy portfolio updates
- Frontend Framework: React 18
- Language: TypeScript
- Styling: Tailwind CSS
- Build Tool: Vite
- Package Manager: npm
- Routing: React Router DOM
- Icons: Lucide React
- Testing: Vitest + React Testing Library
- Linting: ESLint
- Code Formatting: Prettier (recommended)
src/
├── components/ # Public portfolio components
│ ├── ui/ # Reusable UI components
│ │ ├── Button.tsx
│ │ ├── Icon.tsx
│ │ └── Section.tsx
│ ├── About.tsx # About section
│ ├── Contact.tsx # Contact form
│ ├── Footer.tsx # Footer component
│ ├── Header.tsx # Navigation header
│ ├── Hero.tsx # Hero section
│ ├── Projects.tsx # Projects showcase
│ └── Skills.tsx # Skills section
├── admin/ # Admin panel components
│ ├── AdminLayout.tsx # Admin layout wrapper
│ ├── Dashboard.tsx # Admin dashboard
│ ├── PersonalInfo.tsx # Personal info management
│ ├── Skills.tsx # Skills management
│ ├── Projects.tsx # Projects management
│ └── SocialLinks.tsx # Social links management
├── data/ # Static data
│ └── portfolio.ts # Portfolio information
├── types/ # TypeScript type definitions
│ └── index.ts
├── utils/ # Utility functions
│ └── helpers.ts
├── test/ # Test utilities and setup
│ ├── setup.ts # Test environment setup
│ └── test-utils.tsx # Custom test utilities
├── App.tsx # Main app component with routing
├── main.tsx # Entry point
└── index.css # Global styles
- Node.js (version 16 or higher)
- npm or yarn
-
Clone the repository
git clone <repository-url> cd portfolio
-
Install dependencies
npm install
-
Start the development server
npm run dev
-
Open your browser Navigate to
http://localhost:5173(Vite default port)
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLintnpm run type-check- Run TypeScript type checkingnpm test- Run tests in watch modenpm run test:run- Run tests oncenpm run test:ui- Run tests with UI interfacenpm run test:coverage- Run tests with coverage report
The main portfolio page showcasing:
- Hero section with personal introduction
- About section with bio and background
- Skills section with technical competencies
- Projects section with portfolio work
- Contact form for inquiries
- Footer with social links
A comprehensive admin interface for managing portfolio content:
- Dashboard: Overview and quick actions
- Personal Info: Update name, title, bio, contact details
- Skills: Add, edit, and manage technical skills
- Projects: Manage portfolio projects with images and links
- Social Links: Configure social media and contact links
Update your personal information in src/data/portfolio.ts:
export const PERSONAL_INFO = {
name: 'Your Name',
title: 'Your Title',
email: 'your.email@example.com',
phone: '+1 (555) 123-4567',
location: 'Your City, Country',
bio: 'Your bio description...',
avatar: '/assets/avatar.jpg'
};Add your projects in the same file:
export const PROJECTS: Project[] = [
{
id: 1,
title: "Project Title",
description: "Project description...",
imageUrl: "/assets/projects/project.jpg",
category: "frontend",
technologies: ["React", "TypeScript"],
liveUrl: "https://project-url.com",
githubUrl: "https://github.com/username/project"
}
];Update your skills:
export const SKILLS: Skill[] = [
{
name: "React",
category: "frontend",
proficiency: 95,
icon: "/assets/icons/react.svg"
}
];The project uses Tailwind CSS with a custom color palette. You can modify colors in tailwind.config.js:
colors: {
primary: {
50: '#eff6ff',
500: '#3b82f6',
600: '#2563eb',
// ... more shades
}
}- Global styles are in
src/index.css - Component-specific styles use Tailwind CSS classes
- Custom animations and utilities are defined in the CSS file
The project uses Lucide React icons for consistency. You can import additional icons from the Lucide library:
import { Github, Linkedin, Mail } from 'lucide-react';The website is fully responsive with breakpoints:
- Mobile: < 768px
- Tablet: 768px - 1024px
- Desktop: > 1024px
- Semantic HTML structure
- Proper ARIA labels
- Keyboard navigation support
- Focus management
- Color contrast compliance
- Screen reader friendly
The project includes comprehensive unit tests using Vitest and React Testing Library:
- Unit Tests: Individual component and function tests
- Integration Tests: Component interaction tests
- Utility Tests: Helper function validation
- Admin Tests: Admin panel functionality tests
- Components: All UI components are tested for rendering and interactions
- Utilities: Helper functions have comprehensive test coverage
- Forms: Form validation and submission logic is thoroughly tested
- Routing: App routing and navigation is tested
- Admin Panel: All admin functionality is tested
# Run tests in watch mode
npm test
# Run tests once
npm run test:run
# Run tests with UI
npm run test:ui
# Run tests with coverage
npm run test:coverage- Component tests:
src/components/__tests__/ - Admin tests:
src/admin/__tests__/ - Utility tests:
src/utils/__tests__/ - App tests:
src/__tests__/ - Test utilities:
src/test/
The admin panel provides a user-friendly interface for:
- Real-time Updates: Instant preview of changes
- Form Validation: Built-in validation for all inputs
- Image Management: Easy upload and management of project images
- Drag & Drop: Intuitive reordering of skills and projects
- Responsive Design: Works seamlessly on all devices
npm run build- Install Vercel CLI:
npm i -g vercel - Run:
vercel - Follow the prompts
- Build the project:
npm run build - Upload the
distfolder to Netlify - Configure build settings if needed
- Add to
package.json:{ "homepage": "https://username.github.io/repo-name", "scripts": { "predeploy": "npm run build", "deploy": "gh-pages -d dist" } } - Install gh-pages:
npm install --save-dev gh-pages - Deploy:
npm run deploy
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Commit your changes:
git commit -am 'Add feature' - Push to the branch:
git push origin feature-name - Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
- React - UI library
- TypeScript - Type safety
- Tailwind CSS - Styling framework
- Vite - Build tool
- React Router - Client-side routing
- Lucide React - Icon library
If you have any questions or need help, feel free to:
- Open an issue on GitHub
- Contact me at [your-email@example.com]