Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 61 additions & 20 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@
<li><a href="#projects" onclick="scrollToSection('projects')" aria-label="Projects section" target="_self" target="_blank">Projects</a></li>
<li><a href="#contact" onclick="scrollToSection('contact')" aria-label="Contact section" target="_self" target="_blank">Contact</a></li>
</ul>
<div class="theme-controls">
<label class="theme-toggle-label">
<input class="theme-toggle-input" type="checkbox" onclick="toggleTheme()" />
<div class="theme-toggle-slider"></div>
</label>
</div>
<div class="mobile-menu" onclick="toggleMobileMenu()" aria-label="Toggle navigation menu">
<span></span>
<span></span>
Expand All @@ -62,16 +68,15 @@ <h2 class="hero-subtitle">Full-Stack Developer & AI Enthusiast</h2>
<button class="cta-button primary" onclick="scrollToSection('projects')" aria-label="View my projects">
<span>View My Work</span>
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5 12H19M19 12L12 5M19 12L12 19" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M5 12H19M19 12L12 5M19 12L12 19" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</button>
<button class="cta-button secondary" onclick="scrollToSection('contact')" aria-label="Get in touch">
<span>Get In Touch</span>
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4 4H20C21.1 4 22 4.9 22 6V18C22 19.1 21.1 20 20 20H4C2.9 20 2 19.1 2 18V6C2 4.9 2.9 4 4 4Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M22 6L12 13L2 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg></div>
</svj>
</svg>
</button>
</div>
</div>
Expand Down Expand Up @@ -133,26 +138,62 @@ <h2 class="section-title">About Me</h2>
<h2 class="section-title">Technical Skills</h2>
<div class="skills-grid">

<div class="skill-card">
<div class="skill-icon">
<svg width="48" height="48" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2L2 7L12 12L22 7L12 2Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M2 17L12 22L22 17" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M2 12L12 17L22 12" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

<!-- Individual Skill Cards -->
<div class="small-skill-card react-card">
<div class="skill-card-icon">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/react/react-original.svg" alt="React" class="skill-tech-icon">
</div>
<h4 class="skill-card-title">React & Next.js</h4>
<div class="skill-card-bar">
<div class="skill-card-progress" data-progress="90"></div>
</div>
<span class="skill-card-percentage">90%</span>
</div>

<div class="small-skill-card cloud-card">
<div class="skill-card-icon">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/googlecloud/googlecloud-original.svg" alt="Cloud" class="skill-tech-icon">
</div>
<h4 class="skill-card-title">Cloud Deployment</h4>
<div class="skill-card-bar">
<div class="skill-card-progress" data-progress="75"></div>
</div>
<span class="skill-card-percentage">75%</span>
</div>

<div class="small-skill-card node-card">
<div class="skill-card-icon">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/nodejs/nodejs-original.svg" alt="Node.js" class="skill-tech-icon">
</div>
<h4 class="skill-card-title">Node.js & Express</h4>
<div class="skill-card-bar">
<div class="skill-card-progress" data-progress="85"></div>
</div>
<span class="skill-card-percentage">85%</span>
</div>

<div class="small-skill-card mongo-card">
<div class="skill-card-icon">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/mongodb/mongodb-original.svg" alt="MongoDB" class="skill-tech-icon">
</div>
<h4 class="skill-card-title">MongoDB & SQL</h4>
<div class="skill-card-bar">
<div class="skill-card-progress" data-progress="80"></div>
</div>
<span class="skill-card-percentage">80%</span>
</div>

<div class="small-skill-card typescript-card">
<div class="skill-card-icon">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/typescript/typescript-original.svg" alt="TypeScript" class="skill-tech-icon">
</div>
<h3>FULL Stack Development</h3>
<p>Creating responsive, interactive user interfaces with modern web technologies and advanced animations.</p>
<div class="skill-tags">
<span class="skill-tag">HTML5</span>
<span class="skill-tag">CSS3</span>
<span class="skill-tag">JavaScript</span>
<span class="skill-tag">React</span>
<span class="skill-tag">3D Animations</span>
<span class="skill-tag">MERN Stack</span>
<h4 class="skill-card-title">TypeScript</h4>
<div class="skill-card-bar">
<div class="skill-card-progress" data-progress="88"></div>
</div>
<span class="skill-card-percentage">88%</span>
</div>


</div>
</div>
Expand Down
75 changes: 75 additions & 0 deletions script.js
Original file line number Diff line number Diff line change
Expand Up @@ -285,3 +285,78 @@ function riskyOperation() {


riskyOperation().then(console.log);

// Theme Toggle Functionality
function toggleTheme() {
const currentTheme = document.documentElement.getAttribute('data-theme');
const newTheme = currentTheme === 'light' ? 'dark' : 'light';

document.documentElement.setAttribute('data-theme', newTheme);
localStorage.setItem('theme', newTheme);

// Update checkbox state
const checkbox = document.querySelector('.theme-toggle-input');
if (checkbox) {
checkbox.checked = newTheme === 'light';
}

// Update particles.js color for theme
updateParticlesColor(newTheme);
}

// Initialize theme on page load
function initializeTheme() {
const savedTheme = localStorage.getItem('theme') || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);

// Set checkbox state based on saved theme
const checkbox = document.querySelector('.theme-toggle-input');
if (checkbox) {
checkbox.checked = savedTheme === 'light';
}

updateParticlesColor(savedTheme);
}

// Update particles color based on theme
function updateParticlesColor(theme) {
if (window.pJSDom && window.pJSDom[0] && window.pJSDom[0].pJS) {
const particles = window.pJSDom[0].pJS.particles;
const newColor = theme === 'light' ? '#2980b9' : '#3498db';

particles.color.value = newColor;
particles.line_linked.color = newColor;

// Refresh particles
window.pJSDom[0].pJS.fn.particlesRefresh();
}
}

// Initialize theme when DOM is loaded
document.addEventListener('DOMContentLoaded', initializeTheme);

// Skills Progress Bar Animation
function animateSkillBars() {
const skillCards = document.querySelectorAll('.small-skill-card');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
setTimeout(() => {
entry.target.classList.add('animate-in');
}, 200); // Small delay for staggered animation
observer.unobserve(entry.target);
}
});
}, {
threshold: 0.3
});

skillCards.forEach((card, index) => {
setTimeout(() => {
observer.observe(card);
}, index * 100); // Staggered observation for wave effect
});
}

// Initialize skill bar animation
document.addEventListener('DOMContentLoaded', animateSkillBars);
Loading