project-manager-app / index.html
JamesToth's picture
Add 3 files
aa4bbe0 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Project Dashboard</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
.project-card {
transition: all 0.3s ease;
transform: translateY(0);
}
.project-card:hover {
transform: translateY(-5px);
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}
.tag {
transition: all 0.2s ease;
}
.tag:hover {
transform: scale(1.05);
}
.status-badge.completed {
background-color: #10b98120;
color: #10b981;
}
.status-badge.in-progress {
background-color: #f59e0b20;
color: #f59e0b;
}
.status-badge.planned {
background-color: #3b82f620;
color: #3b82f6;
}
</style>
</head>
<body class="bg-gray-50 min-h-screen">
<div class="container mx-auto px-4 py-12">
<!-- Header -->
<div class="text-center mb-12">
<h1 class="text-4xl font-bold text-gray-800 mb-2">My Projects</h1>
<p class="text-lg text-gray-600 max-w-2xl mx-auto">A collection of my recent work, experiments, and contributions</p>
<!-- Filter Controls -->
<div class="flex flex-wrap justify-center gap-3 mt-6">
<button onclick="filterProjects('all')" class="px-4 py-2 bg-indigo-600 text-white rounded-full hover:bg-indigo-700 transition">All Projects</button>
<button onclick="filterProjects('completed')" class="px-4 py-2 border border-gray-300 rounded-full hover:bg-gray-100 transition">Completed</button>
<button onclick="filterProjects('in-progress')" class="px-4 py-2 border border-gray-300 rounded-full hover:bg-gray-100 transition">In Progress</button>
<button onclick="filterProjects('planned')" class="px-4 py-2 border border-gray-300 rounded-full hover:bg-gray-100 transition">Planned</button>
</div>
</div>
<!-- Projects Grid -->
<div id="projects-container" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
<!-- Projects will be dynamically inserted here -->
</div>
</div>
<script>
// Sample project data
const projects = [
{
id: 1,
title: "E-commerce Platform",
description: "A full-stack e-commerce solution with payment integration, inventory management, and analytics dashboard.",
image: "https://images.unsplash.com/photo-1555529669-e69e7aa0ba9a?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=800&q=80",
status: "completed",
tags: ["React", "Node.js", "MongoDB", "Stripe"],
github: "https://github.com",
demo: "https://example.com",
date: "Jun 2023"
},
{
id: 2,
title: "Task Management App",
description: "Collaborative task management application with real-time updates, team assignments, and progress tracking.",
image: "https://images.unsplash.com/photo-1541462608143-67571c6738dd?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=800&q=80",
status: "in-progress",
tags: ["Vue.js", "Firebase", "Tailwind CSS"],
github: "https://github.com",
demo: null,
date: "Aug 2023 - Present"
},
{
id: 3,
title: "Health & Fitness Tracker",
description: "Mobile application for tracking workouts, nutrition, and health metrics with personalized recommendations.",
image: "https://images.unsplash.com/photo-1571019613454-1cb2f99b2d8b?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=800&q=80",
status: "planned",
tags: ["React Native", "GraphQL", "PostgreSQL"],
github: null,
demo: null,
date: "Coming Soon"
},
{
id: 4,
title: "Portfolio Website",
description: "Personal portfolio website showcasing projects, skills, and contact information with a clean, modern design.",
image: "https://images.unsplash.com/photo-1633356122544-f134324a6cee?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=800&q=80",
status: "completed",
tags: ["HTML", "CSS", "JavaScript"],
github: "https://github.com",
demo: "https://example.com",
date: "Apr 2023"
},
{
id: 5,
title: "Weather Dashboard",
description: "Interactive weather application showing current conditions, forecasts, and historical data visualization.",
image: "https://images.unsplash.com/photo-1601134467661-3d775b999c8b?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=800&q=80",
status: "in-progress",
tags: ["React", "OpenWeather API", "Chart.js"],
github: "https://github.com",
demo: "https://example.com",
date: "Jul 2023 - Present"
},
{
id: 6,
title: "Recipe Finder",
description: "Discover recipes based on ingredients you have, with nutritional information and step-by-step instructions.",
image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=800&q=80",
status: "planned",
tags: ["Angular", "Spoonacular API", "Bootstrap"],
github: null,
demo: null,
date: "Coming Soon"
}
];
// Render all projects initially
document.addEventListener('DOMContentLoaded', () => {
renderProjects(projects);
});
// Function to render projects
function renderProjects(projectsToRender) {
const container = document.getElementById('projects-container');
container.innerHTML = '';
projectsToRender.forEach(project => {
const projectCard = document.createElement('div');
projectCard.className = 'project-card bg-white rounded-xl overflow-hidden shadow-md hover:shadow-lg';
// Determine status text and styling
let statusText, statusClass;
switch(project.status) {
case 'completed':
statusText = 'Completed';
statusClass = 'completed';
break;
case 'in-progress':
statusText = 'In Progress';
statusClass = 'in-progress';
break;
case 'planned':
statusText = 'Planned';
statusClass = 'planned';
break;
}
projectCard.innerHTML = `
<div class="h-48 overflow-hidden">
<img src="${project.image}" alt="${project.title}" class="w-full h-full object-cover">
</div>
<div class="p-6">
<div class="flex justify-between items-start mb-2">
<h3 class="text-xl font-semibold text-gray-800">${project.title}</h3>
<span class="status-badge ${statusClass} text-xs font-medium px-2.5 py-0.5 rounded-full">
${statusText}
</span>
</div>
<p class="text-gray-600 text-sm mb-4">${project.description}</p>
<div class="flex flex-wrap gap-2 mb-4">
${project.tags.map(tag => `
<span class="tag text-xs bg-gray-100 text-gray-800 px-3 py-1 rounded-full">
${tag}
</span>
`).join('')}
</div>
<div class="flex justify-between items-center text-sm text-gray-500">
<span>${project.date}</span>
<div class="flex space-x-2">
${project.github ? `
<a href="${project.github}" target="_blank" class="text-gray-700 hover:text-gray-900 transition">
<i class="fab fa-github"></i>
</a>
` : ''}
${project.demo ? `
<a href="${project.demo}" target="_blank" class="text-gray-700 hover:text-gray-900 transition">
<i class="fas fa-external-link-alt"></i>
</a>
` : ''}
</div>
</div>
</div>
`;
container.appendChild(projectCard);
});
}
// Filter projects by status
function filterProjects(status) {
if (status === 'all') {
renderProjects(projects);
} else {
const filteredProjects = projects.filter(project => project.status === status);
renderProjects(filteredProjects);
}
}
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=JamesToth/project-manager-app" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>