'use client'; import { useState } from 'react'; import Image from 'next/image'; interface Project { id: string; title: string; category: 'web' | 'print'; description: string; image: string; details: string[]; link?: string; } const projects: Project[] = [ { id: 'estev', title: 'e-stev Radsport', category: 'web', description: '2013 für die STEV Radport GmbH in Gunzenhausen wurde die Webseite e-stev von Grund auf neu geschaffen und für ein CMS umgesetzt.', image: '/img/Referenz - e-stev -Web.jpg', details: [ 'Modernes Responsive Design', 'CMS-Integration für einfache Pflege', 'Produktkatalog für E-Bikes', 'Kontaktformular mit Kartenfunktion', ], link: 'https://e-stev.de', }, { id: 'planet', title: 'Planet-Touristik', category: 'web', description: 'Für Planet-Touristik, das Reisebüro im Nürnberger Norden, wurde die Startseite 2014 einem Redesign unterworfen.', image: '/img/Referenz---Planet-Touristik---web.jpg', details: [ 'Redesign der Startseite', 'Optimierung der User Experience', 'Integration in bestehendes System', 'Responsive Layout', ], }, { id: 'handstaubsauger', title: 'Handstaubsauger24.de', category: 'web', description: 'Für handstaubsauger24.de wurde ein Magento E-Commerce Template gestaltet.', image: '/img/Referenz---handstaubsauger---web.jpg', details: [ 'Magento Theme Development', 'E-Commerce Optimierung', 'Produktfilter und Suche', 'Mobile-First Ansatz', ], }, { id: 'illy', title: 'Illy Caffè Ansbach', category: 'print', description: '2007 für das Illy Caffe in Ansbach entstandener Trifolder als Menükarte.', image: '/img/Referenz---Illy---Print.jpg', details: [ 'Tri-Folder Design', 'Hochwertige Druckvorlagen', 'Corporate Design Integration', 'Fotografie und Layout', ], }, { id: 'sz', title: 'SZ Kirchbirlingen', category: 'print', description: '2008 für die SZ in Kirchbirlingen entstandener Flyer als Wurfsendung.', image: '/img/Referenz---SZ---Print.jpg', details: [ 'DIN Lang Format', 'Wurfsendung Konzept', 'Print Design', 'Layout und Satz', ], }, { id: 'planet-print', title: 'Planet-Touristik Flyer', category: 'print', description: '2014 wurde ein neuer Flyer für Planet Touristik geschaffen.', image: '/img/Referenz---Planet-Touristik---print.jpg', details: [ 'DIN A5 Format', 'Verteiler und Auslage', 'Moderne Gestaltung', 'Print-Produktion', ], }, ]; export default function Portfolio() { const [activeCategory, setActiveCategory] = useState<'all' | 'web' | 'print'>('all'); const [selectedProject, setSelectedProject] = useState(null); const [imageErrors, setImageErrors] = useState>(new Set()); const filteredProjects = activeCategory === 'all' ? projects : projects.filter((p) => p.category === activeCategory); const handleImageError = (projectId: string) => { setImageErrors(prev => new Set(prev).add(projectId)); }; return (

Portfolio

Zwischen 2000 bis 2010 war ich auch als Freelancer tätig und arbeitete mit Kunden und Agenturen zusammen. Eine Auswahl meiner Arbeiten aus diesem Zeitraum habe ich hier zusammengestellt.

{/* Filter Buttons */}
{(['all', 'web', 'print'] as const).map((cat) => ( ))}
{/* Projects Grid */}
{filteredProjects.map((project) => (
setSelectedProject(project)} >
{!imageErrors.has(project.id) ? ( {project.title} handleImageError(project.id)} /> ) : (

{project.title}

)}

{project.title}

{project.description}

{project.title}

{project.category === 'web' ? 'Web Design' : 'Print Design'}
))}
{/* Modal */} {selectedProject && (
setSelectedProject(null)} >
e.stopPropagation()} >

{selectedProject.title}

{!imageErrors.has(selectedProject.id) ? ( {selectedProject.title} handleImageError(selectedProject.id)} /> ) : (

Bild wird geladen...

)}

{selectedProject.description}

Details:

    {selectedProject.details.map((detail, idx) => (
  • {detail}
  • ))}
)}
); }