Building This Portfolio In Public

An interactive case study showing how I think, design, and debug using HTML, CSS, and JavaScript.

View on GitHub →

View Full Portfolio →

The Problem

Most portfolios only show the final result. I wanted to show the decision-making process behind building a real website.

Design Decision

How should this project be approached?

Debugging a Real Issue

This navigation menu breaks on mobile due to a missing CSS class. Try to debug it.

Component Playground

Small UI components built with reusable CSS and JavaScript state. Toggle interactions to see how behavior changes.

Button Variants

Cards

Feature

A clean card component with header and content.

Status

Cards can display structured information.

Badges & Tags

Success Warning Error Info

Alerts

Success: Operation completed successfully.
Warning: Please review before proceeding.
Error: Something went wrong.

Form Elements

Toggle Switch

Enabled

Progress Indicators

Animation Settings

Accessibility & Performance

This project is built with accessibility and performance in mind, even without frameworks.

Featured Projects

Live projects built with vanilla HTML, CSS, and JavaScript. Click to see them in action.

My Portfolio

Complete portfolio showcase with case studies, skills, and projects.

HTML CSS JavaScript
Live Demo
Restaurant Website

Interactive restaurant site with menu gallery, online ordering, and reservation system.

HTML CSS JavaScript
Live Demo
Ecommerce Store

Full-featured ecommerce platform with product catalog, shopping cart, and checkout flow.

HTML CSS JavaScript
Live Demo

See My Full Portfolio

Explore more case studies, projects, and detailed breakdowns of my work and process.

Visit My Full Portfolio →

Performance & Metrics

This site is built for speed and accessibility. Here are the current metrics:

98
Lighthouse Score
📊
42ms
First Contentful Paint
85ms
Largest Contentful Paint
🎯
0.05
Cumulative Layout Shift

Code Snippets & Best Practices

Reusable patterns and real-world solutions you can adopt immediately.

Intersection Observer Pattern
const observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      entry.target.classList.add('visible');
    }
  });
}, { threshold: 0.2 });

document.querySelectorAll('.lazy').forEach(el => {
  observer.observe(el);
});
Debounce Helper
function debounce(fn, delay) {
  let timeoutId;
  return function(...args) {
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => fn(...args), delay);
  };
}

const handleResize = debounce(() => {
  console.log('Window resized');
}, 300);
LocalStorage with Expiry
function setWithExpiry(key, value, ttl) {
  const item = {
    value: value,
    expiry: Date.now() + ttl
  };
  localStorage.setItem(key, JSON.stringify(item));
}

function getWithExpiry(key) {
  const item = JSON.parse(localStorage.getItem(key));
  if (Date.now() > item.expiry) {
    localStorage.removeItem(key);
    return null;
  }
  return item.value;
}

CSS Grid & Flexbox Playground

Interactive demonstrations of modern layout techniques.

CSS Grid: Auto-fit Responsive

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6

Flexbox: Justify Content

Box 1
Box 2
Box 3

Animation Library

Smooth, performant animations using CSS transforms and transitions.

Form Validation & Error Handling

Real-world form patterns with client-side validation.

Loading States & Skeletons

Patterns for better perceived performance during data loading.

Accessibility Checklist

WCAG 2.1 AA compliance patterns demonstrated throughout this site.

Testing Showcase

Unit tests and E2E examples from my projects.

✓ Unit Test: debounce()
test('debounce delays function execution', (done) => {
  let callCount = 0;
  const fn = debounce(() => callCount++, 100);
  fn();
  fn();
  fn();
  setTimeout(() => {
    expect(callCount).toBe(1);
    done();
  }, 150);
});
✓ E2E Test: Form Validation
describe('Form Validation', () => {
  it('shows error on invalid email', () => {
    cy.get('#emailInput').type('invalid');
    cy.get('button[type="submit"]').click();
    cy.get('#emailError').should('be.visible');
  });
});

Skills & Tech Stack

The technologies and methodologies I specialize in.

Frontend

HTML/CSS JavaScript Responsive Design React & Node.js Web Components Express.js

Performance & UX

Web Performance Accessibility (A11y) SEO Core Web Vitals Lighthouse

Tools & Methods

Git DevTools Webpack Testing (Jest, Cypress) CI/CD