diff --git a/public/images/decorative-images/redElement.png b/public/images/decorative-images/redElement.png new file mode 100644 index 0000000..13afa62 Binary files /dev/null and b/public/images/decorative-images/redElement.png differ diff --git a/public/images/decorative-images/star.png b/public/images/decorative-images/star.png new file mode 100644 index 0000000..a171537 Binary files /dev/null and b/public/images/decorative-images/star.png differ diff --git a/src/app/speakers/[id]/page.tsx b/src/app/speakers/[id]/page.tsx index f29ead8..33feba9 100644 --- a/src/app/speakers/[id]/page.tsx +++ b/src/app/speakers/[id]/page.tsx @@ -52,7 +52,8 @@ export default async function Page({ params }: Props) { ); } - const mainSession: any | undefined = speaker.sessions?.[0]; + const mainSession = speaker.sessions?.[0]; + const sessionTitle = mainSession?.name; const formattedDate = mainSession?.date ? `${getEventMonth(mainSession.date, false)} ${getEventDay(mainSession.date)}` : undefined; @@ -61,103 +62,187 @@ export default async function Page({ params }: Props) { onlyHours: true, }) : undefined; + const sessionPlace = mainSession?.place || "Main Stage"; + + const SpeakerPhoto = ({ className = "" }: { className?: string }) => ( +
+
+ +
+
+ ); + + const SessionInfo = ({ className = "" }: { className?: string }) => ( + mainSession ? ( +
+

{sessionPlace}

+

+ {formattedDate || "February 17"} • {timeRange || "16h30-17h20"} +

+
+ ) : null + ); + + const SessionTitleBox = ({ className = "" }: { className?: string }) => ( + sessionTitle ? ( +
+

+ {sessionTitle} +

+
+ ) : null + ); return ( -
-
-
- {/* Header */} -
-
-

+
+ {/* Decorative circles */} +
+
+ + {/* Glowing line separator - positioned where circles end */} +
+
+
+ +
+ {/* Top decorative elements - only visible on desktop */} +
+ +
+ + {/* Main grid */} +
+ {/* Mobile layout - custom order */} +
+ {/* 1. Name and title */} +
+

{speaker.name}

{(speaker.title || speaker.company?.name) && ( -

+

{speaker.title} - {speaker.company?.name ? ` @${speaker.company.name}` : ""}

)}
-
- {/* yellow pod with portrait */} -
+ {/* Star decoration after title, before photo */} +
+ +
+ + {/* 2. Photo with decorative elements */} +
+ {/* Speaker photo with yellow background */} + + + {/* Small decorative box */} +
-
- {/* Content row */} -
- {/* big text block */} -
-
-

- {speaker.description} -

-
+ {/* 3. Description box */} +
+

+ {speaker.description || "Texto texto bla bla"} +

- {/* right decorations and talk title */} -
- {/* plus icon */} -
- - -
+ {/* 4. Session title box */} + + + {/* 5. Session info */} + +
- {/* talk title */} - {(mainSession?.name || mainSession?.title) && ( -
-
-

- {(mainSession.name || mainSession.title) as string} -

-
-
+ {/* Desktop layout - original two columns */} +
+ {/* Name */} +
+

+ {speaker.name} +

+ {(speaker.title || speaker.company?.name) && ( +

+ {speaker.title} +

)}
+ + {/* Description box with light background */} +
+

+ {speaker.description || "Texto texto bla bla"} +

+
+ + {/* Session info */} +
- {/* Bottom band with session info */} - {(mainSession || true) && ( -
-
-
-
- {mainSession?.place && ( -

{mainSession.place}

- )} - {mainSession?.date && ( -

- {formattedDate} • {timeRange} -

- )} -
-
- - {/* CTA */} -
- - See all speakers - -
-
+ {/* Desktop right column - Photo and session title */} +
+ {/* Speaker photo with yellow background */} + + + {/* Decorative plus */} +
+ + +
+ + {/* Small decorative box */} +
+
- )} + + {/* Session title box */} + +
-

+ + {/* Bottom CTA button */} +
+ + SEE ALL SPEAKERS + +
+
); -} +} \ No newline at end of file