This document provides a comprehensive overview of the webpage structure, planning ideas, workflow, and internal mechanics of the portfolio.
The project is built using a modern, component-based approach with Vanilla HTML, CSS, and JS.
index.html: The structural backbone containing all semantic sections (Hero, About, Impact, Skills, Projects, Testimonials, Contact).css/style.css: The design system featuring CSS variables (Tokens), Glassmorphism utilities, and advanced Keyframe animations.script.js: The "brain" of the application handling interactivity through modern Web APIs.
- Hero: First impression with a high-impact typing effect.
- Impact Section: Highlights a real-world problem and a technical solution.
- Technical Arsenal: Visual representation of skills using animated data-driven bars.
- Featured Projects: Filterable grid with interactive mouse-follow glow effects.
- Contact Form: Interactive form with loading states and validation.
The design philosophy focuses on Premium Perception and Dynamic Interactivity.
- Dark Theme: Uses
--bg: #030712as a base for a sleek, deep space feel. - Glassmorphism: Uses semi-transparent borders and backdrop filters (
blur(12px)) to create depth and hierarchy. - Micro-interactions: Every interactive element (links, buttons, cards) has a hover state that reacts to a custom themed cursor.
- Narrative Flow: Elements don't just appear; they "reveal" themselves using an
IntersectionObserversystem, creating a storytelling experience during the scroll.
We use the Intersection Observer API to detect when an element enters the viewport.
- Elements are tagged with
.revealand set toopacity: 0; transform: translateY(30px). - When the observer detects the element, it adds the
.activeclass. - CSS transitions handle the smooth slide-and-fade effect.
A JavaScript loop and recursive setTimeout system:
- It cycles through an array of strings.
- It subtracts/adds characters based on state.
- It features an "auto-wait" pause at the end of each word.
- Each project has a
data-categoryattribute. - Filtering buttons have a
data-filterattribute. - JS compares these and toggles
displayandopacityproperties with a small delay for "fade-out/fade-in" aesthetics.
A fixed div tracked to the mouse:
- Uses
mix-blend-mode: differenceso it's always visible regardless of the background color. - Scales up using CSS
transformwhen hovering over designated "interactive" HTML selectors.
- Adding a Project: Add a new
divin theprojects-gridwith the appropriatedata-category. - Changing Themes: Simply update the hex codes in the
:rootsection ofstyle.css. - Updating Skills: Update the
data-widthattribute in the HTML, and the progress bar will automatically animate to that specific percentage.