diff --git a/relume-test/index.html b/relume-test/index.html index 38635a7..3cf4ef3 100644 --- a/relume-test/index.html +++ b/relume-test/index.html @@ -1,5 +1,5 @@ - + diff --git a/relume-test/src/App.tsx b/relume-test/src/App.tsx index 1aabaa9..1d4cec0 100644 --- a/relume-test/src/App.tsx +++ b/relume-test/src/App.tsx @@ -5,9 +5,12 @@ import ProgrammDetail from "./pages/ProgrammDetail"; import Speaker from "./pages/Speaker"; import SpeakerDetail from "./pages/SpeakerDetail"; import Tickets from "./pages/Tickets"; +import { ScrollToTop } from "./components/ScrollToTop"; function App() { return ( + <> + } /> } /> @@ -16,6 +19,7 @@ function App() { } /> } /> + ); } diff --git a/relume-test/src/components/Cta30.tsx b/relume-test/src/components/Cta30.tsx index 17dfa6b..87364c4 100644 --- a/relume-test/src/components/Cta30.tsx +++ b/relume-test/src/components/Cta30.tsx @@ -39,8 +39,9 @@ export const Cta30 = (props: Cta30Props) => { className="rb-4 mb-4 grid max-w-sm grid-cols-1 gap-y-3 sm:grid-cols-[1fr_max-content] sm:gap-4" onSubmit={handleSubmit} > + {
-

{tagline}

-

{heading}

+ {tagline &&

{tagline}

} +

{heading}

{description}

@@ -59,7 +60,13 @@ export const Event17 = (props: Event17Props) => { ))}
- + {button.url ? ( + + + + ) : ( + + )}
@@ -83,7 +90,7 @@ export const Event17Defaults: Props = { tagline: "", heading: "Speaker:innen", description: "Überwältigt von unserem Programm?\nLerne unsere diesjährigen Speakerinnen und Speaker kennen.", - button: { variant: "primary", size: "primary", title: "Zu den Speakern" }, + button: { variant: "primary", size: "primary", title: "Zu den Speakern", url: "/speaker" }, featuredEvents: [ { url: "/speaker", image: { src: speaker1, alt: "Dr. Elena Rossi" }, diff --git a/relume-test/src/components/Event20.tsx b/relume-test/src/components/Event20.tsx index eac0bf9..81ffa0c 100644 --- a/relume-test/src/components/Event20.tsx +++ b/relume-test/src/components/Event20.tsx @@ -51,7 +51,7 @@ export const Event20 = (props: Event20Props) => {

{tagline}

-

{heading}

+

{heading}

{description}

{socialMediaLinks.map((link, index) => ( - + {link.icon} ))} @@ -134,24 +135,24 @@ export const Footer3Defaults: Props = { links: [ { title: "Programm", url: "/programm" }, { title: "Speaker", url: "/speaker" }, - { title: "Location", url: "#" }, - { title: "Tickets", url: "#tickets" }, - { title: "FAQ", url: "#faq" }, + { title: "Location", url: "/location" }, + { title: "Tickets", url: "/tickets" }, + { title: "FAQ", url: "/programm#faq" }, ], }, { links: [] }, ], socialMediaLinks: [ - { url: "#", icon: }, - { url: "#", icon: }, - { url: "#", icon: }, - { url: "#", icon: }, - { url: "#", icon: }, + { url: "#", label: "UXplore auf Facebook", icon: }, + { url: "#", label: "UXplore auf Instagram", icon: }, + { url: "#", label: "UXplore auf X (Twitter)", icon: }, + { url: "#", label: "UXplore auf LinkedIn", icon: }, + { url: "#", label: "UXplore auf YouTube", icon: }, ], footerText: "© 2026 UXplore", footerLinks: [ - { title: "AGB", url: "#" }, - { title: "Datenschutz", url: "#" }, - { title: "Cookie Einstellungen", url: "#" }, + { title: "AGB", url: "/agb" }, + { title: "Datenschutz", url: "/datenschutz" }, + { title: "Cookie Einstellungen", url: "/cookie-einstellungen" }, ], }; \ No newline at end of file diff --git a/relume-test/src/components/Navbar.tsx b/relume-test/src/components/Navbar.tsx index ccd5998..801e416 100644 --- a/relume-test/src/components/Navbar.tsx +++ b/relume-test/src/components/Navbar.tsx @@ -37,12 +37,15 @@ export const Navbar3 = (props: Navbar3Props) => { const isMobile = useMediaQuery("(max-width: 991px)"); return ( -
- + ); }; @@ -209,7 +212,7 @@ export const Navbar3Defaults: Props = { navLinks: [ { title: "Programm", url: "/programm" }, { title: "Speaker", url: "/speaker" }, - { title: "Location", url: "#" }, + { title: "Location", url: "/location" }, ], buttons: [ { diff --git a/relume-test/src/components/ScrollToTop.tsx b/relume-test/src/components/ScrollToTop.tsx new file mode 100644 index 0000000..c4a45d9 --- /dev/null +++ b/relume-test/src/components/ScrollToTop.tsx @@ -0,0 +1,10 @@ +import { useEffect } from "react"; +import { useLocation } from "react-router-dom"; + +export const ScrollToTop = () => { + const { pathname } = useLocation(); + useEffect(() => { + window.scrollTo(0, 0); + }, [pathname]); + return null; +}; diff --git a/relume-test/src/components/Team4.tsx b/relume-test/src/components/Team4.tsx index f138dda..5a67441 100644 --- a/relume-test/src/components/Team4.tsx +++ b/relume-test/src/components/Team4.tsx @@ -16,6 +16,7 @@ type ImageProps = { type SocialLink = { href: string; icon: React.ReactNode; + label: string; }; type Talk = { @@ -67,7 +68,7 @@ const MemberCard = ({ member }: { member: TeamMember }) => ( {member.socialLinks.length > 0 && (
{member.socialLinks.map((link, i) => ( - {link.icon} + {link.icon} ))}
)} @@ -95,8 +96,8 @@ export const Team4 = (props: Team4Props) => {

Keine Speaker gefunden.

) : (
- {teamMembers.map((member, i) => ( - + {teamMembers.map((member) => ( + ))}
)} @@ -124,7 +125,7 @@ export const Team4Defaults: Props = { { title: "Talk: Scaling Research", type: "Talk" }, { title: "Workshop: Skalierbare Research-Infrastruktur", type: "Workshop" }, ], - socialLinks: [{ href: "#", icon: }], + socialLinks: [{ href: "#", label: "LinkedIn-Profil", icon: }], }, { image: { src: speaker2, alt: "Marcus J. Low" }, @@ -139,7 +140,7 @@ export const Team4Defaults: Props = { "Marcus J. Low ist Principal Designer bei Airbnb und war massgeblich an der Entwicklung des ersten Airbnb Design Systems beteiligt. Er spricht über die Balance zwischen Markenästhetik und funktionaler Logik und teilt seine Erfahrungen aus über 10 Jahren in der Produktgestaltung für globale Plattformen.", category: "Design / UX", talks: [{ title: "Workshop: The Future of Tokens", type: "Workshop" }], - socialLinks: [{ href: "#", icon: }], + socialLinks: [{ href: "#", label: "LinkedIn-Profil", icon: }], }, { image: { src: speaker3, alt: "Reto Gwerder" }, @@ -154,7 +155,7 @@ export const Team4Defaults: Props = { "Reto Gwerder ist Head of Product bei Ginetta und steht für konsequente Schweizer Design-Qualität. Er analysiert, warum Simplizität oft die größte technische Herausforderung ist und wie man in einem schnellen Produktumfeld trotzdem Qualität bewahrt.", category: "Strategie", talks: [{ title: "Talk: Simplify or Die", type: "Talk" }], - socialLinks: [{ href: "#", icon: }], + socialLinks: [{ href: "#", label: "LinkedIn-Profil", icon: }], }, { image: { src: speaker4, alt: "Dr. Elena Rossi" }, @@ -169,7 +170,7 @@ export const Team4Defaults: Props = { "Dr. Elena Rossi ist Kognitionspsychologin an der Universität Mailand und verbindet Wissenschaft mit Design. Sie erklärt, wie unser Gehirn auf Micro-Interactions reagiert und wann wir uns manipuliert fühlen. Elena forscht seit über einem Jahrzehnt zur Schnittstelle von Psychologie und digitaler Produktgestaltung.", category: "Psychologie", talks: [{ title: "Deep Dive: Psychological UX", type: "Talk" }], - socialLinks: [{ href: "#", icon: }], + socialLinks: [{ href: "#", label: "LinkedIn-Profil", icon: }], }, { image: { src: speaker5, alt: "Liam O'Connor" }, @@ -184,7 +185,7 @@ export const Team4Defaults: Props = { "Liam O'Connor ist Lead Product Designer bei Spotify und gibt Einblicke, wie das Unternehmen Personalisierung nutzt, ohne die Privatsphäre der Nutzer zu verletzen. Er arbeitet an der Schnittstelle von Daten, Design und Ethik.", category: "AI & Future", talks: [{ title: "Talk: Trust in AI UX", type: "Talk" }], - socialLinks: [{ href: "#", icon: }], + socialLinks: [{ href: "#", label: "LinkedIn-Profil", icon: }], }, { image: { src: speaker6, alt: "Fabienne Keller" }, @@ -199,7 +200,7 @@ export const Team4Defaults: Props = { "Fabienne Keller ist Gründerin der User-First Agency und Expertin für User Research in komplexen B2B-Umfeldern. Sie zeigt, wie man Stakeholder von Test-Ergebnissen überzeugt und eine nachhaltige Research-Kultur in Unternehmen aufbaut.", category: "Research", talks: [{ title: "Workshop: Research Repositories", type: "Workshop" }], - socialLinks: [{ href: "#", icon: }], + socialLinks: [{ href: "#", label: "LinkedIn-Profil", icon: }], }, ], }; diff --git a/relume-test/src/pages/Home.tsx b/relume-test/src/pages/Home.tsx index 7f8bb81..8afb512 100644 --- a/relume-test/src/pages/Home.tsx +++ b/relume-test/src/pages/Home.tsx @@ -10,11 +10,13 @@ export const Home = () => { return (
- - - - - +
+ + + + + +
); diff --git a/relume-test/src/pages/Programm.tsx b/relume-test/src/pages/Programm.tsx index 7be20c9..a0840c4 100644 --- a/relume-test/src/pages/Programm.tsx +++ b/relume-test/src/pages/Programm.tsx @@ -66,19 +66,21 @@ const Programm = () => { return (
- - - - +
+ + + + +
); diff --git a/relume-test/src/pages/ProgrammDetail.tsx b/relume-test/src/pages/ProgrammDetail.tsx index a113972..60704c2 100644 --- a/relume-test/src/pages/ProgrammDetail.tsx +++ b/relume-test/src/pages/ProgrammDetail.tsx @@ -50,110 +50,107 @@ const ProgrammDetail = () => { return (
- - {/* Hero section */} -
-
-
- {/* Left: event info */} -
- - {event.type} - -

- {event.title} -

- {event.subtitle && ( -

{event.subtitle}

- )} -
-
- - {dateLabel}, {event.time} -
-
- - {event.speaker} -
-
- - Ticket kaufen - -
- - {/* Right: speaker image */} -
- {event.image.alt} -
-
-
-
- - {/* Speaker bio + event description */} -
-
-
- {/* Left: über den speaker */} -
- -

- Über den Speaker -

- {speaker ? ( - <> -

{speaker.name}

-

{speaker.role}

-

{speaker.company}

-
- - - - - - - - - +
+ {/* Hero section */} +
+
+
+ {/* Left: event info */} +
+ + {event.type} + +

+ {event.title} +

+ {event.subtitle && ( +

{event.subtitle}

+ )} +
+
+ + {dateLabel}, {event.time}
- - Speaker Details - - - ) : ( -

{event.speaker}

- )} -
+
+ + {event.speaker} +
+
+ + Ticket kaufen + +
- {/* Right: das erwartete dich */} -
- -

- Das erwartet dich -

-

- {event.description ?? "Weitere Informationen folgen in Kürze."} -

+ {/* Right: speaker image */} +
+ {event.image.alt} +
-
-
+ - {/* Stay tuned */} - + {/* Speaker bio + event description */} +
+
+
+ {/* Left: über den speaker */} +
+ +

+ Über den Speaker +

+ {speaker ? ( + <> +

{speaker.name}

+

{speaker.role}

+

{speaker.company}

+ + + Speaker Details + + + ) : ( +

{event.speaker}

+ )} +
- {/* Sponsors */} - + {/* Right: das erwartet dich */} +
+ +

+ Das erwartet dich +

+

+ {event.description ?? "Weitere Informationen folgen in Kürze."} +

+
+
+
+
+ + +
); diff --git a/relume-test/src/pages/Speaker.tsx b/relume-test/src/pages/Speaker.tsx index 4233b9a..7d2fb58 100644 --- a/relume-test/src/pages/Speaker.tsx +++ b/relume-test/src/pages/Speaker.tsx @@ -47,28 +47,30 @@ const Speaker = () => { return (
- - { setSearchQuery(""); setActiveTabs([]); }} - useFilterToggle={false} - showDayFilter={false} - showSortButton={false} - /> - +
+ + { setSearchQuery(""); setActiveTabs([]); }} + useFilterToggle={false} + showDayFilter={false} + showSortButton={false} + /> + +
); diff --git a/relume-test/src/pages/SpeakerDetail.tsx b/relume-test/src/pages/SpeakerDetail.tsx index 79b1500..308f941 100644 --- a/relume-test/src/pages/SpeakerDetail.tsx +++ b/relume-test/src/pages/SpeakerDetail.tsx @@ -46,103 +46,102 @@ const SpeakerDetail = () => {
- {/* Hero image */} -
- {(speaker.detailImage -
- - {/* Speaker info */} -
-
-
- {/* Left: badge, name, location */} -
- - {speaker.category} - -

- {speaker.name} -

-

{speaker.role}

-

{speaker.company}

- {speaker.location && ( -

{speaker.location}

- )} -
- - {/* Right: bio + social */} -
-

- {speaker.fullBio ?? speaker.description} -

- {speaker.socialLinks.length > 0 && ( -
- {speaker.socialLinks.map((link, i) => ( - - {link.icon} - - ))} -
- )} -
-
-
-
- - {/* Sessions */} - {speakerEvents.length > 0 && ( -
+
+ {/* Speaker info */} +
- )} - {/* Other speakers */} -
-
-
-

Weitere Speaker

+ {/* Sessions */} + {speakerEvents.length > 0 && ( +
+ +
+ )} + + {/* Other speakers */} +
+
+
+

Weitere Speaker

+
+
- -
- + +
); diff --git a/relume-test/src/pages/Tickets.tsx b/relume-test/src/pages/Tickets.tsx index a281872..d77f733 100644 --- a/relume-test/src/pages/Tickets.tsx +++ b/relume-test/src/pages/Tickets.tsx @@ -77,60 +77,63 @@ const Tickets = () => { return (
- -
- DO – FR, 25. – 26. Juni 2026 -
-

- 10 Spots left! -

-
-
- +
+ +
+ DO – FR, 25. – 26. Juni 2026
-
-
-
- setEmailInput(e.target.value)} - className="rounded-lg border-electric-violet text-electric-violet placeholder:text-electric-violet/50" - /> - -
-

- By clicking Get Updates you're confirming that you agree with our{" "} - Terms and Conditions. +

+ 10 Spots left!

-
- - - +
+
+ +
+
+
+
+ + setEmailInput(e.target.value)} + className="rounded-lg border-electric-violet text-electric-violet placeholder:text-electric-violet/50" + /> + +
+

+ By clicking Get Updates you're confirming that you agree with our{" "} + Terms and Conditions. +

+
+ + + +
);