2026-04-12 21:13:25 +02:00
import MembershipExplorer , { type MembershipFacility } from "./MembershipExplorer" ;
2026-04-26 11:29:35 +02:00
import { fetchPublicFacilities } from "@/app/publicFacilities" ;
2026-04-28 07:42:49 +02:00
import { resolveSitePageSeo } from "@/app/pageSeo" ;
2026-04-12 22:07:51 +02:00
import {
createBreadcrumbJsonLd ,
createCollectionPageJsonLd ,
createPageMetadata ,
} from "@/app/seo" ;
2026-04-12 21:13:25 +02:00
2026-04-26 11:29:35 +02:00
export const revalidate = 1800 ;
2026-04-12 21:13:25 +02:00
export const dynamic = "force-dynamic" ;
2026-04-28 13:53:00 +02:00
const fallbackPageTitle =
"Billig golfmedlemskap? Finn og sammenlign priser på alle klubber | TeeOff.no" ;
2026-04-28 07:42:49 +02:00
const fallbackPageDescription =
2026-04-28 13:53:00 +02:00
"Hvor er det billigst å være medlem? Sammenlign priser på golfmedlemskap med full spillerett eller rimelige nasjonale alternativ (fjernmedlemskap) i Norge på TeeOff.no." ;
2026-04-12 22:07:51 +02:00
2026-04-28 07:42:49 +02:00
export async function generateMetadata() {
const seo = await resolveSitePageSeo ( "medlemskap" , fallbackPageTitle , fallbackPageDescription ) ;
return createPageMetadata ( {
title : seo.title ,
description : seo.description ,
path : "/medlemskap" ,
} ) ;
}
2026-04-12 22:07:51 +02:00
2026-04-12 21:13:25 +02:00
export default async function MembershipPage() {
2026-04-28 07:42:49 +02:00
const seo = await resolveSitePageSeo ( "medlemskap" , fallbackPageTitle , fallbackPageDescription ) ;
2026-04-26 11:29:35 +02:00
const facilities = await fetchPublicFacilities < MembershipFacility > ( "membership" , revalidate ) ;
2026-04-12 21:13:25 +02:00
const visibleFacilities = facilities . filter (
( facility ) = >
typeof facility . standard_medlemskap === "number" ||
typeof facility . rimeligste_alternativ === "number" ,
) ;
2026-04-12 22:07:51 +02:00
const collectionJsonLd = createCollectionPageJsonLd ( {
2026-04-28 07:42:49 +02:00
name : seo.title ,
description : seo.description ,
2026-04-12 22:07:51 +02:00
path : "/medlemskap" ,
} ) ;
const breadcrumbJsonLd = createBreadcrumbJsonLd ( [
{ name : "Hjem" , path : "/" } ,
{ name : "Medlemskap" , path : "/medlemskap" } ,
] ) ;
2026-04-12 21:13:25 +02:00
return (
2026-04-12 22:07:51 +02:00
< >
< script
type = "application/ld+json"
dangerouslySetInnerHTML = { { __html : JSON.stringify ( collectionJsonLd ) } }
/ >
< script
type = "application/ld+json"
dangerouslySetInnerHTML = { { __html : JSON.stringify ( breadcrumbJsonLd ) } }
/ >
< main className = "site-shell min-h-screen" >
< section className = "border-b border-[#112015]/8 bg-[linear-gradient(135deg,rgba(139,195,74,0.16),rgba(255,255,255,0.92))]" >
< div className = "mx-auto max-w-[1400px] px-4 py-14 sm:px-6 lg:px-8 lg:py-20" >
2026-04-17 22:46:57 +02:00
< p className = "mb-4 text-[11px] font-black uppercase tracking-[0.28em] text-[#8BC34A]" >
Medlemskap
< / p >
< h1 className = "text-5xl font-black text-[#112015] sm:text-6xl" >
2026-04-28 13:53:00 +02:00
Sammenlign priser på golfmedlemskap i Norge
2026-04-17 22:46:57 +02:00
< / h1 >
2026-04-28 13:53:00 +02:00
< div className = "mt-6 max-w-4xl space-y-5 text-base leading-7 text-[#4F5F50] sm:text-lg" >
< p > Beløpene oppdateres fortløpende , så snart jeg oppdager endringer . < / p >
< p > Jeg har stilt meg selv to spørsmål : < / p >
< p >
< strong > Standardmedlemskap : < / strong > Hva vil det koste meg , en
gjennomsnittsgolfer i alder og kjønn , å spille så mye jeg ø nsker på denne banen ?
< / p >
< p >
< strong > Billigst mulig : < / strong > Hva vil det koste meg å være medlem her , dersom
jeg aksepterer at jeg må betale greenfee hver runde ? ( Medlemskapet skal også gi
rett til greenfeespill på andre baner . ) Dette er ofte kjent som fjernmedlemskap .
< / p >
< p > Svarene på disse to spørsmålene er utgangspunktet for listene under . < / p >
< p >
Det du naturligvis ikke klarer å lese ut av listene , er hva du får utover
spilleretten , hvilke spesialtilbud som gjelder , om det er dyrere dersom du velger å
dele å rsavgiften opp i flere avdrag og andre ymse ting . Derfor er det også en lenke
til klubbens innmeldingssider , slik at du kan lese deg opp på detaljene .
< / p >
< p >
Bruk listene for hva de er verdt , men husk : Har du anledning , så støtt nærklubben
din . Det koster mye penger å tilby en allright golfbane !
< / p >
< p >
( Alt er oppgitt i norske kroner pr å r , og jeg tar intet ansvar for eventuelle feil
i listene . )
< / p >
< p >
Og la deg ikke forvirre av terminologien her . Ser du f . eks at det står
& quot ; greenfee & quot ; , så er det i denne sammenhengen bare navnet på en type
medlemskap klubben tilbyr .
< / p >
< / div >
2026-04-12 21:13:25 +02:00
< / div >
2026-04-12 22:07:51 +02:00
< / section >
2026-04-12 21:13:25 +02:00
2026-04-12 22:07:51 +02:00
< section className = "mx-auto max-w-[1400px] px-4 py-8 sm:px-6 lg:px-8 lg:py-10" >
< MembershipExplorer facilities = { visibleFacilities } / >
< / section >
< / main >
< / >
2026-04-12 21:13:25 +02:00
) ;
}