Excellence in
Every Line of Code

A curated collection of high-performance applications, security tools, and digital experiences.

0
Total Projects
0
Commercial
0
Technologies
const portfolio = {
  owner: "Dakoda",
  mission: "Innovate",
  status: async () => {
    return "Ready to Deployment";
  }
};
// State let allProjects = []; let currentFilter = 'all'; let searchQuery = ''; // DOM Elements const grid = document.getElementById('main-projects-grid'); const searchInput = document.getElementById('project-search'); const filterTabs = document.querySelectorAll('.filter-tab'); const noResults = document.getElementById('no-results'); const stats = { total: document.getElementById('stat-total'), commercial: document.getElementById('stat-commercial'), tech: document.getElementById('stat-tech') }; /** * Initialize */ function init() { if (typeof window.projectsData !== 'undefined') { allProjects = window.projectsData; renderProjects(); updateStats(); updateFilterCounts(); setupEventListeners(); // Animate elements in setTimeout(() => { document.querySelectorAll('.project-card').forEach((card, index) => { card.style.animationDelay = `${index * 50}ms`; }); }, 100); } else { console.error('Projects data not found'); } } /** * Render Projects Grid */ function renderProjects() { grid.innerHTML = ''; const filtered = allProjects.filter(project => { const matchesCategory = currentFilter === 'all' || project.category === currentFilter; const searchLower = searchQuery.toLowerCase(); const matchesSearch = !searchQuery || project.title.toLowerCase().includes(searchLower) || project.description.toLowerCase().includes(searchLower) || project.tech.some(t => t.toLowerCase().includes(searchLower)) || project.tags.some(t => t.toLowerCase().includes(searchLower)); return matchesCategory && matchesSearch; }); if (filtered.length === 0) { noResults.classList.remove('hidden'); } else { noResults.classList.add('hidden'); filtered.forEach(project => { grid.innerHTML += createCardHTML(project); }); } } /** * Create Project Card HTML */ function createCardHTML(project) { const techPills = project.tech.slice(0, 4).map(t => `${escapeHtml(t)}` ).join(''); const featuredBadge = project.featured ? ` Featured` : ''; const githubLink = project.githubUrl ? `` : ''; const demoLink = project.demoUrl && project.demoUrl !== '#' ? `` : ''; // Fallback for click handler if no direct links in overlay const cardClickAttr = (project.demoUrl && project.demoUrl !== '#') ? `onclick="if(!event.target.closest('a')) window.open('${project.demoUrl}', '_blank')"` : ''; return `
${featuredBadge} ${project.category}

${escapeHtml(project.title)}

${escapeHtml(project.description)}

`; } /** * Update Filter Counts */ function updateFilterCounts() { // All document.getElementById('count-all').textContent = allProjects.length; // Categories const categories = ['professional', 'website', 'academic', 'games', 'additional']; categories.forEach(cat => { const count = allProjects.filter(p => p.category === cat).length; const badge = document.getElementById(`count-${cat}`); if (badge) badge.textContent = count; }); } /** * Animate Hero Stats */ function updateStats() { // Calculate const total = allProjects.length; const commercial = allProjects.filter(p => p.category === 'professional' || p.category === 'website').length; // Unique tech tags const uniqueTech = new Set(); allProjects.forEach(p => p.tech.forEach(t => uniqueTech.add(t))); const techCount = uniqueTech.size; animateValue(stats.total, 0, total, 1000); animateValue(stats.commercial, 0, commercial, 1200); animateValue(stats.tech, 0, techCount, 1500); } function animateValue(obj, start, end, duration) { let startTimestamp = null; const step = (timestamp) => { if (!startTimestamp) startTimestamp = timestamp; const progress = Math.min((timestamp - startTimestamp) / duration, 1); obj.innerHTML = Math.floor(progress * (end - start) + start); if (progress < 1) { window.requestAnimationFrame(step); } }; window.requestAnimationFrame(step); } /** * Event Listeners */ function setupEventListeners() { // Search Debounce let timeout; searchInput.addEventListener('input', (e) => { clearTimeout(timeout); timeout = setTimeout(() => { searchQuery = e.target.value; renderProjects(); }, 300); }); // Filter Tabs filterTabs.forEach(tab => { tab.addEventListener('click', () => { // Update UI filterTabs.forEach(t => t.classList.remove('active')); tab.classList.add('active'); // Update Filter currentFilter = tab.dataset.filter; renderProjects(); }); }); // Scroll effect for filter bar window.addEventListener('scroll', () => { const filterBar = document.getElementById('filter-bar'); if (window.scrollY > 100) { filterBar.classList.add('scrolled'); } else { filterBar.classList.remove('scrolled'); } }); } function resetFilters() { searchQuery = ''; currentFilter = 'all'; searchInput.value = ''; filterTabs.forEach(t => t.classList.remove('active')); document.querySelector('[data-filter="all"]').classList.add('active'); renderProjects(); } function escapeHtml(text) { const div = document.createElement('div'); div.textContent = text; return div.innerHTML; } // Run if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); }