A modern, professional portfolio built with React, Vite, and Tailwind CSS. Converted from a single-file Babel/React app into a maintainable, modular structure.
portfolio-react/
βββ src/
β βββ components/
β β βββ Navigation.jsx # Navigation bar component
β β βββ HomeView.jsx # Hero + skills + projects + testimonials section
β β βββ AllProjectsView.jsx # Full projects grid
β β βββ AllSkillsView.jsx # Full skills grid
β β βββ ProjectDetailView.jsx # Individual project detail page
β β βββ SkillDetailView.jsx # Individual skill category detail
β β βββ LoginView.jsx # Login form
β β βββ Dashboard.jsx # Admin/Guest dashboard with services, meetings, support
β β βββ HangingCard.jsx # Reusable hanging card animation
β β βββ Toast.jsx # Toast notification component
β βββ data/
β β βββ defaults.js # All default data (profile, projects, skills, etc.)
β β βββ iconMap.js # Lucide icon mapping system
β βββ App.jsx # Main app component
β βββ main.jsx # React entry point
β βββ index.css # Global styles and animations
βββ index.html # HTML template
βββ package.json # Dependencies and scripts
βββ vite.config.js # Vite configuration
βββ tailwind.config.js # Tailwind CSS configuration
βββ postcss.config.js # PostCSS configuration for Tailwind
βββ README.md # This file
- Node.js 16+ and npm/yarn installed
-
Install dependencies:
npm install
-
Start development server:
npm run dev
Server runs on
http://localhost:5173 -
Build for production:
npm run build
-
Preview production build:
npm run preview
- Responsive Design: Mobile-first approach with Tailwind CSS
- Modular Components: Each view is isolated in its own file
- Data-Driven: All content in
data/defaults.jsfor easy customization - Glass Morphism UI: Modern frosted glass aesthetic
- Smooth Animations: Hanging cards, floating elements, fade-ins
- Admin Dashboard: Full CRUD operations for profile, projects, services, testimonials
- Meeting & Support System: Built-in scheduling and ticket management
- Firebase Authentication: Login, Sign Up, and Forgot Password flows
- Role Resolution: Custom claim
admin: trueor fallback env allowlist
- Copy env template:
cp .env.example .env.local
- Fill all
VITE_FIREBASE_*keys in.env.local. - (Optional) Set
VITE_ADMIN_EMAILSas a comma-separated fallback admin allowlist. - In Firebase Console, enable
AuthenticationβSign-in methodβEmail/PasswordandGoogle. - Create users in
AuthenticationβUsers, or sign up from the app.
- If Firebase custom claim
admin: trueexists, user is admin. - Otherwise, if email exists in
VITE_ADMIN_EMAILS, user is admin. - All other authenticated users are standard users.
- Login: Sign in with Firebase email/password
- Continue with Google: Popup-based Google sign-in
- Sign Up: Create a new account
- Forgot: Send password reset email
Edit src/data/defaults.js β DEFAULT_PROFILE
Edit src/data/defaults.js β DEFAULT_PROJECTS array
Edit src/data/defaults.js β DEFAULT_SKILLS array
Edit src/data/defaults.js β DEFAULT_SERVICES array
Modify Tailwind config in tailwind.config.js or src/index.css
Add/modify imports in src/data/iconMap.js (uses lucide-react)
Displays hero section with skills, projects, education, testimonials, and contact.
<HomeView
profile={profile}
skills={skills}
projects={projects}
education={education}
testimonials={testimonials}
navigate={navigate}
/>Admin/guest portal for managing content and viewing analytics.
<Dashboard
user={appUser}
profile={profile}
skills={skills}
projects={projects}
education={education}
testimonials={testimonials}
meetings={meetings}
support={support}
services={services}
saveData={saveData}
onLogout={handleLogout}
/>npm install -g vercel
vercel deploynpm install -g netlify-cli
netlify deploy --prod --dir=distUpdate vite.config.js:
export default {
base: '/portfolio-react/',
// ... other config
}Then deploy dist/ folder to GitHub Pages.
This project is open source and available under the MIT license.
Feel free to fork and submit PRs for improvements!
Built with β€οΈ using React, Vite, and Tailwind CSS