A comprehensive, interactive portfolio showcasing 165 web development projects with advanced features including search, filtering, bookmarks, analytics, and more.
- Features
- Quick Start
- Project Structure
- Architecture
- Project Breakdown
- React Projects
- Keyboard Shortcuts
- Analytics
- Technology Stack
- Deployment
- Adding Projects
- Environment Variables
- Testing
- Troubleshooting
- License
- π Smart Search - Real-time fuzzy search across all projects with instant results
- π·οΈ Category Filters - Filter by HTML, CSS, JavaScript, Python, React
- π± Fully Responsive - Optimized for mobile, tablet, and desktop
- π Dark Mode - Seamless light/dark theme toggle with persistence
- π¨ Syntax Highlighting - Beautiful code display powered by Prism.js
- β¨οΈ Keyboard Shortcuts - Navigate efficiently with keyboard commands
- π Bookmarks System - Save and manage favorite projects (localStorage)
- π Analytics Dashboard - Track views, searches, and usage patterns
- π¬ Toast Notifications - User-friendly feedback for all actions
- π One-Click Copy - Copy code to clipboard instantly
- π Multi-File Support - View multiple files per project with tabs
- π― Live Preview - Interactive iframe previews for web projects
- βοΈ React Projects - All React experiments fully bundled and live-previewed via iframe
- Node.js 18+ installed
- npm or yarn package manager
# Clone the repository
git clone https://github.com/SENODROOM/Responsive-Web-Design-Certification.git
cd Responsive-Web-Design-Certification/frontend
# Install dependencies
npm install
# Start development server
npm run devOpen http://localhost:3000 in your browser.
The backend provides API endpoints for persistent bookmarks and analytics. The frontend works fully without it using localStorage.
# Navigate to backend directory
cd backend
# Install dependencies
npm install
# Create environment file
cp .env.example .env
# Edit .env with your MongoDB URI
# MONGODB_URI=your_mongodb_connection_string
# Start backend server
npm run devBackend runs on http://localhost:5000
# From repo root β starts both frontend and backend concurrently
npm run dev:allsaad-web-experiments/
βββ frontend/ # Next.js Application
β βββ app/
β β βββ page.tsx # Main portfolio page
β β βββ layout.tsx # Root layout
β β βββ globals.css # Global styles
β β βββ api/ # Next.js API routes (proxy to backend)
β β βββ analytics/
β β βββ bookmarks/
β βββ public/
β β βββ projects.js # 165 projects data registry
β β βββ Home.css # Portfolio styles
β β βββ HTML/ # 22 HTML projects
β β βββ CSS/ # 35+ CSS projects
β β βββ Javascript/ # 60+ JavaScript projects
β β βββ React/ # 13 React projects (pre-built, iframe-ready)
β β βββ Python/ # 32+ Python projects
β β βββ Images/ # Assets
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ lib/ # Frontend utilities (analytics, storage, search)
β β βββ models/ # TypeScript types for API responses
β β βββ types/ # Shared TypeScript interfaces
β βββ package.json
βββ backend/ # Express.js API (Optional)
β βββ src/
β β βββ config/env.js # Environment loader
β β βββ lib/mongodb.js # MongoDB connection (single source of truth)
β β βββ models/ # Mongoose models
β β β βββ Analytics.js
β β β βββ Bookmark.js
β β βββ routes/ # Express route handlers
β β β βββ analytics.js
β β β βββ bookmarks.js
β β βββ server.js # Entry point
β βββ .env.example # Environment template (never commit .env)
β βββ package.json
βββ docs/ # Documentation
βββ tests/ # Root-level JS/TS tests (Vitest)
β βββ setup.js
β βββ utils.test.js
β βββ fuzzySearch.test.js
β βββ storage.test.js
β βββ analytics.test.js
βββ scripts/ # Dev utilities
β βββ generate-projects.js
β βββ verify-setup.js
βββ README.md
βββ LICENSE
βββ package.json # Root npm workspace
The project is a monorepo with two independent packages managed via npm workspaces.
The frontend is the only required component. It is a self-contained Next.js 15 app deployed to Vercel. All core features β search, bookmarks, analytics, dark mode β work client-side via localStorage. No backend required for the live demo.
MongoDB logic lives exclusively in backend/src/lib/mongodb.js. The file frontend/src/lib/mongodb.ts exists only as a thin TypeScript type/client adapter for Next.js API routes that optionally proxy to the backend β it does not run its own database connection. If you do not use the backend, those API routes are simply unused.
The backend is an optional Express.js server that persists bookmarks and analytics to MongoDB Atlas. It is a separate deployable unit (Railway, Render, or Heroku recommended). The frontend detects whether NEXT_PUBLIC_API_URL is set and falls back to localStorage if the backend is unavailable.
Browser
βββ Next.js Frontend (Vercel)
βββ localStorage β bookmarks & analytics (default, always works)
βββ NEXT_PUBLIC_API_URL (optional)
βββ Express Backend
βββ MongoDB Atlas
frontend/src/models/Analytics.ts and frontend/src/models/Bookmark.ts are TypeScript interface files β they define the shape of API responses. They contain no Mongoose imports and run no database logic. They exist so the Next.js API route handlers are fully typed.
| Category | Count | Description |
|---|---|---|
| HTML | 22 | Semantic HTML, forms, tables, multimedia |
| CSS | 35+ | Layouts, animations, responsive design |
| JavaScript | 60+ | DOM manipulation, async, algorithms, games |
| React | 13 | Components, hooks, state management |
| Python | 32+ | Scripts, algorithms, data structures |
| Total | 165 | Complete web development showcase |
All 13 React experiments are fully functional and live-previewable directly in the portfolio. They are served as pre-built static HTML files from frontend/public/React/, so no separate bundler or dev server is needed to view them.
| Project | Features |
|---|---|
| Color Picker App | useState, dynamic styling |
| Currency Converter | useEffect, API data fetching |
| Event RSVP | Forms, controlled inputs |
| Fruit Search App | Real-time filtering |
| Mood Board | Drag-and-drop state |
| One-Time Password Generator | Crypto randomness, clipboard |
| Reusable Footer | Component composition |
| Reusable Mega Navbar | Responsive navigation |
| Reusable Profile Card | Props, conditional rendering |
| Shopping List App | CRUD with useState |
| Tic-Tac-Toe Game | Game logic, lifting state up |
| Toggle Text App | Boolean state toggling |
Each project's source (.jsx, .html, .css) is viewable with syntax highlighting in the portfolio's code panel, and the live preview loads instantly in the iframe.
| Shortcut | Action |
|---|---|
/ |
Focus search input |
Escape |
Clear search |
Ctrl+D |
Toggle dark mode |
Ctrl+Shift+A |
View analytics dashboard |
Ctrl+B |
View bookmarks |
Shift+? |
Show keyboard help |
Track your portfolio usage with the built-in analytics dashboard.
Method 1: Keyboard Shortcut (Recommended)
Press: Ctrl+Shift+A
Method 2: Browser Console
- Press
F12to open Developer Tools - Click "Console" tab
- Type:
showAnalytics() - Press Enter
Method 3: Raw Data (JSON)
- Open Console (
F12) - Type:
getAnalytics() - Press Enter
- π Project Views β Which projects you opened and how many times
- π Search Queries β What you searched for with timestamps
- π·οΈ Filter Usage β Which categories you filtered
- β Bookmarks β Your saved favourite projects
- β
All data stored locally in browser (
localStorage) - β No data sent to external servers unless backend is configured
- β Private to your browser only
- β Clear browser data to reset analytics
| Technology | Version | Purpose |
|---|---|---|
| Next.js | 15 | React framework with SSR |
| React | 19 | UI library |
| TypeScript | 5.0 | Type safety |
| Prism.js | 1.29 | Syntax highlighting |
| Custom CSS | - | Styling with CSS variables |
| Technology | Version | Purpose |
|---|---|---|
| Express.js | 4.x | Web framework |
| MongoDB | - | Database |
| Mongoose | 8.x | ODM for MongoDB |
| CORS | - | Cross-origin requests |
The live site is deployed at muhammad-saad-amin.vercel.app.
To deploy your own fork:
-
Install Vercel CLI
npm install -g vercel
-
Deploy
vercel
-
Configure Build Settings
- Build Command:
cd frontend && npm run build - Output Directory:
frontend/.next - Install Command:
cd frontend && npm install
- Build Command:
-
Set Environment Variables (only if using backend)
NEXT_PUBLIC_API_URLβ Your backend URL
Deploy backend separately to:
- Railway (Recommended for MongoDB apps)
- Render (Free tier available)
- Vercel (Serverless Functions)
- Heroku (With MongoDB Atlas)
Set these environment variables on your backend host:
MONGODB_URI=mongodb+srv://...
PORT=5000
NODE_ENV=production# Run all tests
npm run test
# Run with coverage report
npm run test:coverage
# Watch mode
npm run test:ui| Module | Tests |
|---|---|
utils.test.js |
filterProjects, searchProjects |
fuzzySearch.test.js |
Levenshtein search, threshold, edge cases |
storage.test.js |
localStorage wrapper, get/set/remove |
analytics.test.js |
Event tracking, session data, summaries |
Python tests live in frontend/public/Python/tests/ and can be run with:
cd frontend/public/Python
python -m pytest tests/Edit frontend/public/projects.js and add your project:
{
category: "JavaScript",
title: "My Awesome Project",
iframeSrc: "Javascript/My Awesome Project/index.html",
description: "A brief description of what this project does",
codeFiles: [
{
name: "index.html",
src: "Javascript/My Awesome Project/index.html",
lang: "html"
},
{
name: "script.js",
src: "Javascript/My Awesome Project/script.js",
lang: "javascript"
},
{
name: "styles.css",
src: "Javascript/My Awesome Project/styles.css",
lang: "css"
}
]
}| Property | Type | Required | Description |
|---|---|---|---|
category |
string | Yes | "HTML", "CSS", "JavaScript", "Python", or "React" |
title |
string | Yes | Project name |
iframeSrc |
string | No | Path to preview file (null for code-only) |
description |
string | Yes | Brief project description |
codeFiles |
array | Yes | Array of file objects |
# Backend API URL (optional β omit to use localStorage only)
NEXT_PUBLIC_API_URL=http://localhost:5000# Server Configuration
PORT=5000
NODE_ENV=development
# MongoDB Connection
MONGODB_URI=mongodb+srv://username:[email protected]/database
# CORS (optional)
CORS_ORIGIN=http://localhost:3000
β οΈ Never commit.envfiles. Use.env.exampleas a template and keep real credentials out of version control.
Projects not loading?
# Check if projects.js exists
ls frontend/public/projects.js
# Restart dev server
cd frontend && npm run devBuild errors?
# Clear Next.js cache
cd frontend && rm -rf .next && npm run buildMongoDB connection failed?
- Verify
MONGODB_URIinbackend/.env - Ensure your IP is whitelisted in MongoDB Atlas
- Always run the backend from its own directory:
cd backend && npm run dev
Port already in use?
npx kill-port 5000
# or
PORT=5001 npm run devDouble scrollbar? β Clear browser cache and reload.
Dark mode not persisting? β Ensure localStorage is enabled in your browser.
Analytics not showing? β Press Ctrl+Shift+A or type showAnalytics() in the console.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License β see the LICENSE file for details.
Muhammad Saad Amin
Software Engineer | Web Developer
- π Portfolio: muhammad-saad-amin.vercel.app
- π GitHub: @SENODROOM
- freeCodeCamp β For the amazing curriculum
- Next.js β The React framework
- Prism.js β Syntax highlighting
- Vercel β Deployment platform
- Total Projects: 165
- Lines of Code: 50,000+
- Technologies: 5+ languages
- Features: 15+ advanced features
- Status: β Production Ready β Live at muhammad-saad-amin.vercel.app
Made with β€οΈ by Muhammad Saad Amin