Bygget til enterprise-teams der har valgt Contentful og har brug for et produktions-Next.js-16-fundament uden at brænde et kvartal på rør. Tolv content-blocks på tværs af fyrre layouts. Live Preview wired end-to-end. Type-sikre content-modeller. Multi-sprog med auto slug-change redirects. ISR med tag-baseret revalidation. Hærdet CSP. Leveret som kildekode til dit repo — ingen SaaS, ingen per-seat-fees, ingen royalties. Sparer 5–6 måneders senior-engineer-fundamentarbejde.
Links mellem indholdstyper er manuelle. Én slug-ændring brækker 200 entries i stilhed.
Vanilla Contentful tvinger dig til at bygge det hele selv — locale-fallbacks, delvise oversættelser, detektion af manglende nøgler og enhver form for synkronisering af oversættelser overlades til dig. Medmindre du parrer kittet med Translately, vores companion-produkt der oversætter entries automatisk ved publicering på ~4 sek.
Hver URL-ændring er en udvikleropgave. SEO lider. Marketing venter.
Formularer bliver hardkodet ind i komponenterne. Marketing kan ikke sende en kampagne uden en sprint.
Strengbaseret tilgang til indhold, runtime-fejl, nul compile-time-sikkerhed.
Sider lever i en flad liste. Ingen forælder/barn-relationer, ingen breadcrumbs fra træet, ingen måde at se, hvordan indholdet faktisk hænger sammen.
Ikke en hero, en footer og en README. Et reelt fundament: designsystem, Live Preview, typet datalag, i18n, søgning, formularer, analytics, sikkerhed og dokumentationen til at udvide det hele.
Next.js 16 App Router på React 19, locale-route-groups, single-entry proxy.ts til redirects og rewrites.
Next.js 16 App Router på React 19 med route groups under app/[locale]/(marketing|sandbox|system) og experimental.rootParams + next/root-params, der føder locale ind i layout-træet. En single-entry proxy.ts (Next 16-konventionen — ingen separat middleware.ts) håndterer CMS-redirects, automatiske slug-redirects, locale-rewrites, skjult default-locale i URL'er og et multi-locale-path-map, som sitemap, hreflang og sprogskifter deler.
Én pnpm setup opsætter hele spacet — indholdstyper, locales, sidebar-mapper, demo-indhold, ISR-webhook.
pnpm setup (= pnpm cf:sync && pnpm cf:setup) introspicerer det live Contentful CDA-skema, regenererer types/contentful/*, scaffolder nye GraphQL-fragments + React-blok-komponenter + blockMap-poster for hver uregistreret block*-indholdstype, kører graphql-codegen, og opretter herefter indholdstyper, en-US/de-DE-locales, sidebar-view-mapper (rlc--prefix, redaktørernes egne mapper bevares), regex-validering på hvert symbol-felt, demo-assets og en fuldt opkoblet demo-side — og registrerer Contentful → /api/revalidate-webhooken mod dit deploy-origin (managed name 'RLC — Next.js ISR revalidate', idempotent, env-scoped filter, loopback-hosts afvises). Drift-detektoren (pnpm cf:sync:check) kobles på predev (advarsel) og prebuild (CI-fejl), så forældede GraphQL-typer aldrig når production. EU-spaces virker fra start via CONTENTFUL_API_HOST=api.eu.contentful.com. cf:migrate, cf:seed, cf:reset, cf:generate-types, cf:codegen og cf:export er separate kommandoer. Nyt miljø på fem minutter, ikke fem dage.
12 blokke fordelt på 40 opsætninger og 6 toner — hver variant visuelt distinkt, hvert CMS-valg TypeScript-tjekket.
12 blokke (Hero, FeatureShowcase, FeatureGrid, StatsBand, LogoBar, Testimonial, FAQ, MediaShowcase, RichText, CallToAction, LeadCaptureForm, ContactInfo) fordelt på 40 opsætninger og 6 toner (default, muted, sunken, brand, accent, inverse) — hver opsætning visuelt distinkt med vilje. resolveBlockVariant() validerer hvert CMS-valg; et automatisk regenereret blockMap betyder, at TypeScript fanger enhver drift mellem kode og CMS.
Redigerbar header, mega-menu og footer — omstrukturér sitets nav fra Contentful, ingen deploy nødvendig.
Header i flere niveauer med mega-menu og valgfrit megaMenuImage pr. punkt, navigationMenu/Group/Item-indholdstyper og en footer, der renderer navigationsgrupper, sociale links og juridiske links — alt redigerbart i Contentful, ingen deploy nødvendig for at omstrukturere hele sitets navigation.
Locale-fallbacks, lokaliserede slugs, hreflang, CMS-ordbøger — tilføj et sprog i to filændringer.
Klar til flere locales fra start — demoen leveres med to locales, men arkitekturen understøtter ubegrænset. Locale-fallback-kæder indbygget i hver CMS-forespørgsel, lokaliserede forælder- og barn-slugs, hreflang-generering, skjult default-locale i URL'er og en CMS-styret localizedDictionary-indholdstype med {token}-interpolation. Tilføj et nyt sprog i to filændringer. Par med Translately for at oversætte hver CMS-entry automatisk ved publicering — den medfølgende kredit dækker hele dit site i 6+ måneder.
Auto-sitemap, hreflang, JSON-LD, dynamisk OG, /llms.txt og AI-crawler-policy — discoverable overalt.
SEO- og Open Graph-felter pr. side, dynamisk generateMetadata med canonical og language alternates, JSON-LD for Organization, WebSite + SearchAction, BreadcrumbList, WebPage og FAQPage, auto-sitemap.xml der gennemløber hver locales lokaliserede slug, robots.ts, CMS-styrede regex/wildcard-redirects og en /llms.txt-rute plus env-styret AI_CRAWLER_POLICY til GEO/AI-SEO.
Sæt formularer sammen i Contentful: generisk submit-endpoint, vedhæftede filer, betinget routing, Resend, Zod, DOMPurify.
Sæt formularer sammen i Contentful. Generisk /api/forms/submit-endpoint håndterer JSON og multipart med op til 25 MB vedhæftede filer, betinget routing til modtagere pr. feltvalg, Resend-afsendelse, HTML- og plain-text-bodies, React Hook Form + Zod på klienten og DOMPurify-rensning på serveren.
Algolia-indeksering over hele blokgrafen + instant-search-UI + dedikeret /search-side, lazy-loaded.
En Algolia-indeksering, der gennemløber hele blokgrafen, udtrækker ren tekst fra rich-text-indhold og bygger breadcrumbs og records pr. locale. Instant-search-UI med debounce og keyboard-navigation, dedikeret /search-side, lazy-loaded algoliasearch/lite — hele funktionen skjuler sig pænt, når env vars mangler.
Tracking-agnostisk: CMS-styrede events, GTM/GA4 opt-in, Vercel Web Vitals, Sentry. First-party Plausible tilgængeligt som betalt tilvalg.
Provider-agnostisk event-lag: redaktører sætter trackingEventName og trackingEnabled på sider, knapper, formularer og nav — ét schema sendes videre via NEXT_PUBLIC_ANALYTICS_PROVIDERS til alle aktiverede providers. Default: GTM/GA4 opt-in (din egen konto, env-gated via siteSettings.gtmId) + Vercel Web Analytics til Web Vitals + Sentry med sampling, session-replay og struktureret logging med redaction. First-party Plausible er tilgængeligt som valgfrit betalt tilvalg: hosted integration (3.750 DKK / EUR 500, engangsbeløb) eller self-hosted på din egen infrastruktur (11.250 DKK / EUR 1.500, engangsbeløb).
Striks CSP, HSTS, Permissions-Policy, rate-limiter, env-validering, typet fejl-handler, DOMPurify overalt.
Striks CSP inklusive Cookiebot/Sentry/GTM/Vercel/Contentful — plus en frame-ancestors-undtagelse til Live Preview — HSTS preload, Permissions-Policy, env-validering via @t3-oss/env-nextjs, en IP-rate-limiter med ordentlige headers, en typet fejl-handler med ValidationError/UnauthorizedError/NotFoundError, og DOMPurify-rensning overalt, hvor brugerinput kommer ind.
Turbopack, AVIF/WebP, ISR med granulære cache-tags, polyfill-stripper, codegen, Tailwind v4 — Lighthouse 100.
Turbopack dev og byg, AVIF/WebP-billed-pipeline med fetchPriority + quality + minimumCacheTTL, ISR via unstable_cache (60s tag) med webhook revalidateTag('contentful', 'max') plus granulær tag-fan-out (contentful:type:<id>, contentful:entry:<id>, contentful:locale:<code>) så en enkelt FAQ-redigering ikke længere blæser hele CMS-cachen, scripts/strip-next-polyfills.mjs (prebuild + postinstall) der neutraliserer det legacy polyfill-modul for kittets moderne browserslist (Chrome ≥ 111, Safari ≥ 16.4) — en målbar løftestang til Lighthouse 100 — pnpm cf:sync-orkestrator + graphql-codegen til typede GraphQL-operationer, optimering af pakkeimports, bundle analyzer, React Query-provider afgrænset til sandbox-layoutet, Framer Motion, Swiper-karruseller, ESLint flat config, Tailwind v4 og én samlet docs/ARCHITECTURE.md-reference (~750 linjer, hvert lag i sin egen nummererede sektion).
Industrial-precise primitives, JetBrains Mono, semantiske landemærker, Radix accordion/dialog — tilgængelige fra start.
Industrial-precise primitives (Section, SectionHeader, MediaFrame frame="technical" med hjørne-tickmærker, KeyStat, Marker, MetaRow, FAQItem, ProseBlock, LogoMark) på JetBrains Mono via next/font, skip-to-main-link, semantiske landemærker, error boundary med fallback, 404-side, Radix accordion + dialog og Cookiebot-klar samtykke — alle tilgængelige fra start.
Målt på den deployede demo — et reelt marketing-site med 12 blokke, navigation, fonts, analytics-providers, Sentry og Live Preview koblet op.
Kittet er bygget rundt om redaktøren, ikke rundt om udvikleren. Live Preview koblet op fra ende til anden, lukkede enums for opsætning og tone, sidebar-mapper der matcher informationsarkitekturen, og slug-ændringer der laver redirects automatisk.
Inspector-tags på hver blok, /api/draft- og /api/disable-draft-ruter, LivePreviewProvider i layoutet, et preview-banner på siden og en CSP frame-ancestors-undtagelse for app.contentful.com / app.eu.contentful.com. Redaktørerne ser deres ændringer direkte, uden ny publicering, uden at en iframe brækkes af sikkerhedsheaders.
Lukkede enums for opsætning og tone på hver blok — op til 24 gyldige sammensætninger pr. blok (4 opsætninger × 6 toner), hver eneste visuelt distinkt med vilje. Redaktørerne vælger fra en dropdown; ingen taster hex-farver, ingen opfinder en ny opsætning i et CMS-felt.
Managed rlc--mapper opsat af pnpm cf:setup, så Contentful-sidebaren matcher sitets informationsarkitektur fra start. Redaktørernes egne (ikke-rlc-) mapper bevares ved hver gen-kørsel, så redaktørtilpasninger og managed struktur lever side om side.
Skift en slug, tryk publicér — den automatisk registrerede Contentful-webhook kalder /api/revalidate, der fyrer revalidateTag('contentful', 'max') plus rute-revalidering, sammenligner gamle og nye snapshots og skriver en redirect-entry via Management API'en. Proxyen serverer redirecten ved næste request. Friskt indhold og SEO-historik bevaret uden en udvikleropgave.
Industrial-precise design-tokens, et typet REST + TanStack Query-lag, ISR med ordentlig cache-disciplin, kodegenerering ved hvert byg og en single-entry edge proxy.ts. Den kedelige infrastruktur, der betaler sig fra uge ét.
Carbon/Palantir-tokens, JetBrains Mono, hårfin elevation, skarpe radii — 6 toner koblet ind i hver blok.
Carbon/Palantir-inspirerede tokens — cobalt #1B4DE0 brand, slate-neutrals, JetBrains Mono via next/font, hårfin elevation, skarpe 2–4px-radii, en bg-grid-utility og frame-tick-CAD-viewport-hjørnetickmærker. 6 toner (default, muted, sunken, brand, accent, inverse) koblet ind i hver blok. Dokumenteret i docs/ARCHITECTURE.md (#design-system).
Bearer apiFetch + Zod, query-keys, SSR-prefetch, optimistiske opdateringer — kørbar Posts-CRUD-demo fra start.
apiFetch med Bearer-auth, AbortSignal, timeouts og Zod-parsing; en hierarkisk query-keys-factory; SSR-prefetch + HydrationBoundary; optimistiske opdateringer med rollback; en kørbar Posts-CRUD-demo på /[locale]/examples/posts inde i (sandbox)-rutegruppen, med QueryProvider afgrænset til det layout (ikke globalt, så resten af marketing-træet bliver SSG). Default mod JSONPlaceholder, så den kører fra start; pegt mod dit eget backend med én env var. CMS'et selv bruger et separat hybridt Contentful-lag (REST CDA + GraphQL CDA + REST CMA) — se sektionen Hybrid Contentful API nedenfor. Dokumenteret i docs/ARCHITECTURE.md (#rest-api-and-tanstack-query).
60s revalidate, tags pr. entry/type/locale — én FAQ-redigering invaliderer ét tag, ikke hele sitet.
Production-reads bruger unstable_cache med et 60s-revalidate-vindue. Den automatisk registrerede Contentful-webhook (pnpm cf:setup mod PRODUCTION_APP_URL — loopback-hosts afvises) fyrer revalidateTag('contentful', 'max') plus pr.-scope-tags: contentful:type:<contentTypeId>, contentful:entry:<id>, contentful:locale:<contentfulLocaleCode>. En enkelt FAQ-redigering invaliderer FAQ-entry-tagget og FAQ-type-tagget — ikke hele CMS-cachen. Dev og Draft Mode springer cachen over, så redaktørerne ser ændringer ved refresh — ingen genstart, intet stale loop.
To kodegeneratorer holdes synkroniseret — modeldrift bliver en build-fejl, ikke en production-500.
To kodegeneratorer holdes synkroniseret via pnpm cf:sync: cf-content-types-generator regenererer types/contentful/* (brugt af REST-SDK'et og CMA-skrivninger); graphql-codegen forbruger et committed graphql/schema.graphql-snapshot + hver .graphql-operation/-fragment og emitterer graphql/generated/index.ts med TypedDocumentNode-konstanter og Query/Variables-typer pr. operation. Drift-detektoren (pnpm cf:sync:check) kobles på predev (advarsel) og prebuild (CI-fejl) — modeldrift bliver en build-fejl, ikke en production-500.
/llms.txt + AI_CRAWLER_POLICY + FAQPage/WebPage-JSON-LD — discoverable for mennesker og AI-søgning.
En /llms.txt-rute (cached 1 t., lister site settings, path-mappet og sitemap-linket), env-styret AI_CRAWLER_POLICY (open eller restricted), FAQPage- og WebPage-JSON-LD, OG siteName og url, og et sitemap, der gennemløber hver locales lokaliserede slug. Lever discoverable for mennesker, AI-søgning og traditionelle crawlers uden et separat SEO-projekt.
Én fil ejer hver URL: CMS-redirects, automatiske slug-redirects, locale-rewrites, hreflang-path-map.
En single-entry proxy.ts (Next 16-konventionen — ingen separat middleware.ts) håndterer CMS-styrede regex/wildcard-redirects, automatiske slug-redirects skrevet af revalidate-webhooken, locale-rewrites, skjult default-locale i URL'er, og et multi-locale-path-map, som sitemap, hreflang og sprogskifter deler. Én fil ejer hver URL, brugeren nogensinde ser.
Ingen eksotisk infrastruktur. Next.js på Vercel, Contentful som single source of truth, edge middleware til routing og redirects, Live Preview til redaktøren.
To transports, én fetcher. Hvert kald bruger den API, der vinder på payload, round-trips og bundle — i stedet for at lade som om den ene passer til alt.
GraphQL er server-only — TanStack Query (REST) er den eneste klient.
GraphQL PageIndex + parent-walk — var N round-trips på cold cache.
Granulær tag-fan-out — var hele CMS-cachen, der gik cold.
Hvert kort er et reelt kaldsted i lib/cms/. 'Før' er REST-only-baselinen; 'efter' er det, kittet leverer.
Fuldt sidetræ ved hvert ucached request — pagineret gennem hundredvis af entries.
GraphQL PageIndex returnerer kun { id, slug, parentId } og gennemløber forælder-kæden i hukommelsen.
Pr.-locale-retry-loop — én round-trip pr. forsøgt locale på cold cache.
GraphQL med useFallbackLocale: true — Contentful gennemløber kæden server-side.
Webhook fyrer én global revalidateTag — hver cached CMS-side bliver cold.
Webhook fyrer pr.-type-, pr.-entry-, pr.-locale-tags baseret på payloaden.
REST getEntry med include: 10 — dyb graf, reference-resolver stripper cykler.
Samme — REST bliver. At hånd-skrive en tilsvarende GraphQL-selection er skrøbeligt.
REST CMA + contentful-migration — intet GraphQL-alternativ til CMA.
Samme — REST CMA bliver. Server-/CI-only, når aldrig browseren.
Hånd-rullet fetch pr. kaldsted, ad hoc auth, ingen caching.
Typet apiFetch (Bearer + Zod) + TanStack Query — SSR-prefetch + optimistiske opdateringer.
REST-SDK-typer stopper ved response-grænsen; entry.fields.X er unknown.
To kodegeneratorer holdes synkroniseret via pnpm cf:sync — REST-typer + TypedDocumentNode-operationer.
GraphQL-only sender Apollo/urql/Relay — 30–80 KB+ gzip på hver side.
GraphQL er server-only; browseren beholder TanStack Query (REST) til ekstern CRUD.
Over-fetched include-træer + pr.-locale-retry-loops + global invalidering = mange kald pr. render.
Slanke GraphQL på varme paths + server-side fallback + scoped tags = langt færre origin-hits.
Hvert CMS-read — REST eller GraphQL — løber gennem én cmsFetch-wrapper. Samme retry, samme cache, samme tag-fan-out.
Locale-afgrænsede ruter, hreflang, fallbacks og CMS-ordbøger er med i kassen. Til selve oversættelsen af hver Contentful-entry ved publicering — ingen plugins, ingen eksport, intet manuelt workflow — par kittet med Translately, vores companion-produkt. Webhook ind, oversatte entries tilbage i Contentful på ~4 sekunder.
Gem i Contentful. Translately opfanger ændringen, oversætter til hver aktiv locale og skriver resultatet tilbage på samme entry — ingen plugins, ingen UI at vedligeholde.
En typisk entry oversættes og skrives tilbage på ca. fire sekunder. Massevis-oversæt dit eksisterende space i ét klik til den indledende backfill.
$0,075 pr. 1.000 tegn til lanceringspris, låst i 12 måneder fra tilmelding. AES-256-GCM-kryptering af legitimationsoplysninger, GDPR-klar, EU-regionsupport, indholdet gemmes aldrig.
ca. 11.200 DKK i Translately-kredit inkluderet.
Cirka 21 millioner tegn til lanceringspris. Nok til at oversætte et 200-siders site til 10 sprog og køre 6+ måneders auto-synkronisering ved publicering — uden nogensinde at skulle fylde op.
Hver række er en SaaS-faktura eller et engangsprojekt, som de fleste marketing-sites ender med at betale for. Kittet leverer dem dag ét, i dit repo, under din licens.
| Hvad du ellers ville betale for | Typisk pris | Hvad kittet leverer |
|---|---|---|
| Builder.io / Storyblok Visual Editor | $500–4.000 / md. | Typet sidemotor med blokke: 12 blokke · 40 opsætninger · 6 toner, hver opsætning visuelt distinkt |
| Algolia / Coveo / Elastic Site Search | fra ~$500 / md. i skala | Algolia-indeksering over hele blokgrafen + instant-search-UI + /search-side |
| HubSpot Forms / Formspree | $45–800 / md. | Skemastyret blockForm + /api/forms/submit med vedhæftede filer + betinget routing |
| Cookiebot / OneTrust | ca. 75.000–600.000 DKK/år enterprise tier | Cookiebot-klar striks CSP og samtykke-banner leveret |
| Lokalise / Phrase / Crowdin Pages + manuelt oversættelses-workflow | fra ~$200 / md. + integration + gebyr pr. sprog | Lokaliseret routing, hreflang, fallbacks, CMS-ordbøger og automatiske slug-redirects leveret — plus ca. 11.200 DKK i Translately-kredit til automatisk oversættelse ved publicering (Translately er vores companion-produkt, $0,075 pr. 1.000 tegn til lanceringspris) |
| Datadog RUM / LogRocket | fra ~$15 / host / md. | Web Vitals RUM + Sentry med sampling, replay og støjfiltrering |
| Redirection.io | ca. 750–3.750 DKK/md. | CMS-styret redirect-indholdstype, evalueret i middleware |
| Segment Protocols / mParticle | tusinder / md. | CMS trackingEventName-felter + provider-registry (GTM/GA4 opt-in; first-party Plausible som betalt tilvalg fra 3.750 DKK) |
| Security-audit + CSP-/rensningshærdning | ca. 37.000–112.000 DKK engangs | Striks CSP, HSTS, rate-limiter, env-validering og DOMPurify leveret |
| SEO-bureau-opsætning (sitemap, hreflang, JSON-LD, OG) | ca. 37.000–149.000 DKK engangs | Auto-sitemap, hreflang, BreadcrumbList + Organization + WebSite + WebPage + FAQPage JSON-LD, dynamisk OG, /llms.txt + AI-crawler-policy til GEO |
| Visuel on-page-redigering (Builder.io / Storyblok / Sanity Studio inline) | $500–3.000 / md. | Contentful Live Preview leveret — inspector-tags på hver blok, /api/draft + /api/disable-draft-ruter, preview-banner på siden, CSP frame-ancestors-undtagelse |
| Typet REST-klient + TanStack Query-opsætning (1–2 ugers seniorarbejde) | ca. 60.000–150.000 DKK engangs | Bearer-auth apiFetch + Zod + hierarkiske query keys + SSR-prefetch + HydrationBoundary + CRUD-demo med optimistiske opdateringer, klar til at pege mod dit backend |
ca. 1.100.000–1.900.000 DKK i byggeomkostninger + første års SaaS, som kittet lader dig springe over — erstattet af én engangslicens.
Fundamentet er fast, så prisen er fast. Alt skræddersyet får sin egen linjepost, før vi starter — aldrig en 'vi får se'-faktura.
Ja. Kildekoden leveres til dit repo under din licens. Ingen SaaS, ingen seat-gebyrer, ingen royalties.
Ja. Auditen sætter byggeriet fra bunden til 21–25 ingeniør-uger (5–6 måneder for én senior, ~3 måneder for et 2-personers team) — komprimeret til en kickoff på én uge. Regnestykket ligger i besparelseskortet ovenfor.
Next.js 16.0 App Router på React 19 med Turbopack dev/build i dag. ISR via unstable_cache (60s-tag) med webhook revalidateTag('contentful', 'max'). Vi følger Next.js LTS og leverer en gratis patch-opdatering inden for 30 dage efter hver major-udgivelse.
Testet mod Contentfuls aktuelle Delivery API (REST + GraphQL) og Content Management API. Kittet bruger hver API til det, den er bedst til — REST CDA SDK til include-graf-reads (sider, dictionaries, redirects), GraphQL CDA til render-hot-pathen (path resolution, site settings, fremtidige blok-fragmenter — se sektionen Hybrid Contentful API nedenfor), REST CMA til migrations, slug-redirect-sync og asset-uploads. Opsætning med én kommando (pnpm setup = cf:sync + cf:setup) introspicerer skemaet, regenererer både REST- og GraphQL-typer, scaffolder nye blok-fragmenter + komponenter + blockMap-poster og kører graphql-codegen. Sidebar-view-mapper, regex-validering på hvert symbol-felt, EU-host-support (CONTENTFUL_API_HOST=api.eu.contentful.com), Live Preview og den automatisk registrerede ISR-webhook (managed name, idempotent, env-scoped filter, loopback afvises) leveres alle fra start.
Ja. Det er pointen. Det er ikke en black box. Standard Next.js + Contentful + TypeScript med et domæneorganiseret lib (lib/{cms,i18n,seo,api,analytics,email,security,theme,utils} bag @/cms/*, @/i18n/* path-aliaser). Hvis dit team kan levere Next.js, kan de udvide den — den samlede docs/ARCHITECTURE.md-reference gennemgår hvert lag i sin egen nummererede sektion (mental model, project layout, locales/proxy, content model, blokke, designsystem, REST + TanStack, hooks, lib-reference, route handlers, SEO, analytics, formularer, sikkerhed, build/perf, env), plus en README øverst med en 3-trins-quickstart og en fuldt kommenteret .env.example.
Ja. Starter leveres med locale-routing som primær akse; tenant-routing følger samme mønster gennem proxy.ts-middlewaren.
Skip-to-main-link, semantiske landemærker, focus-styles, error boundary og Radix-baserede primitives som standard. Det erstatter ikke en rigtig audit, men det får dig til WCAG 2.2 AA på en ren installation.
Der er ingen — du ejer koden. Valgfri retainer er tilgængelig, hvis du vil have en af mine.
Ja — den live offentlige demo ligger på enterprise-demo-puce.vercel.app (Northwind Industries, hver blok, begge locales, Live Preview koblet op). Vil du have en privat 1-times gennemgang på samme space? Book en samtale.
Fordi fundamentet er fast, og tilpasningerne ikke er. Begge får et tal, før vi starter — bare to forskellige tal.
Typiske boilerplates leverer en hero, en footer og en README. Det her leverer 12 blokke fordelt på 40 opsætninger og 6 toner, et industrial-precise designsystem, Contentful Live Preview, et typet REST + TanStack Query-lag, en ISR-cache-pipeline, et i18n-routing-lag med automatiske slug-redirects, en søgeindeksering, et formular-backend, et analytics-tracking-lag, GEO/AI-SEO og en enterprise-sikkerhedsopsætning. Auditen sætter byggeriet fra bunden til ca. 780.000–1.300.000 DKK i ren engineering-omkostning, før SaaS.
Nej. Hver valgfri integration (søgning, transaktions-e-mail, error tracking) er gated af env vars og fejler pænt. Lever i dag uden dem, tilføj dem senere ved at sætte to-tre variabler. Analytics default er GTM/GA4 opt-in (jeres egen konto, sæt siteSettings.gtmId i Contentful) + Vercel Web Vitals — ingen ekstern afhængighed kræves. First-party Plausible er et betalt tilvalg.
Cookiebot-klar CSP og samtykke-banner leveres fra start. Skift til OneTrust eller en intern CMP ved at ændre én URL i script-tagget og connect-src-CSP-posten.
Ca. 11.200 DKK køber ~21 mio. tegn til lanceringspris. Det er et 150-siders site oversat til 10 sprog med 6+ måneders ugentlig publicering ovenpå, eller et 200-siders site til 6 sprog med samme spillerum. Når kreditten er brugt, er Translately pay-per-use til $0,075 pr. 1.000 tegn — intet abonnement, låst i 12 måneder fra tilmelding. (Translately er vores companion-produkt til automatisk oversættelse af Contentful ved publicering — translately.app.)
Ja — inspector-tags på hver blok, /api/draft- og /api/disable-draft-ruter, en LivePreviewProvider i layoutet, et preview-banner på siden, en isLivePreviewConfigured()-env-helper, der pænt slår provideren fra, når Preview-token/secret mangler, og en CSP frame-ancestors-undtagelse for app.contentful.com / app.eu.contentful.com, så preview-iframen ikke blokeres. Dokumenteret i docs/ARCHITECTURE.md (#live-preview). Se den køre på enterprise-demo-puce.vercel.app.
Kittet leverer et typet REST + TanStack Query-lag til dine eksterne business-backends — adskilt fra CMS'et. apiFetch med Bearer-auth, AbortSignal, timeouts og Zod-parsing; en hierarkisk query-keys-factory; SSR-prefetch med HydrationBoundary; optimistiske opdateringer med rollback. En kørbar Posts-CRUD-demo ligger på /[locale]/examples/posts inde i (sandbox)-rutegruppen, med QueryProvider afgrænset til det layout (ikke globalt, så marketing-træet bliver SSG). Default mod JSONPlaceholder, så den virker fra start; pegt mod dit eget API ved at overskrive NEXT_PUBLIC_API_BASE_URL. CMS-reads bliver på det hybride Contentful-lag (REST CDA + GraphQL CDA + REST CMA — se sektionen Hybrid Contentful API nedenfor). Dokumenteret i docs/ARCHITECTURE.md (#rest-api-and-tanstack-query).
Kittet leverer en /llms.txt-rute (cached 1 t., lister site settings, path-mappet og sitemap-linket), en env-styret AI_CRAWLER_POLICY (open eller restricted) koblet ind i robots.ts, FAQPage- og WebPage-JSON-LD og OG siteName/url. Sæt AI_CRAWLER_POLICY=restricted for at blokere almindelige AI-trænings- og browse-bots; standard er open.
Ja. Tolv månedlige rater à 21.667 DKK med 0 % rente, totalbeløb uændret på 260.000 DKK ekskl. moms. Tilgængeligt for EU-virksomheder efter en kort CVR / VAT-ID-kreditvurdering; første rate forfalder ved kickoff-start, resten faktureres månedligt via Stripe eller bankoverførsel. Kildekoden leveres ved kickoff — licensen tildeles under et underskrevet betalingsplan-tillæg til hovedaftalen og kan tilbagekaldes, hvis betalingerne udebliver i mere end 30 dage, med en 14-dages afhjælpningsperiode. Den klausul er det, der gør rentefri intern finansiering forsvarlig på dette prisniveau; den er den eneste materielle forskel fra engangsbetalingen. Tilpasninger og integrationer ud over kittet bliver på almindelig milestone-fakturering — kun den 260.000 DKK starterlicens finansieres. Foretrækker du engangsbetaling? Samme pris, samme omfang.
Kittet leverer et provider-agnostisk event-lag: redaktører kobler navngivne events på enhver side, knap, formular eller nav-punkt i Contentful — ét event-schema sendes videre til alle aktiverede providers. Som default: GTM/GA4 via jeres egen konto (sæt siteSettings.gtmId, loades kun når konfigureret) og Vercel Web Analytics til Web Vitals. First-party Plausible er ikke inkluderet som default — det er et valgfrit betalt tilvalg. Hosted integration (provider-integration, CSP, env, peget mod Plausible Cloud): 3.750 DKK / EUR 500, engangsbeløb. Self-hosted på jeres egen infrastruktur (Docker Compose-instans vi sætter op for jer): 11.250 DKK / EUR 1.500, engangsbeløb. Kontakt os via pricing-CTA'en for at tilføje det.
Gennemgang på et reelt demo-space, eller få prisen på e-mail. Intet slidedeck nogen af vejene.