Spaces:
Running
Running
Create the most advanced public website for the domain samsai.no. Build a complete, production ready site that is both a design showcase and a functionality showcase. Choose all technical details yourself. Do not ask me to pick tools. Decide and implement everything end to end.
5bb4425 verified | <html lang="en" class="scroll-smooth"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <meta name="description" content="Projects by Sami Said - Hardware and software ventures"> | |
| <title>Projects | Sami Said</title> | |
| <link rel="icon" type="image/x-icon" href="/assets/favicon.ico"> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet"> | |
| <script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> | |
| <script src="https://unpkg.com/feather-icons"></script> | |
| <style> | |
| @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); | |
| @import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500&display=swap'); | |
| html { | |
| scroll-behavior: smooth; | |
| } | |
| .gradient-text { | |
| background-clip: text; | |
| -webkit-background-clip: text; | |
| color: transparent; | |
| background-image: linear-gradient(90deg, #3B82F6, #1E40AF); | |
| } | |
| .nav-link { | |
| position: relative; | |
| } | |
| .nav-link::after { | |
| content: ''; | |
| position: absolute; | |
| width: 0; | |
| height: 2px; | |
| bottom: -2px; | |
| left: 0; | |
| background-color: #3B82F6; | |
| transition: width 0.3s ease; | |
| } | |
| .nav-link:hover::after { | |
| width: 100%; | |
| } | |
| .project-card:hover { | |
| transform: translateY(-5px); | |
| box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1); | |
| } | |
| .filter-chip { | |
| transition: all 0.2s ease; | |
| } | |
| .filter-chip:hover { | |
| transform: translateY(-1px); | |
| } | |
| .filter-chip.active { | |
| background-color: #1E40AF; | |
| color: white; | |
| } | |
| </style> | |
| </head> | |
| <body class="bg-light font-sans text-dark antialiased"> | |
| <!-- Navigation --> | |
| <nav class="bg-white shadow-sm sticky top-0 z-50"> | |
| <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> | |
| <div class="flex justify-between h-16"> | |
| <div class="flex items-center"> | |
| <a href="/" class="flex-shrink-0 flex items-center"> | |
| <span class="text-xl font-bold gradient-text">samsai.no</span> | |
| </a> | |
| </div> | |
| <div class="hidden md:ml-6 md:flex md:items-center md:space-x-8"> | |
| <a href="/" class="nav-link text-dark px-3 py-2 text-sm font-medium">Home</a> | |
| <a href="/about" class="nav-link text-dark px-3 py-2 text-sm font-medium">About</a> | |
| <a href="/projects" class="nav-link text-primary px-3 py-2 text-sm font-medium">Projects</a> | |
| <a href="/contact" class="nav-link text-dark px-3 py-2 text-sm font-medium">Contact</a> | |
| </div> | |
| <div class="-mr-2 flex items-center md:hidden"> | |
| <button type="button" id="mobile-menu-button" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-gray-500 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-accent"> | |
| <i data-feather="menu"></i> | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Mobile menu --> | |
| <div id="mobile-menu" class="hidden md:hidden bg-white border-t border-gray-200"> | |
| <div class="px-2 pt-2 pb-3 space-y-1"> | |
| <a href="/" class="block px-3 py-2 text-base font-medium text-dark hover:bg-gray-50">Home</a> | |
| <a href="/about" class="block px-3 py-2 text-base font-medium text-dark hover:bg-gray-50">About</a> | |
| <a href="/projects" class="block px-3 py-2 text-base font-medium text-primary hover:bg-gray-50">Projects</a> | |
| <a href="/contact" class="block px-3 py-2 text-base font-medium text-dark hover:bg-gray-50">Contact</a> | |
| </div> | |
| </div> | |
| </nav> | |
| <!-- Hero Section --> | |
| <header class="bg-white"> | |
| <div class="max-w-7xl mx-auto py-16 px-4 sm:py-24 sm:px-6 lg:px-8"> | |
| <div class="text-center"> | |
| <h1 class="text-4xl font-extrabold tracking-tight text-dark sm:text-5xl md:text-6xl"> | |
| <span class="block">Projects</span> | |
| <span class="block text-primary">Ventures & Solutions</span> | |
| </h1> | |
| <p class="mt-3 max-w-md mx-auto text-base text-gray-500 sm:text-lg md:mt-5 md:text-xl md:max-w-3xl"> | |
| A selection of my active projects and ventures. | |
| </p> | |
| </div> | |
| </div> | |
| </header> | |
| <!-- Projects Section --> | |
| <section class="bg-gray-50 py-12"> | |
| <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> | |
| <!-- Filters --> | |
| <div class="mb-8"> | |
| <h3 class="text-sm font-medium text-gray-500 mb-4">Filter by:</h3> | |
| <div class="flex flex-wrap gap-3"> | |
| <button class="filter-chip px-3 py-1 rounded-full text-xs font-medium bg-gray-200 text-gray-800" data-filter="all"> | |
| All Projects | |
| </button> | |
| <button class="filter-chip px-3 py-1 rounded-full text-xs font-medium bg-blue-100 text-blue-800" data-filter="iot"> | |
| IoT | |
| </button> | |
| <button class="filter-chip px-3 py-1 rounded-full text-xs font-medium bg-green-100 text-green-800" data-filter="active"> | |
| Active | |
| </button> | |
| <button class="filter-chip px-3 py-1 rounded-full text-xs font-medium bg-purple-100 text-purple-800" data-filter="hardware"> | |
| Hardware | |
| </button> | |
| <button class="filter-chip px-3 py-1 rounded-full text-xs font-medium bg-yellow-100 text-yellow-800" data-filter="community"> | |
| Community | |
| </button> | |
| <button class="filter-chip px-3 py-1 rounded-full text-xs font-medium bg-pink-100 text-pink-800" data-filter="creative"> | |
| Creative | |
| </button> | |
| </div> | |
| </div> | |
| <!-- Projects Grid --> | |
| <div class="grid grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-3"> | |
| <!-- Nemesys Card --> | |
| <div class="project-card bg-white overflow-hidden shadow rounded-lg transition-all duration-300 ease-in-out" data-categories="iot active hardware"> | |
| <div class="px-4 py-5 sm:p-6"> | |
| <div class="flex items-center"> | |
| <div class="flex-shrink-0 bg-primary rounded-md p-3"> | |
| <i data-feather="cpu" class="h-6 w-6 text-white"></i> | |
| </div> | |
| <div class="ml-5 w-0 flex-1"> | |
| <h3 class="text-lg font-medium text-dark">Nemesys</h3> | |
| <p class="mt-1 text-sm text-gray-500">IoT solutions for smart spaces</p> | |
| </div> | |
| </div> | |
| <div class="mt-4"> | |
| <p class="text-sm text-gray-600"> | |
| Out-of-the-box IoT bundles for specific use cases with open standards. | |
| </p> | |
| </div> | |
| <div class="mt-4 flex flex-wrap gap-2"> | |
| <span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-blue-100 text-blue-800">IoT</span> | |
| <span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800">Active</span> | |
| <span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-purple-100 text-purple-800">Hardware</span> | |
| </div> | |
| <div class="mt-5 flex justify-between items-center"> | |
| <a href="/projects/nemesys" class="text-sm font-medium text-primary hover:text-secondary"> | |
| Learn more <span aria-hidden="true">→</span> | |
| </a> | |
| <a href="https://www.nemesys.no" target="_blank" class="text-sm font-medium text-gray-500 hover:text-gray-700 flex items-center"> | |
| Visit site <i data-feather="external-link" class="ml-1 h-4 w-4"></i> | |
| </a> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Klokkeriet Card --> | |
| <div class="project-card bg-white overflow-hidden shadow rounded-lg transition-all duration-300 ease-in-out" data-categories="community active"> | |
| <div class="px-4 py-5 sm:p-6"> | |
| <div class="flex items-center"> | |
| <div class="flex-shrink-0 bg-primary rounded-md p-3"> | |
| <i data-feather="watch" class="h-6 w-6 text-white"></i> | |
| </div> | |
| <div class="ml-5 w-0 flex-1"> | |
| <h3 class="text-lg font-medium text-dark">Klokkeriet</h3> | |
| <p class="mt-1 text-sm text-gray-500">Watch community venture</p> | |
| </div> | |
| </div> | |
| <div class="mt-4"> | |
| <p class="text-sm text-gray-600"> | |
| A community for watch enthusiasts and collectors. | |
| </p> | |
| </div> | |
| <div class="mt-4 flex flex-wrap gap-2"> | |
| <span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-yellow-100 text-yellow-800">Community</span> | |
| <span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800">Active</span> | |
| </div> | |
| <div class="mt-5 flex justify-between items-center"> | |
| <a href="/projects/klokkeriet" class="text-sm font-medium text-primary hover:text-secondary"> | |
| Learn more <span aria-hidden="true">→</span> | |
| </a> | |
| <a href="https://www.klokkeriet.no" target="_blank" class="text-sm font-medium text-gray-500 hover:text-gray-700 flex items-center"> | |
| Visit site <i data-feather="external-link" class="ml-1 h-4 w-4"></i> | |
| </a> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Kenza Card --> | |
| <div class="project-card bg-white overflow-hidden shadow rounded-lg transition-all duration-300 ease-in-out" data-categories="creative active"> | |
| <div class="px-4 py-5 sm:p-6"> | |
| <div class="flex items-center"> | |
| <div class="flex-shrink-0 bg-primary rounded-md p-3"> | |
| <i data-feather="shopping-bag" class="h-6 w-6 text-white"></i> | |
| </div> | |
| <div class="ml-5 w-0 flex-1"> | |
| <h3 class="text-lg font-medium text-dark">Kenza</h3> | |
| <p class="mt-1 text-sm text-gray-500">Creative webshop</p> | |
| </div> | |
| </div> | |
| <div class="mt-4"> | |
| <p class="text-sm text-gray-600"> | |
| Handmade items and creative projects focused on learning and creativity. | |
| </p> | |
| </div> | |
| <div class="mt-4 flex flex-wrap gap-2"> | |
| <span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-pink-100 text-pink-800">Creative</span> | |
| <span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800">Active</span> | |
| <span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-red-100 text-red-800">E-commerce</span> | |
| </div> | |
| <div class="mt-5 flex justify-between items-center"> | |
| <a href="/projects/kenza" class="text-sm font-medium text-primary hover:text-secondary"> | |
| Learn more <span aria-hidden="true">→</span> | |
| </a> | |
| <a href="https://www.kenza.no" target="_blank" class="text-sm font-medium text-gray-500 hover:text-gray-700 flex items-center"> | |
| Visit site <i data-feather="external-link" class="ml-1 h-4 w-4"></i> | |
| </a> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- CTA Section --> | |
| <section class="bg-primary"> | |
| <div class="max-w-7xl mx-auto py-12 px-4 sm:px-6 lg:py-16 lg:px-8 lg:flex lg:items-center lg:justify-between"> | |
| <h2 class="text-3xl font-extrabold tracking-tight text-white sm:text-4xl"> | |
| <span class="block">Have a project in mind?</span> | |
| <span class="block text-accent">Let's discuss how I can help.</span> | |
| </h2> | |
| <div class="mt-8 flex lg:mt-0 lg:flex-shrink-0"> | |
| <div class="inline-flex rounded-md shadow"> | |
| <a href="/contact" class="inline-flex items-center justify-center px-5 py-3 border border-transparent text-base font-medium rounded-md text-primary bg-white hover:bg-gray-50"> | |
| Contact Me | |
| </a> | |
| </div> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- Footer --> | |
| <footer class="bg-dark"> | |
| <div class="max-w-7xl mx-auto py-12 px-4 sm:px-6 lg:px-8"> | |
| <div class="grid grid-cols-2 md:grid-cols-4 gap-8"> | |
| <div class="col-span-2"> | |
| <h3 class="text-white text-lg font-semibold">Sami Said</h3> | |
| <p class="mt-4 text-gray-300 text-sm"> | |
| Custom hardware and software solutions from prototype to production. | |
| </p> | |
| <div class="mt-4 flex space-x-6"> | |
| <a href="#" class="text-gray-400 hover:text-white"> | |
| <i data-feather="github"></i> | |
| </a> | |
| <a href="#" class="text-gray-400 hover:text-white"> | |
| <i data-feather="twitter"></i> | |
| </a> | |
| <a href="#" class="text-gray-400 hover:text-white"> | |
| <i data-feather="linkedin"></i> | |
| </a> | |
| </div> | |
| </div> | |
| <div> | |
| <h3 class="text-white text-sm font-semibold tracking-wider uppercase">Navigation</h3> | |
| <ul class="mt-4 space-y-4"> | |
| <li><a href="/" class="text-gray-300 hover:text-white text-sm">Home</a></li> | |
| <li><a href="/about" class="text-gray-300 hover:text-white text-sm">About</a></li> | |
| <li><a href="/projects" class="text-gray-300 hover:text-white text-sm">Projects</a></li> | |
| <li><a href="/contact" class="text-gray-300 hover:text-white text-sm">Contact</a></li> | |
| </ul> | |
| </div> | |
| <div> | |
| <h3 class="text-white text-sm font-semibold tracking-wider uppercase">Legal</h3> | |
| <ul class="mt-4 space-y-4"> | |
| <li><a href="/privacy" class="text-gray-300 hover:text-white text-sm">Privacy Policy</a></li> | |
| <li><a href="/terms" class="text-gray-300 hover:text-white text-sm">Terms of Service</a></li> | |
| <li><a href="/imprint" class="text-gray-300 hover:text-white text-sm">Imprint</a></li> | |
| </ul> | |
| </div> | |
| </div> | |
| <div class="mt-8 border-t border-gray-700 pt-8 md:flex md:items-center md:justify-between"> | |
| <div class="flex space-x-6 md:order-2"> | |
| <a href="#" class="text-gray-400 hover:text-gray-300 text-sm">Cookie Settings</a> | |
| </div> | |
| <p class="mt-8 text-base text-gray-400 md:mt-0 md:order-1"> | |
| © 2023 What Sami Said. All rights reserved. | |
| </p> | |
| </div> | |
| </div> | |
| </footer> | |
| <script> | |
| // Initialize AOS | |
| AOS.init({ | |
| duration: 800, | |
| easing: 'ease-in-out', | |
| once: true | |
| }); | |
| // Initialize Feather Icons | |
| feather.replace(); | |
| // Mobile menu toggle | |
| const mobileMenuButton = document.getElementById('mobile-menu-button'); | |
| const mobileMenu = document.getElementById('mobile-menu'); | |
| mobileMenuButton.addEventListener('click', () => { | |
| const expanded = mobileMenuButton.getAttribute('aria-expanded') === 'true'; | |
| mobileMenuButton.setAttribute('aria-expanded', !expanded); | |
| mobileMenu.classList.toggle('hidden'); | |
| // Change icon | |
| const icon = mobileMenuButton.querySelector('svg'); | |
| if (expanded) { | |
| feather.replace(); | |
| } else { | |
| icon.setAttribute('data-feather', 'x'); | |
| feather.replace(); | |
| } | |
| }); | |
| // Project filtering | |
| const filterChips = document.querySelectorAll('.filter-chip'); | |
| const projectCards = document.querySelectorAll('.project-card'); | |
| filterChips.forEach(chip => { | |
| chip.addEventListener('click', () => { | |
| // Toggle active state | |
| filterChips.forEach(c => c.classList.remove('active')); | |
| chip.classList.add('active'); | |
| const filter = chip.dataset.filter; | |
| if (filter === 'all') { | |
| // Show all projects | |
| projectCards.forEach(card => { | |
| card.style.display = 'block'; | |
| }); | |
| } else { | |
| // Filter projects | |
| projectCards.forEach(card => { | |
| const categories = card.dataset.categories.split(' '); | |
| if (categories.includes(filter)) { | |
| card.style.display = 'block'; | |
| } else { | |
| card.style.display = 'none'; | |
| } | |
| }); | |
| } | |
| }); | |
| }); | |
| </script> | |
| </body> | |
| </html> | |