-
- {/* Top eyebrow */}
-
- Kunstenkamp
-
-
-
- Kamp
- Inschrijvingen
-
-
- {/* Details */}
-
-
-
- Leeftijd
-
-
- 9*–18 jaar
-
-
- * geboortejaar dat je 10 wordt
-
-
-
-
- Data
-
-
- 20/07–25/07/2026
-
- 27/07–01/08/2026
-
-
-
-
- Locatie
-
-
- Camp de Limauges · Chemin de Bigaumont 2 · 1341 Ceroux-Mousty
-
-
-
-
- {/* CTA */}
-
-
+ {/* Top double rule */}
+
- {/* Corner decoration */}
-
-
-
- {/* ── Open Mic Night ────────────────────────────────────────────── */}
-
setHovered("openmic")}
- onMouseLeave={() => setHovered(null)}
- aria-label="Ga naar de Open Mic Night inschrijvingen"
- >
- {/* Diagonal stripe texture */}
-
-
- {/* White accent bar */}
-
-
- {/* Content — constrained width, centered */}
-
-
- {/* Top eyebrow */}
+
+
- Ongedesemd Woord
+ ✦ Aankondiging · Zomerkamp 2026 ✦
-
-
- Open
- Mic Night
-
-
- {/* Details */}
-
+
-
-
- Datum
-
-
- Vrijdag 24 april 2026
-
- 19u30
-
-
-
-
- Optreden
-
-
- 5 min podiumtijd
-
- Alle kunstvormen
-
-
-
-
- Locatie
-
-
- Lange Winkelstraat 5 · 2000 Antwerpen
-
-
-
-
- {/* CTA */}
-
+ Schrijf je in →
+
+
-
+
);
}
+
+function HomePage() {
+ const [showBanner, setShowBanner] = useState(false);
+
+ useEffect(() => {
+ if (!localStorage.getItem(KAMP_BANNER_KEY)) {
+ setShowBanner(true);
+ }
+ }, []);
+
+ const dismissBanner = () => {
+ localStorage.setItem(KAMP_BANNER_KEY, "1");
+ setShowBanner(false);
+ };
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+ {showBanner &&
}
+ >
+ );
+}
diff --git a/apps/web/src/routes/kamp.tsx b/apps/web/src/routes/kamp.tsx
new file mode 100644
index 0000000..279aa89
--- /dev/null
+++ b/apps/web/src/routes/kamp.tsx
@@ -0,0 +1,474 @@
+import { createFileRoute, Link } from "@tanstack/react-router";
+import { useEffect, useState } from "react";
+
+const KAMP_URL = "https://ejv.be/jong/kampen/kunstenkamp/";
+
+export const Route = createFileRoute("/kamp")({
+ component: KampPage,
+});
+
+const STYLES = `
+@import url('https://fonts.googleapis.com/css2?family=UnifrakturMaguntia&family=Playfair+Display:ital,wght@0,400;0,700;0,900;1,400;1,700&family=EB+Garamond:ital,wght@0,400;0,500;1,400;1,500&family=Special+Elite&display=swap');
+
+@keyframes kampPressIn {
+ from { opacity: 0; }
+ to { opacity: 1; }
+}
+
+body.kamp-page {
+ background-color: #d6cdb0 !important;
+ overflow: hidden;
+}
+
+body.kamp-page ::selection {
+ background: #12100e;
+ color: #ede4c8;
+}
+
+.kamp-scroll::-webkit-scrollbar {
+ width: 6px;
+}
+.kamp-scroll::-webkit-scrollbar-track {
+ background: #c9c0a4;
+}
+.kamp-scroll::-webkit-scrollbar-thumb {
+ background: #12100e;
+}
+`;
+
+const PAPER = "#ede4c8";
+const INK = "#12100e";
+const INK_MID = "rgba(18,16,14,0.5)";
+const INK_GHOST = "rgba(18,16,14,0.2)";
+const RULE_W = "rgba(18,16,14,0.75)";
+
+function TripleRule() {
+ return (
+
+ );
+}
+
+function DoubleRule() {
+ return (
+
+ );
+}
+
+function KampPage() {
+ const [mounted, setMounted] = useState(false);
+ const [ctaHovered, setCtaHovered] = useState(false);
+
+ useEffect(() => {
+ if (!document.getElementById("kamp-newspaper-styles")) {
+ const el = document.createElement("style");
+ el.id = "kamp-newspaper-styles";
+ el.textContent = STYLES;
+ document.head.appendChild(el);
+ }
+ document.body.classList.add("kamp-page");
+ const t = setTimeout(() => setMounted(true), 60);
+ return () => {
+ document.body.classList.remove("kamp-page");
+ clearTimeout(t);
+ };
+ }, []);
+
+ return (
+
+ {/* Newspaper page */}
+
+ {/* Outer decorative border inset */}
+
+ {/* Top flag strip */}
+
+
+ ← Open Mic Night
+
+
+ ✦ · ✦ · ✦
+
+
+ Anno 2026
+
+
+
+ {/* Masthead */}
+
+
+ De Kunstenkamp Gazet
+
+
+
+ {/* Publication bar */}
+
+ {[
+ "Vol. CCXXVI",
+ "Zomerkamp · Juli 2026",
+ "Prijs: uw aanwezigheid",
+ ].map((t) => (
+
+ {t}
+
+ ))}
+
+
+ {/* Main content area */}
+
+ {/* Triple rule */}
+
+
+
+
+ {/* Main headline */}
+
+
+ Wat Is Waar?
+
+
+ Een krant. Een tijdmachine. De waarheid doorheen de eeuwen.
+
+
+
+ {/* Triple rule */}
+
+
+
+
+ {/* Editorial body copy */}
+
+ In de zomer van 1826 — en opnieuw in 2026 — reizen onze verslaggevers
+ terug naar de roerige redactiezalen van de negentiende eeuw. Waar de
+ drukpers ronkt, de rookmachines tieren en elke kop een mening
+ verbergt, stellen wij de vraag die door alle eeuwen galmt:{" "}
+ wat mogen wij geloven?
+
+
+ Twee waarheden en een leugen. Vier bolhoeden en één typmachine.
+ Bereid u voor op een week journalistiek, theater, dans en woordkunst
+ — alles gehuld in inkt en papier-maché.
+
+
+ {/* Ornamental divider */}
+
+ — ✦ · ✦ · ✦ —
+
+
+ {/* Details grid */}
+
+ {[
+ { label: "Primo", value: "20 – 25 Juli 2026" },
+ { label: "Secundo", value: "27 Juli – 1 Aug 2026" },
+ {
+ label: "Leeftijd",
+ value: "9 – 18 jaar",
+ sub: "* geboortejaar dat je 10 wordt",
+ },
+ {
+ label: "Locatie",
+ value: "Camp de Limauges",
+ sub: "Ceroux-Mousty · België",
+ },
+ ].map(({ label, value, sub }, i) => (
+
= 2 ? `1px solid ${INK}` : undefined,
+ }}
+ >
+
+ {label}
+
+
+ {value}
+
+ {sub && (
+
+ {sub}
+
+ )}
+
+ ))}
+
+
+ {/* Double rule */}
+
+
+
+
+ {/* CTA — inverted ink block */}
+
+
+
+ {/* Footer */}
+
+
+ Kunst · Expressie · Avontuur · Waar is de waarheid?
+
+
+
+
+
+ );
+}
diff --git a/apps/web/src/routes/open-mic.tsx b/apps/web/src/routes/open-mic.tsx
deleted file mode 100644
index a4484e6..0000000
--- a/apps/web/src/routes/open-mic.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import { createFileRoute } from "@tanstack/react-router";
-import EventRegistrationForm from "@/components/homepage/EventRegistrationForm";
-import Footer from "@/components/homepage/Footer";
-import Hero from "@/components/homepage/Hero";
-import HoeInschrijven from "@/components/homepage/HoeInschrijven";
-import Info from "@/components/homepage/Info";
-
-export const Route = createFileRoute("/open-mic")({
- component: OpenMicPage,
-});
-
-function OpenMicPage() {
- return (
-
-
-
-
-
-
-
-
-
- );
-}