Vejle mod hudcancer
Danish non-profit website
Role
Frontend Developer
Stack
Next.js 15, TypeScript, Sanity CMS, Tailwind CSS v4, Framer Motion, Radix UI
Year
2025

01/The Constraint
Vejle mod hudcancer is a Danish non-profit that has raised over 3.4 million DKK for local skin cancer research since 2017, with 100% of donations going directly to research. The organization needed a website their non-technical team could update on their own — new research projects, photo galleries, event announcements — without any developer involvement. The site is entirely in Danish, and the design had to communicate trust for an organization whose collections are audited by Ernst & Young.
02/The Architecture
Sanity CMS provides the content layer with GROQ queries driving all page data. Content types include research projects with funding goals and status tracking, gallery year pages with photographer-categorized image batches, and event pages. All pages are server components that fetch at build time, with tiered ISR revalidation — 60 seconds for the project landing page, 300 seconds for standard content, 600 seconds for navigation data. React cache() deduplicates requests within a single render pass. The header navigation fetches project and gallery previews from Sanity in parallel via Promise.all, rendering dynamic dropdown menus with Radix NavigationMenu.
03/The Interface
The projects section features spring-animated fundraising counters and animated bar charts that build sequentially on scroll, showing money raised per year with 3D shadow effects. Individual project pages show a funding progress bar, status badges, and image galleries — all CMS-driven via generateStaticParams. The gallery pages support filtering by photographer and photobooth categories using Radix Tabs, with a full-screen lightbox and download capability. The responsive header transforms on scroll — adding a blur backdrop, rounded corners, and floating effect — and the mobile menu uses Framer Motion for staggered item reveals with body scroll lock. Adobe Typekit serves the brand fonts: Adelle (serif) for headlines and Adelle Sans for body text.

