A modern, feature-rich portfolio website built with React, TypeScript, and Supabase. This project showcases a complete personal portfolio with admin panel, database integration, and beautiful animations.
- Modern Design: Apple-level design aesthetics with glassmorphism effects
- Responsive Layout: Optimized for all devices (mobile, tablet, desktop)
- Advanced Animations: Framer Motion animations with 120Hz-like smoothness
- Interactive Elements: 3D profile cards, liquid ether background, scroll animations
- Performance Optimized: Lazy loading, image optimization, smooth scrolling
- Admin Dashboard: Complete CMS for managing all portfolio content
- Profile Management: Personal information, bio, contact details
- Project Showcase: Featured projects with technologies, demos, and descriptions
- Work Experience: Timeline view of professional experience
- Education: Academic background and achievements
- Certificates: Professional certifications and awards
- Travel Experiences: Interactive world map with travel stories
- Events & Volunteering: Community involvement and activities
- Research Papers: Academic publications and research work
- Media Coverage: Press mentions and articles
- Social Links: Customizable social media links
- Database Integration: Supabase for data storage and authentication
- File Management: Image upload and media file management
- SEO Optimization: Meta tags, structured data, analytics integration
- Theme Customization: Color schemes, fonts, and layout options
- Performance Settings: Optimization controls for better loading
- Backup & Export: Data export and import functionality
- React 18 - Modern React with hooks and concurrent features
- TypeScript - Type-safe development
- Vite - Fast build tool and development server
- Tailwind CSS - Utility-first CSS framework
- Framer Motion - Advanced animations and gestures
- React Router - Client-side routing
- Lucide React - Beautiful icons
- Supabase - Backend-as-a-Service with PostgreSQL
- Row Level Security - Secure data access policies
- Real-time subscriptions - Live data updates
- Authentication - Email/password authentication
- Three.js - 3D graphics and effects
- React Simple Maps - Interactive world map
- React Hook Form - Form management
- React Hot Toast - Notifications
- React Dropzone - File upload handling
- Node.js 18+
- npm or yarn
- Supabase account (optional - demo data available)
git clone https://github.com/yourusername/portfolio-website.git
cd portfolio-websitenpm installIf you want to use Supabase for data persistence:
- Create a Supabase project at supabase.com
- Copy
.env.exampleto.env - Add your Supabase credentials:
VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_keyThe project includes migration files that will automatically create the required database schema:
# Migrations are located in supabase/migrations/
# They will be applied automatically when you set up Supabasenpm run devVisit http://localhost:5173 to see your portfolio!
src/
βββ components/
β βββ admin/ # Admin panel components
β β βββ AdminLayout.tsx
β β βββ ProfileManager.tsx
β β βββ ProjectManager.tsx
β β βββ AboutManager.tsx
β β βββ ...
β βββ sections/ # Portfolio sections
β β βββ HeroSection.tsx
β β βββ AboutSection.tsx
β β βββ ProjectsSection.tsx
β β βββ ...
β βββ ui/ # Reusable UI components
β β βββ BlurText.tsx
β β βββ Timeline.tsx
β β βββ ProfileCard.tsx
β β βββ ...
β βββ Navigation.tsx
βββ hooks/ # Custom React hooks
β βββ useAuth.ts
βββ lib/ # Utilities and configurations
β βββ supabase.ts
βββ pages/ # Main pages
β βββ Portfolio.tsx
β βββ AdminLogin.tsx
β βββ AdminDashboard.tsx
βββ types/ # TypeScript type definitions
β βββ index.ts
βββ main.tsx
- Navigate through sections using the sidebar navigation
- Click on projects to view details and live demos
- Explore the interactive travel map
- View certificates and achievements
- Check out research papers and media coverage
- Go to
/adminor/access - Sign in with your credentials
- Use the admin dashboard to manage all content
- Create a new component in
src/components/sections/ - Add the section to
Portfolio.tsx - Update navigation in
Navigation.tsx - Create corresponding admin manager if needed
The project uses the following main tables:
profiles- Personal informationprojects- Portfolio projectswork_experience- Professional experienceeducation- Academic backgroundcertificates- Certifications and awardstravel_experiences- Travel storiesevents_volunteering- Events and volunteer workresearch_papers- Academic publicationsmedia_coverage- Press mentionssocial_links- Social media links
# Supabase Configuration (Optional)
VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_keyThe portfolio works without Supabase configuration by using demo data. This allows you to:
- Preview the design and functionality
- Test the user interface
- Understand the data structure
- Develop new features
Access the admin panel β Customization to modify:
- Color schemes (primary, secondary, accent)
- Background styles (gradient, solid, pattern)
- Font families
- Animation speeds
- Visual effects (particles, glassmorphism)
Configure performance optimizations:
- Lazy loading
- Image optimization
- Caching strategies
- Mobile animation reduction
Optimize for search engines:
- Meta titles and descriptions
- Open Graph tags
- Twitter cards
- Analytics integration
- Structured data
We welcome contributions! Here's how to get started:
- Check existing issues first
- Create a detailed issue with:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
- Environment details (OS, browser, Node version)
- Fork the repository
- Clone your fork:
git clone https://github.com/yourusername/portfolio-website.git cd portfolio-website - Create a feature branch:
git checkout -b feature/your-feature-name
- Install dependencies:
npm install
- Start development server:
npm run dev
- One component per file - Keep files focused and under 300 lines
- Logical grouping - Use directories for related components
- Clear naming - Use descriptive, kebab-case file names
- Proper imports - Use absolute imports with path aliases
- TypeScript - Use strict typing for all components
- Functional Components - Use React hooks instead of class components
- Consistent formatting - Follow the existing code style
- Comments - Add JSDoc comments for complex functions
// 1. Imports (external libraries first, then internal)
import React, { useState, useEffect } from 'react';
import { motion } from 'framer-motion';
import { Icon } from 'lucide-react';
import { ComponentType } from '../types';
// 2. Interface definitions
interface ComponentProps {
prop1: string;
prop2?: number;
}
// 3. Component implementation
const Component: React.FC<ComponentProps> = ({ prop1, prop2 }) => {
// 4. State and hooks
const [state, setState] = useState<Type>(initialValue);
// 5. Effects
useEffect(() => {
// Effect logic
}, [dependencies]);
// 6. Event handlers
const handleEvent = () => {
// Handler logic
};
// 7. Render
return (
<div>
{/* Component JSX */}
</div>
);
};
export default Component;- Create migration file in
supabase/migrations/ - Include comprehensive comments explaining changes
- Enable Row Level Security (RLS)
- Add appropriate policies
- Create indexes for performance
- Update TypeScript types in
src/types/index.ts
/*
# Add new feature table
1. New Tables
- `new_table`
- `id` (uuid, primary key)
- `title` (text, required)
- `created_at` (timestamp)
2. Security
- Enable RLS on `new_table`
- Add policies for authenticated users
*/
CREATE TABLE IF NOT EXISTS new_table (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
title text NOT NULL DEFAULT '',
created_at timestamptz DEFAULT now()
);
ALTER TABLE new_table ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Allow authenticated users to manage new_table"
ON new_table
FOR ALL
TO authenticated
USING (true)
WITH CHECK (true);
CREATE POLICY "Allow public read access to new_table"
ON new_table
FOR SELECT
TO public
USING (true);- Apple-level aesthetics - Clean, sophisticated, attention to detail
- Accessibility first - WCAG 2.1 AA compliance
- Mobile-first - Responsive design for all screen sizes
- Performance focused - Smooth 60fps+ animations
- Consistent spacing - 8px grid system
- Meaningful motion - Animations should enhance UX, not distract
- Performance optimized - Use
transformandopacityfor animations - Reduced motion support - Respect user preferences
- Staggered animations - Create visual hierarchy with timing
- Test all features - Ensure nothing is broken
- Check responsiveness - Test on different screen sizes
- Verify accessibility - Use screen readers and keyboard navigation
- Performance audit - Run Lighthouse tests
- Cross-browser testing - Test in Chrome, Firefox, Safari
# Lint code
npm run lint
# Build for production
npm run build
# Preview production build
npm run preview- Update documentation - Include README updates if needed
- Add changeset - Describe what changed and why
- Include screenshots - For UI changes
- Test thoroughly - Ensure all functionality works
- Write clear commit messages:
feat: add new certificate management feature - Add certificate upload functionality - Implement expiry date tracking - Add certificate verification links - Update admin panel with certificate manager
feat:- New featuresfix:- Bug fixesdocs:- Documentation updatesstyle:- Code formatting changesrefactor:- Code refactoringperf:- Performance improvementstest:- Adding or updating tests
- Check existing issues - Avoid duplicates
- Provide detailed description:
- What problem does it solve?
- How should it work?
- Who would benefit?
- Any design considerations?
- Include mockups - Visual representations help
- Consider implementation - Technical feasibility
- π΄ Critical - Security issues, major bugs
- π‘ High - Important features, performance issues
- π’ Medium - Nice-to-have features, minor improvements
- π΅ Low - Documentation, code cleanup
interface Profile {
id: string;
name: string;
title: string;
bio: string;
email: string;
phone?: string;
location: string;
date_of_birth?: string;
profile_image?: string;
resume_url?: string;
}interface Project {
id: string;
title: string;
description: string;
long_description?: string;
image_url?: string;
demo_url?: string;
github_url?: string;
technologies: string[];
featured: boolean;
order_index: number;
}[View complete type definitions in src/types/index.ts]
npm run build- Connect your GitHub repository to Vercel
- Add environment variables in Vercel dashboard
- Deploy automatically on push to main branch
- Build the project:
npm run build - Upload the
distfolder to Netlify - Configure environment variables
- Build the project:
npm run build - Serve the
distfolder with any static file server - Configure your web server for SPA routing
- Email/password authentication via Supabase Auth
- Row Level Security (RLS) policies protect data
- Admin-only access to management features
- All sensitive data is protected by RLS policies
- File uploads are validated and sanitized
- SQL injection protection through Supabase
- Code splitting - Lazy loading of components
- Image optimization - WebP format, responsive images
- Bundle optimization - Tree shaking, minification
- Caching strategies - Browser and CDN caching
- Performance monitoring - Lighthouse integration
- Lighthouse Score: 95+ across all categories
- First Contentful Paint: < 1.5s
- Largest Contentful Paint: < 2.5s
- Cumulative Layout Shift: < 0.1
# Check environment variables
echo $VITE_SUPABASE_URL
echo $VITE_SUPABASE_ANON_KEY
# Verify Supabase project is active
# Check RLS policies are properly configured# Clear cache and reinstall
rm -rf node_modules package-lock.json
npm install
# Check TypeScript errors
npm run build# Analyze bundle size
npm run build
npx vite-bundle-analyzer dist
# Check for memory leaks
# Use React DevTools Profiler- Check the documentation - Most issues are covered here
- Search existing issues - Someone might have faced the same problem
- Create a new issue - Provide detailed information
- Join discussions - Participate in community discussions
This project is licensed under the MIT License - see the LICENSE file for details.
- Design Inspiration: Apple's design philosophy and modern web trends
- Icons: Lucide React for beautiful icons
- Images: Pexels for stock photography
- Animations: Framer Motion for smooth animations
- Backend: Supabase for database and authentication
- GitHub Discussions - Ask questions and share ideas
- Issues - Report bugs and request features
- Pull Requests - Contribute code improvements
For professional support, custom development, or consulting:
- Email: [your-email@example.com]
- LinkedIn: [Your LinkedIn Profile]
- Website: [Your Website]
- Clone the repository
- Install dependencies (
npm install) - Start development server (
npm run dev) - Access admin panel at
/admin - Customize your content
- Deploy to your preferred platform
- Read the contribution guidelines
- Set up development environment
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
- Review pull requests
- Update documentation
- Manage releases
- Monitor performance
- Respond to issues
Made with β€οΈ by HM Alvee Hasan
Star β this repository if you found it helpful!