A modern, responsive portfolio website built with React showcasing my work, skills, and experience as a Full Stack Developer.
- React 18, TypeScript, Styled Components, Framer Motion
- React Icons, EmailJS, React Hot Toast
src/
├── animations/ # Animation components (Framer Motion)
│ └── fadeInAnimation.tsx
├── components/ # React components
│ ├── ui/ # Reusable UI components
│ │ ├── index.ts # Centralized UI exports
│ │ ├── Button/ # Button component
│ │ ├── Heading/ # Heading component
│ │ ├── Input/ # Input component
│ │ ├── Loaders/ # Loading spinner components
│ │ ├── MenuBar/ # Menu bar component
│ │ ├── Paragraph/ # Paragraph component
│ │ ├── Section/ # Section wrapper component
│ │ └── Icons/ # Icon exports
│ ├── About/ # About section component
│ ├── Contact/ # Contact form component
│ ├── Education/ # Education section component
│ ├── Footer/ # Footer component
│ ├── GitHub/ # GitHub profile component
│ ├── Home/ # Home/hero section component
│ ├── Introduction/ # Introduction section component
│ ├── Navigation/ # Navigation bar component
│ ├── Projects/ # Projects showcase component
│ ├── Repo/ # Repository card component
│ ├── Repository/ # Repository list component
│ ├── Skills/ # Skills section component
│ └── SocialLinks/ # Social media links component
├── config/ # Configuration files
│ └── env.ts # Environment configuration
├── constants/ # All constants and data
│ ├── index.ts # Centralized exports
│ ├── profileData.tsx # Profile information
│ ├── navigationConstants.ts
│ ├── animationsConstants.ts
│ ├── emailConstants.ts
│ ├── apiConstants.ts
│ ├── colors.ts
│ ├── errorMessages.ts
│ ├── toastConstants.ts
│ └── README.md
├── hooks/ # Custom React hooks
│ ├── index.ts # Centralized hook exports
│ ├── useFetchData.ts # Data fetching hook
│ └── useNetworkStatus.ts
├── lib/ # Third-party library configurations
│ ├── axios.ts # Axios instance configuration
│ ├── emailjs.ts # EmailJS initialization
│ └── framer-motion.ts # Framer Motion utilities
├── services/ # API services & external integrations
│ ├── index.ts # Centralized service exports
│ ├── api/ # API services
│ │ ├── index.ts
│ │ └── github.service.ts
│ └── email/ # Email services
│ ├── index.ts
│ └── emailjs.service.ts
├── styles/ # Global CSS styles
│ ├── globalStyles.css
│ └── cssVariables.css
├── types/ # TypeScript type definitions
│ ├── profile.ts
│ └── github.ts
├── templates/ # Email templates
│ └── email-template.html # EmailJS HTML email template
├── react-icons.d.ts # TypeScript declarations for react-icons
└── react-app-env.d.ts # React app type declarations
This portfolio can also be used as a template. Follow these steps to set up and customize it for your own use:
git clone https://github.com/manikantaPitla/personal-portfolio.git
cd personal-portfolioRemove the existing git history to start your own repository:
On Windows (PowerShell):
Remove-Item -Path .git -Recurse -ForceOn macOS/Linux:
rm -rf .gitThen initialize your own git repository:
git init
git add .
git commit -m "Initial commit"npm installCreate a .env file in the root directory and add your API keys:
# Create .env file
touch .envAdd the following environment variables to your .env file:
REACT_APP_GITHUB_TOKEN=your_github_token_here
REACT_APP_SERVICE_ID=your_emailjs_service_id
REACT_APP_TEMPLATE_ID=your_emailjs_template_id
REACT_APP_PUBLIC_KEY=your_emailjs_public_keyNote:
- GitHub token is required for the GitHub section to work properly
- EmailJS credentials are required for the contact form to work
- See Environment Variables section for detailed setup instructions
Open src/constants/profileData.tsx and update:
- Personal information (name, email, description)
- Profile image URL
- Skills and technologies
- Education details
- Projects portfolio
- Social media links
- GitHub username/URL
- Global styles:
src/styles/globalStyles.css - CSS variables:
src/styles/cssVariables.css - Color scheme:
src/constants/colors.ts
npm startThe application will open at http://localhost:3000
- Go to GitHub Settings > Developer settings > Personal access tokens
- Generate a new token with
public_reposcope - Add to
.env:REACT_APP_GITHUB_TOKEN=your_token_here
Why? The GitHub section requires a token to fetch your profile and repositories. Without a token, GitHub API has strict rate limits (60 requests/hour) and the GitHub section may not work properly.
- Sign up at EmailJS
- Create an email service (Gmail)
- Create an email template:
- Copy the HTML from
templates/email-template.html - In EmailJS dashboard, go to Email Templates > Create New Template (or open existing template)
- Click Edit Content > Code Editor
- Paste the copied HTML code
- Click Save
- Copy the HTML from
- Get your Service ID, Template ID, and Public Key
- Add to
.env:REACT_APP_SERVICE_ID=your_service_id REACT_APP_TEMPLATE_ID=your_template_id REACT_APP_PUBLIC_KEY=your_public_key
Note: The contact form will not work without these credentials. The email template in templates/email-template.html matches the portfolio's dark theme and can be customized as needed.
Edit src/constants/profileData.tsx to customize:
- Personal Details: Name, email, description, resume link
- About Section: Profile image URL, bio paragraphs
- Skills: Add/remove skills and their icons
- Education: Update education history
- Projects: Add your projects with images, links, and descriptions
- Contact Links: Update social media and contact URLs
- GitHub: Set your GitHub username/API URL
-
Color Scheme: Edit
src/constants/colors.ts- Primary colors, accent colors, language colors
- Update the
accent.glowcolor to change the theme
-
CSS Variables: Edit
src/styles/cssVariables.css- Font sizes, spacing, border radius, etc.
-
Global Styles: Edit
src/styles/globalStyles.css- Base styles, animations, scrollbar styling
- Create a new component in
src/components/YourSection/ - Add the section to
src/components/Home/index.tsx - Update navigation in
src/constants/navigationConstants.ts
- Animation variants:
src/constants/animationsConstants.ts - Animation wrapper:
src/animations/fadeInAnimation.tsx
- Email: pitlamanikanta81@gmail.com
- LinkedIn: manikantapitla
- GitHub: manikantaPitla