Download projects.html from theflu/undefined: direct link, hf CLI and curl.
- Browser
- Download file 6.27 kB
-
https://huggingface.co/spaces/theflu/undefined/resolve/main/projects.html
- Command line
-
hf download hf://spaces/theflu/undefined/projects.html
-
curl -L -o projects.html https://huggingface.co/spaces/theflu/undefined/resolve/main/projects.html
6.27 kB
| <html lang="en" class="dark"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Projects - RoofPrint Wizard</title> | |
| <link rel="icon" type="image/x-icon" href="/static/favicon.ico"> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <script> | |
| tailwind.config = { | |
| darkMode: 'class', | |
| theme: { | |
| extend: { | |
| colors: { | |
| primary: { | |
| 500: '#f43f5e', | |
| }, | |
| secondary: { | |
| 500: '#f97316', | |
| } | |
| } | |
| } | |
| } | |
| } | |
| </script> | |
| <script src="https://unpkg.com/feather-icons"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> | |
| </head> | |
| <body class="bg-gray-900 min-h-screen text-gray-100"> | |
| <!-- Navigation --> | |
| <nav class="bg-gray-800 border-b border-gray-700 px-4 py-3"> | |
| <div class="max-w-7xl mx-auto flex justify-between items-center"> | |
| <div class="flex items-center space-x-2"> | |
| <a href="index.html"> | |
| <i data-feather="home" class="text-primary-500"></i> | |
| </a> | |
| <a href="index.html" class="text-xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-primary-500 to-secondary-500">RoofPrint Wizard</a> | |
| </div> | |
| <div class="flex items-center space-x-4"> | |
| <a href="projects.html" class="bg-gray-700 hover:bg-gray-600 text-white px-4 py-2 rounded-lg flex items-center space-x-2 transition-all"> | |
| <i data-feather="folder"></i> | |
| <span>My Projects</span> | |
| </a> | |
| <a href="index.html" class="bg-primary-500 hover:bg-primary-600 text-white px-4 py-2 rounded-lg flex items-center space-x-2 transition-all"> | |
| <i data-feather="upload"></i> | |
| <span>New Upload</span> | |
| </a> | |
| </div> | |
| </div> | |
| </nav> | |
| <!-- Projects Content --> | |
| <div class="max-w-7xl mx-auto px-4 py-8"> | |
| <div class="flex justify-between items-center mb-8"> | |
| <h1 class="text-3xl font-bold">My Projects</h1> | |
| <div class="flex space-x-2"> | |
| <div class="relative"> | |
| <input type="text" placeholder="Search projects..." class="bg-gray-700 border border-gray-600 rounded-lg px-4 py-2 pl-10 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent"> | |
| <i data-feather="search" class="absolute left-3 top-2.5 text-gray-400"></i> | |
| </div> | |
| <button class="bg-primary-500 hover:bg-primary-600 text-white px-4 py-2 rounded-lg flex items-center space-x-2"> | |
| <i data-feather="filter"></i> | |
| <span>Filter</span> | |
| </button> | |
| </div> | |
| </div> | |
| <!-- Projects Grid --> | |
| <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"> | |
| <!-- Project cards will be generated here --> | |
| </div> | |
| <!-- Empty State --> | |
| <div id="emptyState" class="text-center py-12"> | |
| <div class="mx-auto w-24 h-24 bg-gray-800 rounded-full flex items-center justify-center mb-6"> | |
| <i data-feather="folder" class="w-12 h-12 text-gray-500"></i> | |
| </div> | |
| <h3 class="text-xl font-semibold mb-2">No projects yet</h3> | |
| <p class="text-gray-400 mb-6">Upload your first blueprint to get started</p> | |
| <a href="index.html" class="bg-primary-500 hover:bg-primary-600 text-white px-6 py-3 rounded-lg inline-flex items-center space-x-2"> | |
| <i data-feather="upload"></i> | |
| <span>Upload Blueprint</span> | |
| </a> | |
| </div> | |
| </div> | |
| <script> | |
| document.addEventListener('DOMContentLoaded', function() { | |
| feather.replace(); | |
| // Load projects from localStorage | |
| const projects = JSON.parse(localStorage.getItem('projects') || '[]'); | |
| const projectsGrid = document.querySelector('.grid'); | |
| const emptyState = document.getElementById('emptyState'); | |
| if (projects.length > 0) { | |
| emptyState.classList.add('hidden'); | |
| projects.forEach(project => { | |
| const projectCard = document.createElement('div'); | |
| projectCard.className = 'bg-gray-800 rounded-xl overflow-hidden border border-gray-700 hover:border-primary-500 transition-all'; | |
| projectCard.innerHTML = ` | |
| <div class="h-48 bg-gradient-to-br from-gray-700 to-gray-800 flex items-center justify-center"> | |
| <i data-feather="file-text" class="w-16 h-16 text-primary-500"></i> | |
| </div> | |
| <div class="p-6"> | |
| <h3 class="text-xl font-semibold mb-2">${project.name}</h3> | |
| <p class="text-gray-400 mb-4">Uploaded: ${project.date}</p> | |
| <div class="flex justify-between items-center"> | |
| <span class="bg-gray-700 ${project.status === 'processed' ? 'text-primary-500' : 'text-secondary-500'} px-3 py-1 rounded-full text-sm font-medium"> | |
| ${project.status.charAt(0).toUpperCase() + project.status.slice(1)} | |
| </span> | |
| <a href="estimate.html?project=${project.id}" class="text-secondary-500 hover:text-secondary-400 flex items-center space-x-1"> | |
| <span>View Estimate</span> | |
| <i data-feather="arrow-right" class="w-4 h-4"></i> | |
| </a> | |
| </div> | |
| </div> | |
| `; | |
| projectsGrid.appendChild(projectCard); | |
| }); | |
| feather.replace(); | |
| } | |
| }); | |
| </script> | |
| </body> | |
| </html> |