A modern, responsive portfolio website with a dynamic work section powered by Firebase Firestore and Authentication.
- Responsive Design: Fully responsive on all devices (mobile, tablet, desktop)
- Modern UI: Glassmorphism effects, smooth animations, and micro-interactions
- Firebase Integration: Real-time project data from Firestore
- Admin Panel: Secure dashboard for managing projects
- Search & Filter: Dynamic project filtering and search functionality
- Contact Form: Web3Forms integration with comprehensive validation and spam protection
- Image Hosting: Flexible image hosting using any free service (ImgBB, Imgur, etc.)
- Hardened Security: Production-ready Firestore rules with field-level validation
- No Cost: Completely free to run (Firebase free tier + free image hosting + Web3Forms free tier)
- A Google account (for Firebase)
- Basic knowledge of HTML/CSS/JavaScript
- A code editor (VS Code, Sublime Text, etc.)
- A web browser
Follow the detailed Firebase Setup Guide to:
- Create a Firebase project
- Set up Firestore database
- Enable Authentication
- Get your Firebase configuration
Your Firebase configuration is already set up in js/firebase-config.js. This file is gitignored for security.
Important: Never commit js/firebase-config.js to GitHub!
- Go to Web3Forms
- Sign up for a free account
- Create a new form and get your access key
- Update the access key in
contact.html(line 142):<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY_HERE">
Copy the rules from firestore.rules and paste them in your Firebase Console:
- Go to Firebase Console β Firestore Database β Rules
- Paste the rules from
firestore.rules - Click "Publish"
Security Features & Scope:
- Field-level schema validation for all project data (
isValidProjectData(),isValidTitle()) - Category whitelist enforcement and URL structure checks
- Authentication check: write and delete operations restricted to
request.auth != null - Note on Security Scope: These rules establish standard production schema boundaries against unauthorized web writes; code-level review does not constitute an enterprise-certified penetration test.
- Quota Considerations: Built on Firebase Spark (free tier); adheres to Google's 50,000 reads/day quota ceiling.
- Go to Firebase Console β Authentication
- Click "Add user"
- Enter your email and password
- This will be your admin login
- Open
work.htmlin your browser - You should see the work section (empty initially)
- Open
admin.htmlto access the admin panel - Log in with your Firebase credentials
- Add your first project!
- Test the contact form at
contact.html
Portfolio/
βββ index.html # Homepage
βββ work.html # Work section (redesigned with Firebase)
βββ admin.html # Admin panel
βββ contact.html # Contact page
βββ services.html # Services page
βββ resume.html # Resume page
βββ css/
β βββ style.css # Global styles
β βββ header.css # Header styles
β βββ work.css # Work section styles (redesigned)
β βββ contact.css # Contact page styles
β βββ admin.css # Admin panel styles
βββ js/
β βββ firebase-config.js # Firebase configuration (gitignored)
β βββ firebase-config.example.js # Template
β βββ work.js # Work section logic (redesigned)
β βββ admin.js # Admin panel logic
β βββ contact.js # Contact form logic with Web3Forms
β βββ header.js # Header navigation
βββ firestore.rules # Firestore security rules
βββ .gitignore # Git ignore file
βββ README.md # This file
- Search: Search projects by title, description, or technology
- Filter: Filter by category (Web Apps, AI/ML, Analytics, Collaboration)
- Responsive Grid: Beautiful card layout that adapts to all screen sizes
- Smooth Animations: GSAP-powered scroll animations
- Loading States: Skeleton loaders while data loads
- Error Handling: Graceful error messages if something goes wrong
- Secure Login: Firebase Authentication
- Add Projects: Create new projects with all details
- Edit Projects: Update existing projects
- Delete Projects: Remove projects
- Image URLs: Paste any public image link (no upload needed!)
- Real-time Updates: Changes appear instantly on the work page
- No Backend Required: Form submissions handled by Web3Forms API
- Email Notifications: Receive submissions directly to your email
- Spam Protection: Honeypot field and built-in rate limiting
- Comprehensive Validation:
- Name validation (minimum 2 characters)
- Email format validation
- Message length validation (minimum 10 characters)
- Service selection required
- User Feedback: Success/error notifications with visual feedback
- Loading States: Animated spinner during submission
- Form Reset: Automatic form clearing after successful submission
-
Get Web3Forms Access Key:
- Visit web3forms.com
- Sign up for free (no credit card required)
- Create a new form
- Copy your access key
-
Update contact.html:
- Open
contact.html - Find line 142:
<input type="hidden" name="access_key" value="..."> - Replace with your access key
- Open
-
Configure Email Settings (Optional):
- Log in to Web3Forms dashboard
- Set custom subject lines
- Add CC/BCC recipients
- Enable/disable notifications
-
Test the Form:
- Open
contact.htmlin browser - Fill out all fields
- Submit and check your email
- Open
You can use any free image hosting service:
-
ImgBB (Easiest)
- Visit: https://imgbb.com/
- Upload image β Copy "Direct link"
- Paste in admin panel
-
Imgur
- Visit: https://imgur.com/
- Upload β Right-click β "Copy image address"
-
Cloudinary (Professional)
- Sign up: https://cloudinary.com/
- 25GB free storage + bandwidth
-
GitHub (For developers)
- Add images to
/images/projects/ - Use GitHub Pages URL
- Add images to
- Hardened Firestore Rules: Production-ready security with comprehensive validation
- Public read access for portfolio display
- Authenticated write access only (prevents unauthorized modifications)
- Field-level validation (type checking, length limits, format validation)
- Category whitelist enforcement (
web,ai,analytics,collaboration) - URL format validation for all image and project links
- Array size limits to prevent DoS attacks
- Explicit denial of extra fields and unauthorized collections
- Authentication: Firebase Authentication for admin panel access
- Protected Configuration: Firebase config is gitignored and never committed
- Web3Forms Integration: Secure form submission without backend code
- Spam Protection: Honeypot field for bot detection
- Client-side Validation:
- Name: minimum 2 characters
- Email: proper format validation
- Message: minimum 10 characters
- Service selection required
- Rate Limiting: Built-in Web3Forms protection
- No Database Exposure: Form submissions go directly to email
Even if someone copies your entire GitHub repository, they cannot:
- Modify your Firestore database (authentication required)
- Add fake projects (strict validation rules)
- Delete or corrupt data (admin authentication required)
- Access your Firebase project (config is gitignored)
- Spam your contact form (honeypot + validation)
- Push your code to GitHub (firebase-config.js is gitignored)
- Go to repository Settings β Pages
- Select branch and folder
- Your site will be live at
https://yourusername.github.io/portfolio
Important: You'll need to manually upload firebase-config.js to your hosting or use environment variables.
- Netlify: Drag and drop your folder
- Vercel: Connect your GitHub repo
- Firebase Hosting:
firebase deploy
- Open
admin.htmlin your browser - Log in with your Firebase credentials
- Click "Add New Project"
- Fill in the form:
- Title: Project name
- Category: Select category
- Description: Brief description
- Image URL: Paste public image link
- Technologies: Comma-separated (e.g., "React, Node.js, MongoDB")
- GitHub URL: Link to repo (optional)
- Live URL: Link to demo (optional)
- Order: Display order (1, 2, 3...)
- Featured: Check if featured project
- Click "Save Project"
- View it on
work.html!
- Check browser console for errors
- Verify Firebase config is correct
- Ensure Firestore rules are deployed
- Verify user exists in Firebase Console β Authentication
- Check email/password are correct
- Clear browser cache
- Verify image URL is publicly accessible
- Test URL in new browser tab
- Use direct image links (not webpage links)
- Verify Web3Forms access key is correct
- Check browser console for errors
- Ensure all required fields are filled
- Test with a different email address
- Check spam folder for confirmation emails
- Firebase Setup Guide - Complete beginner-friendly setup
- Implementation Plan - Technical details
- Web3Forms contact form integration
- Hardened Firebase security rules
- Comprehensive form validation
- Project categories management
- Bulk import/export
- Image optimization
- Analytics dashboard
- Multi-language support
- Dark/light theme toggle
This is a personal portfolio project, but feel free to fork and customize for your own use!
MIT License - feel free to use this for your own portfolio!
- Optimize Images: Use TinyPNG.com to compress images before uploading
- Backup Data: Regularly export your Firestore data
- Monitor Usage: Check Firebase Console for usage stats
- Test Responsively: Always test on mobile, tablet, and desktop
- Contact Form Testing: Test with different email providers to ensure delivery
- Security: Never commit
firebase-config.jsto version control - Performance: Use browser DevTools to monitor load times
- SEO: Update meta tags and descriptions for better search visibility
- Check the Firebase Setup Guide
- Review browser console for errors
- Verify Firebase Console settings
- Check Firestore rules are deployed
Built with β€οΈ using Firebase, Web3Forms, HTML, CSS, and JavaScript