sdrgaard.dk

Portfolio

Et headless portfolio bygget med Next.js og Umbraco, udviklet som et personligt projekt for at udforske moderne frontend-arkitektur og få praktisk erfaring med teknologier, som jeg gerne ville arbejde mere med.

Next.jsReactTypeScriptTailwind CSSshadcn/uiUmbraco.NET CoreC#VercelSimply
01

Projektet

Dette portfolio er både en personlig hjemmeside og en legeplads, hvor jeg kan udforske nye teknologier.

Umbraco bruges som et headless CMS, mens Next.js står for frontenden. De to applikationer hostes hver for sig, idet Umbraco kører på Simply, og Next.js-frontend’en er hostet på Vercel.

Indholdet er opbygget af genbrugelige komponenter, som gør det muligt at sammensætte forskellige sidetyper og layouts ud fra de samme byggesten. Det giver en fleksibel frontend og gør det nemt at oprette nye sider og cases.

02

Arkitektur

Frontenden er udviklet med Next.js og React og henter indhold fra Umbraco via Delivery API.

Der anvendes TypeScript i hele frontenden, hvor API-typerne genereres automatisk ud fra Umbracos OpenAPI-specifikation. Dette sikrer, at frontend-modellerne følger API’et nøje.

03

Custom preview

Da frontenden er helt adskilt fra CMS’et, har jeg implementeret en custom preview-visning mellem Umbraco og Next.js.

En custom URL provider i Umbraco genererer preview-URL’er til den tilsvarende Next.js-route. URL’en indeholder indholdsstien og et delt token, hvilket gør det muligt for Next.js at hente og vise udkast til indhold uden først at offentliggøre det.

04

Frontend

Frontenden er næsten udelukkende bygget med Tailwind CSS, mens shadcn/ui anvendes til et lille antal UI-komponenter.

Jeg ønskede at undersøge, hvor langt jeg kunne gå med en utility-first-tilgang, samtidig med at komponentstrukturen forblev enkel og genanvendelig.

Til sidens scroll-animationer implementerede jeg et lille, tilpasset Intersection Observer-værktøj i stedet for at indføre et dedikeret animationsbibliotek. Det registrerer elementer, når de bliver synlige på skærmen, og anvender den relevante animationstilstand.