Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion app/home/HomeClient.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -151,10 +151,18 @@ export default function HomeClient({ initialPartners, initialStartups }: HomeCli
<span className="text-white drop-shadow-lg">BELONG.</span>
</h1>

<p className={`text-lg sm:text-xl text-gray-200 max-w-lg mb-10 leading-relaxed transition-all duration-1000 delay-400 ${loaded ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'}`}>
<p className={`text-lg sm:text-xl text-gray-200 max-w-lg mb-6 leading-relaxed transition-all duration-1000 delay-400 ${loaded ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'}`}>
START Munich is the largest student-run entrepreneurship community in Munich.
We empower the next generation of founders to dare, build, and belong.
</p>
{Date.now() >= new Date('2026-04-10T00:00:00+02:00').getTime() && (
<Link
href="/join-start/2026"
className={`inline-flex items-center justify-center px-8 py-3 bg-brand-pink text-white font-bold rounded-xl hover:shadow-[0_0_30px_rgba(208,0,111,0.4)] transition-all duration-1000 delay-500 ${loaded ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'}`}
>
Apply Now
</Link>
)}
Comment on lines +158 to +165
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot Apr 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

git ls-files app/home/ app/join-start/ | head -20

Repository: startmunich/website-special-pages

Length of output: 187


🏁 Script executed:

fd -e tsx -e ts app/home HomeClient

Repository: startmunich/website-special-pages

Length of output: 174


🏁 Script executed:

fd -e tsx -e ts app/join-start 2026

Repository: startmunich/website-special-pages

Length of output: 168


🏁 Script executed:

cat -n app/home/HomeClient.tsx | sed -n '150,175p'

Repository: startmunich/website-special-pages

Length of output: 1664


🏁 Script executed:

cat -n app/join-start/2026/JoinStartClient.tsx | sed -n '1,20p'

Repository: startmunich/website-special-pages

Length of output: 743


Stabilize the launch gate across render and hydration cycles.

The Date.now() check on line 158 runs during render, causing the CTA visibility to depend on when the cached homepage HTML was produced. This creates a hydration mismatch on the client around April 10, 2026, where prerendered HTML and the hydrated tree may disagree. The timestamp is also duplicated in app/join-start/2026/JoinStartClient.tsx:8, creating maintenance risk if the launch date changes.

Suggested fix

Extract the timestamp to a shared constant and gate the render on hydration completion:

+const JOIN_START_2026_LAUNCH_AT = new Date('2026-04-10T00:00:00+02:00').getTime()
...
-              {Date.now() >= new Date('2026-04-10T00:00:00+02:00').getTime() && (
+              {loaded && Date.now() >= JOIN_START_2026_LAUNCH_AT && (

This ensures the CTA only appears after the client hydrates, eliminating the mismatch window.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/home/HomeClient.tsx` around lines 158 - 165, Extract the hardcoded launch
timestamp (currently used in HomeClient.tsx and JoinStartClient.tsx) into a
shared constant (e.g., EXPORT const LAUNCH_DATE = new
Date('2026-04-10T00:00:00+02:00')) and import it into both modules; then change
the render condition in HomeClient.tsx to check the LAUNCH_DATE against
Date.now() only after hydration by using the existing hydration flag (loaded) so
the CTA rendering is gated on loaded && Date.now() >= LAUNCH_DATE.getTime(),
preventing prerender/hydration mismatch and centralizing the date for
maintenance.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, ich approve mal, aber schau dir trotzdem das evtl noch mal an

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check the launch date usage in JoinStartClient.tsx
grep -n "2026-04-10\|LAUNCH\|beta\|Date.now\|loaded" app/join-start/2026/JoinStartClient.tsx | head -30

# Also check HomeClient.tsx for current state
grep -n "Date.now\|loaded\|JOIN_START\|LAUNCH" app/home/HomeClient.tsx | head -20

Length of output: 1085


@SimonBurmer Danke! Die beiden Punkte aus meinem ursprünglichen Review sind tatsächlich noch offen:

1. Hydration mismatch (HomeClient.tsx, Line 158)

loaded wird bereits in der className des Buttons verwendet (Line 161), aber nicht in der Render-Bedingung selbst. Das bedeutet der Server rendert den Button basierend auf dem Build-Zeitpunkt, der Client hydratisiert aber zum tatsächlichen Aufruf-Zeitpunkt — das kann kurz um den 10. April zu Inkonsistenzen führen:

- {Date.now() >= new Date('2026-04-10T00:00:00+02:00').getTime() && (
+ {loaded && Date.now() >= LAUNCH_DATE && (

2. Dupliziertes Datum

JoinStartClient.tsx definiert bereits const LAUNCH_DATE = new Date('2026-04-10T00:00:00+02:00').getTime() (Line 8), aber HomeClient.tsx dupliziert denselben Wert inline. Empfehlung: die Konstante in eine geteilte Datei auslagern, z.B.:

// lib/constants.ts
export const LAUNCH_DATE_2026 = new Date('2026-04-10T00:00:00+02:00').getTime()

Und dann in beide Komponenten importieren:

import { LAUNCH_DATE_2026 } from '@/lib/constants'

Da der 10. April bereits vorbei ist und der Button dauerhaft sichtbar ist, ist der Hydration-Bug jetzt weniger kritisch — aber die geteilte Konstante bleibt trotzdem sinnvoll für Wartbarkeit.


</div>

Expand Down
370 changes: 370 additions & 0 deletions app/join-start/2026/JoinStartClient.tsx

Large diffs are not rendered by default.

12 changes: 2 additions & 10 deletions app/join-start/2026/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { Metadata } from 'next'
import Hero from '@/components/Hero'
import JoinStartClient from './JoinStartClient'

export const metadata: Metadata = {
title: 'Join START Munich 2026',
Expand All @@ -15,13 +15,5 @@ export const metadata: Metadata = {
}

export default function JoinStart2026Page() {
return (
<main className="min-h-screen bg-brand-dark-blue text-white">
<Hero
backgroundImage="/memberJourney/hero-opt.png"
title={<>JOIN <span className="outline-text">START MUNICH</span></>}
description="Applications for 2026 will open soon. Stay tuned."
/>
</main>
)
return <JoinStartClient />
}
3 changes: 1 addition & 2 deletions next-env.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
/// <reference path="./.next/types/routes.d.ts" />

// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.
15 changes: 15 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added public/join-start-2026-bg.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/join-start/coffee-run-lap.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/join-start/fes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/join-start/info-session-2026.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/join-start/info-session.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/join-start/initiative-showcase.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/join-start/jumpstart.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/join-start/online-info.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/join-start/running-club.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/join-start/start-summit.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/join-start/student-club-fair.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/join-start/sunset-run.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/join-start/volleyball.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/join-start/yc-event.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion tsconfig.tsbuildinfo

Large diffs are not rendered by default.