diff --git a/backend/main.py b/backend/main.py
index fb99094..158c01e 100644
--- a/backend/main.py
+++ b/backend/main.py
@@ -68,6 +68,7 @@ SMTP_PORT = os.getenv("SMTP_PORT", "").strip()
SMTP_USER = os.getenv("SMTP_USER", "").strip()
SMTP_PASS = os.getenv("SMTP_PASS", "").strip()
PUBLIC_FROM_EMAIL = os.getenv("PUBLIC_FROM_EMAIL", SMTP_USER).strip()
+CONTACT_FORM_TO_EMAIL = os.getenv("CONTACT_FORM_TO_EMAIL", "teeoff@teeoff.no").strip()
pwd_context = CryptContext(schemes=["pbkdf2_sha256"], deprecated="auto")
@@ -84,6 +85,9 @@ ADMIN_SESSION_MAX_AGE_SECONDS = get_int_env("ADMIN_SESSION_MAX_AGE_SECONDS", 60
ADMIN_REMEMBER_ME_MAX_AGE_SECONDS = get_int_env("ADMIN_REMEMBER_ME_MAX_AGE_SECONDS", 60 * 60 * 24 * 30)
PUBLIC_MAGIC_LINK_MAX_AGE_MINUTES = get_int_env("PUBLIC_MAGIC_LINK_MAX_AGE_MINUTES", 20)
PUBLIC_MAGIC_LINK_REQUEST_COOLDOWN_SECONDS = get_int_env("PUBLIC_MAGIC_LINK_REQUEST_COOLDOWN_SECONDS", 60)
+CONTACT_FORM_RATE_LIMIT_WINDOW_SECONDS = get_int_env("CONTACT_FORM_RATE_LIMIT_WINDOW_SECONDS", 60 * 60)
+CONTACT_FORM_RATE_LIMIT_MAX_SUBMISSIONS = get_int_env("CONTACT_FORM_RATE_LIMIT_MAX_SUBMISSIONS", 3)
+CONTACT_FORM_MIN_FILL_SECONDS = get_int_env("CONTACT_FORM_MIN_FILL_SECONDS", 5)
def resolve_imported_meninger_path() -> Path:
@@ -122,6 +126,10 @@ def is_magic_link_configured() -> bool:
return bool(SMTP_SERVER and SMTP_PORT and SMTP_USER and SMTP_PASS and PUBLIC_FROM_EMAIL)
+def is_contact_form_configured() -> bool:
+ return is_magic_link_configured() and bool(CONTACT_FORM_TO_EMAIL)
+
+
def get_public_auth_config() -> dict[str, Any]:
google_enabled = is_google_login_configured()
magic_link_enabled = is_magic_link_configured()
@@ -256,6 +264,40 @@ async def send_magic_link_email(email_address: str, login_url: str) -> None:
await asyncio.to_thread(_send)
+async def send_contact_form_email(
+ *,
+ sender_name: str,
+ sender_email: str,
+ topic: str,
+ message: str,
+ ip_hash: str | None,
+) -> None:
+ subject = f"[TeeOff Kontakt] {topic}"
+ body = (
+ "Ny melding fra kontaktskjemaet på TeeOff.no\n\n"
+ f"Navn: {sender_name}\n"
+ f"E-post: {sender_email}\n"
+ f"Emne: {topic}\n"
+ f"IP-hash: {ip_hash or 'ukjent'}\n\n"
+ "Melding:\n"
+ f"{message.strip()}\n"
+ )
+
+ def _send() -> None:
+ mail = EmailMessage()
+ mail["From"] = PUBLIC_FROM_EMAIL
+ mail["To"] = CONTACT_FORM_TO_EMAIL
+ mail["Reply-To"] = sender_email
+ mail["Subject"] = subject
+ mail.set_content(body)
+
+ with smtplib.SMTP_SSL(SMTP_SERVER, int(SMTP_PORT)) as server:
+ server.login(SMTP_USER, SMTP_PASS)
+ server.send_message(mail)
+
+ await asyncio.to_thread(_send)
+
+
async def validate_admin_session_token(token: str) -> str:
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
@@ -338,6 +380,8 @@ class ArticleUpsertRequest(BaseModel):
author_name: Optional[str] = None
status: Optional[str] = "draft"
hero_images: Optional[List[dict[str, Any]]] = []
+ media_gallery: Optional[List[dict[str, Any]]] = []
+ featured_media_id: Optional[str] = None
content_html: Optional[str] = None
source_url: Optional[str] = None
source_label: Optional[str] = None
@@ -352,6 +396,15 @@ class PublicCommentCreateRequest(BaseModel):
class PublicMagicLinkRequest(BaseModel):
email: str
return_to: Optional[str] = "/"
+
+
+class PublicContactFormRequest(BaseModel):
+ name: str
+ email: str
+ topic: str
+ message: str
+ website: Optional[str] = ""
+ started_at: Optional[int] = None
# --- FUNKSJONER ---
def format_row(row):
"""
@@ -527,6 +580,43 @@ def format_article_row(row):
elif not isinstance(hero_images, list):
data["hero_images"] = []
+ media_gallery = data.get("media_gallery")
+ if media_gallery is None:
+ data["media_gallery"] = []
+ elif isinstance(media_gallery, str):
+ try:
+ data["media_gallery"] = json.loads(media_gallery)
+ except Exception:
+ data["media_gallery"] = []
+ elif not isinstance(media_gallery, list):
+ data["media_gallery"] = []
+
+ if not data["media_gallery"] and data["hero_images"]:
+ data["media_gallery"] = [
+ {
+ "id": build_article_media_id("image", image.get("src") or ""),
+ "type": "image",
+ "src": image.get("src") or "",
+ "alt": image.get("alt") or "",
+ "caption": image.get("caption") or "",
+ "poster": "",
+ }
+ for image in data["hero_images"]
+ if isinstance(image, dict) and str(image.get("src") or "").strip()
+ ]
+
+ if not data.get("featured_media_id") and data["media_gallery"]:
+ first_image = next(
+ (
+ item
+ for item in data["media_gallery"]
+ if isinstance(item, dict) and str(item.get("type") or "image").strip().lower() == "image"
+ ),
+ None,
+ )
+ if first_image:
+ data["featured_media_id"] = str(first_image.get("id") or "").strip() or None
+
return data
@@ -575,7 +665,7 @@ def sanitize_hero_images(value: Any) -> list[dict[str, str]]:
continue
sanitized.append(
{
- "src": src,
+ "src": normalize_article_media_url(src),
"alt": str(item.get("alt") or "").strip(),
"caption": str(item.get("caption") or "").strip(),
}
@@ -583,6 +673,145 @@ def sanitize_hero_images(value: Any) -> list[dict[str, str]]:
return sanitized
+LEGACY_ARTICLE_MEDIA_PATTERN = re.compile(
+ r"^https?://(?:www\.)?(?:teeoff\.no|nye\.teeoff\.no|wp\.teeoff\.no)(?P/(?:wp-content/uploads|uploads/articles)/.+)$",
+ re.IGNORECASE,
+)
+YOUTUBE_THUMBNAIL_PATTERN = re.compile(
+ r"^https?://i\.ytimg\.com/vi(?:_webp)?/(?P[^/]+)/",
+ re.IGNORECASE,
+)
+
+
+def normalize_article_media_url(value: str | None) -> str:
+ trimmed = str(value or "").strip()
+ if not trimmed:
+ return ""
+
+ legacy_match = LEGACY_ARTICLE_MEDIA_PATTERN.match(trimmed)
+ if legacy_match:
+ path = legacy_match.group("path")
+ if path.startswith("/wp-content/uploads/"):
+ return f"https://wp.teeoff.no{path}"
+ return path
+
+ return trimmed
+
+
+def build_article_media_id(media_type: str, src: str) -> str:
+ digest = hashlib.sha1(f"{media_type}:{src}".encode("utf-8")).hexdigest()[:12]
+ return f"{media_type}-{digest}"
+
+
+def sanitize_article_media(value: Any, title: str | None = None) -> list[dict[str, str]]:
+ if not isinstance(value, list):
+ return []
+
+ sanitized: list[dict[str, str]] = []
+ seen: set[tuple[str, str]] = set()
+ fallback_text = str(title or "").strip()
+
+ for item in value:
+ if not isinstance(item, dict):
+ continue
+
+ media_type = str(item.get("type") or "image").strip().lower()
+ if media_type not in {"image", "video"}:
+ continue
+
+ src = normalize_article_media_url(item.get("src"))
+ if not src:
+ continue
+
+ dedupe_key = (media_type, src)
+ if dedupe_key in seen:
+ continue
+ seen.add(dedupe_key)
+
+ poster = normalize_article_media_url(item.get("poster"))
+ alt = str(item.get("alt") or "").strip()
+ caption = str(item.get("caption") or "").strip()
+ media_id = str(item.get("id") or "").strip() or build_article_media_id(media_type, src)
+
+ sanitized.append(
+ {
+ "id": media_id,
+ "type": media_type,
+ "src": src,
+ "alt": alt or fallback_text,
+ "caption": caption or alt or fallback_text,
+ "poster": poster,
+ }
+ )
+
+ return sanitized
+
+
+def build_media_gallery_from_hero_images(hero_images: list[dict[str, str]]) -> list[dict[str, str]]:
+ return [
+ {
+ "id": build_article_media_id("image", image["src"]),
+ "type": "image",
+ "src": image["src"],
+ "alt": image.get("alt") or "",
+ "caption": image.get("caption") or "",
+ "poster": "",
+ }
+ for image in hero_images
+ if image.get("src")
+ ]
+
+
+def sanitize_featured_media_id(featured_media_id: str | None, media_gallery: list[dict[str, str]]) -> str | None:
+ candidate = str(featured_media_id or "").strip()
+ if candidate and any(item.get("id") == candidate and item.get("type") == "image" for item in media_gallery):
+ return candidate
+
+ for item in media_gallery:
+ if item.get("type") == "image":
+ return item.get("id")
+
+ return None
+
+
+def build_hero_images_from_media_gallery(
+ media_gallery: list[dict[str, str]],
+ fallback_hero_images: list[dict[str, str]],
+ featured_media_id: str | None,
+) -> list[dict[str, str]]:
+ image_media = [
+ {
+ "src": item["src"],
+ "alt": item.get("alt") or "",
+ "caption": item.get("caption") or item.get("alt") or "",
+ "id": item.get("id") or "",
+ }
+ for item in media_gallery
+ if item.get("type") == "image" and item.get("src")
+ ]
+
+ if not image_media:
+ return fallback_hero_images
+
+ if featured_media_id:
+ featured_index = next(
+ (index for index, item in enumerate(image_media) if item.get("id") == featured_media_id),
+ None,
+ )
+ if featured_index is not None and featured_index > 0:
+ featured_item = image_media.pop(featured_index)
+ image_media.insert(0, featured_item)
+
+ return [
+ {
+ "src": item["src"],
+ "alt": item.get("alt") or "",
+ "caption": item.get("caption") or item.get("alt") or "",
+ }
+ for item in image_media
+ ]
+
+
def humanize_slug(slug: str | None) -> str:
if not slug:
return "Ukjent bane"
@@ -898,6 +1127,8 @@ async def ensure_articles_table(conn):
author_name VARCHAR(255),
status VARCHAR(32) NOT NULL DEFAULT 'draft',
hero_images JSONB NOT NULL DEFAULT '[]'::jsonb,
+ media_gallery JSONB NOT NULL DEFAULT '[]'::jsonb,
+ featured_media_id VARCHAR(255),
content_html TEXT,
source_url TEXT,
source_label VARCHAR(255),
@@ -910,6 +1141,14 @@ async def ensure_articles_table(conn):
ALTER TABLE articles
ADD COLUMN IF NOT EXISTS section VARCHAR(32) NOT NULL DEFAULT 'banebesok'
""")
+ await conn.execute("""
+ ALTER TABLE articles
+ ADD COLUMN IF NOT EXISTS media_gallery JSONB NOT NULL DEFAULT '[]'::jsonb
+ """)
+ await conn.execute("""
+ ALTER TABLE articles
+ ADD COLUMN IF NOT EXISTS featured_media_id VARCHAR(255)
+ """)
await conn.execute("""
UPDATE articles
SET section = 'banebesok'
@@ -1017,6 +1256,7 @@ async def lifespan(app: FastAPI):
await ensure_articles_table(conn)
await ensure_public_user_tables(conn)
await ensure_scrape_jobs_table(conn)
+ app.state.contact_submission_tracker = {}
print("✅ Database tilkoblet og pool opprettet")
except Exception as e:
print(f"❌ Databasefeil under oppstart: {e}")
@@ -1362,6 +1602,79 @@ async def request_magic_link(request: Request, payload: PublicMagicLinkRequest):
}
+@app.post("/api/public/contact")
+async def submit_public_contact_form(request: Request, payload: PublicContactFormRequest):
+ if not is_contact_form_configured():
+ raise HTTPException(status_code=503, detail="Kontaktskjema er ikke konfigurert ennå.")
+
+ if str(payload.website or "").strip():
+ return {
+ "status": "success",
+ "detail": "Takk for meldingen. Vi svarer så snart vi kan.",
+ }
+
+ name = str(payload.name or "").strip()
+ email = normalize_public_email(payload.email)
+ topic = str(payload.topic or "").strip()
+ message = str(payload.message or "").strip()
+
+ if len(name) < 2 or len(name) > 120:
+ raise HTTPException(status_code=400, detail="Oppgi et gyldig navn.")
+ if not email or "@" not in email or len(email) > 255:
+ raise HTTPException(status_code=400, detail="Oppgi en gyldig e-postadresse.")
+ if len(topic) < 2 or len(topic) > 140:
+ raise HTTPException(status_code=400, detail="Oppgi et gyldig emne.")
+ if len(message) < 20 or len(message) > 5000:
+ raise HTTPException(status_code=400, detail="Meldingen må være mellom 20 og 5000 tegn.")
+
+ now_ts = int(datetime.utcnow().timestamp())
+ if payload.started_at and now_ts - int(payload.started_at) < CONTACT_FORM_MIN_FILL_SECONDS:
+ return {
+ "status": "success",
+ "detail": "Takk for meldingen. Vi svarer så snart vi kan.",
+ }
+
+ ip_hash = hash_request_ip(request)
+ tracker: dict[str, list[int]] = getattr(app.state, "contact_submission_tracker", {})
+ cutoff = now_ts - CONTACT_FORM_RATE_LIMIT_WINDOW_SECONDS
+
+ for key in list(tracker.keys()):
+ recent = [ts for ts in tracker.get(key, []) if ts >= cutoff]
+ if recent:
+ tracker[key] = recent
+ else:
+ tracker.pop(key, None)
+
+ rate_keys = [f"email:{email}"]
+ if ip_hash:
+ rate_keys.append(f"ip:{ip_hash}")
+
+ for key in rate_keys:
+ attempts = tracker.get(key, [])
+ if len(attempts) >= CONTACT_FORM_RATE_LIMIT_MAX_SUBMISSIONS:
+ raise HTTPException(
+ status_code=429,
+ detail="For mange meldinger på kort tid. Prøv igjen senere.",
+ )
+
+ await send_contact_form_email(
+ sender_name=name,
+ sender_email=email,
+ topic=topic,
+ message=message,
+ ip_hash=ip_hash,
+ )
+
+ for key in rate_keys:
+ tracker.setdefault(key, []).append(now_ts)
+ app.state.contact_submission_tracker = tracker
+
+ return {
+ "status": "success",
+ "detail": "Takk for meldingen. Vi svarer så snart vi kan.",
+ }
+
+
@app.get("/api/public/auth/magic-link/verify")
async def verify_magic_link(
request: Request,
@@ -1720,18 +2033,23 @@ async def upsert_admin_article(request: ArticleUpsertRequest):
if status == "published" and not published_at:
published_at = datetime.utcnow()
- hero_images = sanitize_hero_images(request.hero_images)
+ fallback_hero_images = sanitize_hero_images(request.hero_images)
+ media_gallery = sanitize_article_media(request.media_gallery, request.title.strip())
+ if not media_gallery and fallback_hero_images:
+ media_gallery = build_media_gallery_from_hero_images(fallback_hero_images)
+ featured_media_id = sanitize_featured_media_id(request.featured_media_id, media_gallery)
+ hero_images = build_hero_images_from_media_gallery(media_gallery, fallback_hero_images, featured_media_id)
async with app.state.pool.acquire() as conn:
row = await conn.fetchrow("""
INSERT INTO articles (
section, slug, title, description, excerpt, eyebrow, location_label,
facility_name, facility_slug, author_name, status, hero_images,
- content_html, source_url, source_label, published_at, updated_at
+ media_gallery, featured_media_id, content_html, source_url, source_label, published_at, updated_at
) VALUES (
$1, $2, $3, $4, $5, $6, $7,
$8, $9, $10, $11, $12::jsonb,
- $13, $14, $15, $16, $17
+ $13::jsonb, $14, $15, $16, $17, $18, $19
)
ON CONFLICT (slug) DO UPDATE SET
section = EXCLUDED.section,
@@ -1745,6 +2063,8 @@ async def upsert_admin_article(request: ArticleUpsertRequest):
author_name = EXCLUDED.author_name,
status = EXCLUDED.status,
hero_images = EXCLUDED.hero_images,
+ media_gallery = EXCLUDED.media_gallery,
+ featured_media_id = EXCLUDED.featured_media_id,
content_html = EXCLUDED.content_html,
source_url = EXCLUDED.source_url,
source_label = EXCLUDED.source_label,
@@ -1764,6 +2084,8 @@ async def upsert_admin_article(request: ArticleUpsertRequest):
(request.author_name or "TeeOff").strip(),
status,
json.dumps(hero_images),
+ json.dumps(media_gallery),
+ featured_media_id,
request.content_html or "",
(request.source_url or "").strip() or None,
(request.source_label or "").strip() or None,
@@ -1810,28 +2132,45 @@ async def seed_admin_articles_from_imported_json():
featured_image = item.get("featuredImage") or {}
section, eyebrow = resolve_imported_article_section(item)
- hero_images: list[dict[str, str]] = []
+ media_gallery: list[dict[str, str]] = []
featured_url = str(featured_image.get("url") or "").strip()
if featured_url:
- hero_images.append(
+ media_gallery.append(
{
+ "id": build_article_media_id("image", featured_url),
+ "type": "image",
"src": featured_url,
"alt": str(featured_image.get("alt") or item.get("title") or "").strip(),
"caption": str(featured_image.get("caption") or item.get("title") or "").strip(),
+ "poster": "",
}
)
for url in extract_html_image_urls(content_html)[:5]:
- if any(existing["src"] == url for existing in hero_images):
+ if any(existing["src"] == url for existing in media_gallery):
continue
- hero_images.append(
+ media_gallery.append(
{
+ "id": build_article_media_id("image", url),
+ "type": "image",
"src": url,
"alt": str(item.get("title") or "").strip(),
"caption": str(item.get("title") or "").strip(),
+ "poster": "",
}
)
+ sanitized_media_gallery = sanitize_article_media(media_gallery, str(item.get("title") or "").strip())
+ featured_media_id = sanitize_featured_media_id(
+ sanitized_media_gallery[0]["id"] if sanitized_media_gallery else None,
+ sanitized_media_gallery,
+ )
+ hero_images = build_hero_images_from_media_gallery(
+ sanitized_media_gallery,
+ [],
+ featured_media_id,
+ )
+
published_at = parse_optional_datetime(item.get("publishedAt"))
updated_at = parse_optional_datetime(item.get("updatedAt")) or published_at or datetime.utcnow()
@@ -1839,11 +2178,11 @@ async def seed_admin_articles_from_imported_json():
INSERT INTO articles (
section, slug, title, description, excerpt, eyebrow, location_label,
facility_name, facility_slug, author_name, status, hero_images,
- content_html, source_url, source_label, published_at, updated_at
+ media_gallery, featured_media_id, content_html, source_url, source_label, published_at, updated_at
) VALUES (
$1, $2, $3, $4, $5, $6, $7,
$8, $9, $10, 'published', $11::jsonb,
- $12, $13, $14, $15, $16
+ $12::jsonb, $13, $14, $15, $16, $17, $18
)
ON CONFLICT (slug) DO UPDATE SET
section = EXCLUDED.section,
@@ -1857,6 +2196,8 @@ async def seed_admin_articles_from_imported_json():
author_name = EXCLUDED.author_name,
status = EXCLUDED.status,
hero_images = EXCLUDED.hero_images,
+ media_gallery = EXCLUDED.media_gallery,
+ featured_media_id = EXCLUDED.featured_media_id,
content_html = EXCLUDED.content_html,
source_url = EXCLUDED.source_url,
source_label = EXCLUDED.source_label,
@@ -1874,6 +2215,8 @@ async def seed_admin_articles_from_imported_json():
str(facility_slug) if facility_slug else None,
str(((item.get("author") or {}).get("name")) or "TeeOff"),
json.dumps(hero_images),
+ json.dumps(sanitized_media_gallery),
+ featured_media_id,
content_html,
str(item.get("link") or "").strip() or None,
"Importert fra gamle TeeOff",
diff --git a/backend/scrape_vtg.py b/backend/scrape_vtg.py
index 3c172c5..f6ac626 100644
--- a/backend/scrape_vtg.py
+++ b/backend/scrape_vtg.py
@@ -1,7 +1,7 @@
"""
TEE OFF - VEIEN TIL GOLF (VTG) SKRAPER MED GEMINI AI
---------------------------------------------------------------------------
-Henter pris, beskrivelse (inkl. lånekøller/medlemskap) og kursdatoer fra VTG-sider.
+Henter pris, beskrivelse (inkl. lånekøller/medlemskap/pakker) og kursdatoer fra VTG-sider.
Støtter kommaseparerte URL-er.
---------------------------------------------------------------------------
"""
@@ -58,9 +58,15 @@ Du er en ekspert på norske golfklubber. Din oppgave er å lese en lang tekst fr
OPPGAVER:
1. Finn standardprisen for VTG-kurset for en vanlig voksen person. (Returner KUN tallet).
+ VIKTIG PRISLOGIKK:
+ - Hvis klubben tilbyr både "kun VTG-kurs" og en pakke som inkluderer medlemskap/spillerett, skal du velge prisen på KUN SELVE KURSET som foreslatt_vtg_pris.
+ - Hvis klubben tilbyr et rimeligere kurs uten medlemskap, men også en dyrere pakke med medlemskap, er det alltid kursprisen uten medlemskap som skal returneres.
+ - Hvis klubben BARE tilbyr en samlet pakke med VTG + medlemskap/spillerett, returnerer du pakkeprisen.
+ - Ignorer medlemskapstilbud som ikke faktisk er knyttet til VTG-kurset.
+ - Ignorer priser for barn, junior, student, familie eller andre spesialgrupper hvis det finnes en vanlig voksenpris.
2. Skriv en KOMPRIMERT, selgende beskrivelse (maks 3-4 setninger). Du MÅ inkludere informasjon om:
- - Er lån av køller/utstyr inkludert i kurset?
- Inkluderer prisen et medlemskap/spillerett i klubben (og ev. for hvor lenge)?
+ - Hvis klubben tilbyr både kurs uten medlemskap og en egen pakke med medlemskap, må du nevne dette eksplisitt og oppgi pakkeprisen hvis den finnes i teksten.
- Hva er omfanget? (F.eks. "12 timer praksis pluss e-læring").
Ignorer uvesentlig støy og lange historiske utgreiinger.
3. Finn alle kommende kursdatoer. Finn startdato/sluttdato for hvert kurs, og noter status ("Ledig", "Fulltegnet", "Venteliste").
@@ -72,14 +78,17 @@ OPPGAVE:
Returner KUN et gyldig JSON-objekt med nøyaktig følgende struktur:
{{
"foreslatt_vtg_pris": 1990,
- "foreslatt_vtg_beskrivelse": "Kurset går over 12 timer inkludert obligatorisk e-læring. Lån av golfkøller er inkludert under hele kurset, og prisen gir deg også fritt spill og medlemskap ut året.",
+ "foreslatt_vtg_beskrivelse": "Kurset går over 12 timer inkludert obligatorisk e-læring, og lån av golfkøller er inkludert. Selve VTG-kurset koster 1990 kroner. Klubben tilbyr også en pakke med kurs og medlemskap ut året til 3490 kroner.",
"foreslatt_vtg_datoer": [
{{"dato": "12.-14. mai", "status": "Fulltegnet"}},
{{"dato": "5.-7. juni", "status": "Ledig"}}
],
- "ai_begrunnelse": "Fant voksenpris på 1990,-. Teksten nevnte eksplisitt at medlemskap ut året er med i prisen, og at man får låne utstyr."
+ "ai_begrunnelse": "Fant voksenpris på 1990 kroner for selve VTG-kurset. Det stod også at klubben har en egen pakke med medlemskap til 3490 kroner, samt at lån av utstyr er inkludert."
}}
-Merk: Sett foreslatt_vtg_pris til null (null) hvis du ikke finner den. Hvis du ikke finner datoer, la listen være tom [].
+Merk:
+- Sett foreslatt_vtg_pris til null (null) hvis du ikke finner en tydelig voksenpris.
+- Hvis du ikke finner datoer, la listen være tom [].
+- Hvis prisen du returnerer faktisk er en pakkepris med medlemskap, må det sies tydelig i foreslatt_vtg_beskrivelse og ai_begrunnelse.
"""
try:
diff --git a/bilde1.png b/bilde1.png
deleted file mode 100644
index d8b43f8..0000000
Binary files a/bilde1.png and /dev/null differ
diff --git a/frontend/public/wp-content/uploads/13-1.jpg b/frontend/public/wp-content/uploads/13-1.jpg
new file mode 100644
index 0000000..25755eb
Binary files /dev/null and b/frontend/public/wp-content/uploads/13-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/13-utslag-1.jpg b/frontend/public/wp-content/uploads/13-utslag-1.jpg
new file mode 100644
index 0000000..b04c1cb
Binary files /dev/null and b/frontend/public/wp-content/uploads/13-utslag-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/13green-1.jpg b/frontend/public/wp-content/uploads/13green-1.jpg
new file mode 100644
index 0000000..b88bb5e
Binary files /dev/null and b/frontend/public/wp-content/uploads/13green-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/15-1.jpg b/frontend/public/wp-content/uploads/15-1.jpg
new file mode 100644
index 0000000..e2d9ea1
Binary files /dev/null and b/frontend/public/wp-content/uploads/15-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/15-3-1.jpg b/frontend/public/wp-content/uploads/15-3-1.jpg
new file mode 100644
index 0000000..21e507b
Binary files /dev/null and b/frontend/public/wp-content/uploads/15-3-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/15green-1.jpg b/frontend/public/wp-content/uploads/15green-1.jpg
new file mode 100644
index 0000000..c43ed48
Binary files /dev/null and b/frontend/public/wp-content/uploads/15green-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/16-1-1.jpg b/frontend/public/wp-content/uploads/16-1-1.jpg
new file mode 100644
index 0000000..e21568f
Binary files /dev/null and b/frontend/public/wp-content/uploads/16-1-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/16-2-1.jpg b/frontend/public/wp-content/uploads/16-2-1.jpg
new file mode 100644
index 0000000..039f806
Binary files /dev/null and b/frontend/public/wp-content/uploads/16-2-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/16-3-1.jpg b/frontend/public/wp-content/uploads/16-3-1.jpg
new file mode 100644
index 0000000..841d641
Binary files /dev/null and b/frontend/public/wp-content/uploads/16-3-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/17-1.jpg b/frontend/public/wp-content/uploads/17-1.jpg
new file mode 100644
index 0000000..3b2a116
Binary files /dev/null and b/frontend/public/wp-content/uploads/17-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/18-1-1.jpg b/frontend/public/wp-content/uploads/18-1-1.jpg
new file mode 100644
index 0000000..b51df84
Binary files /dev/null and b/frontend/public/wp-content/uploads/18-1-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/18-green-1-1.jpg b/frontend/public/wp-content/uploads/18-green-1-1.jpg
new file mode 100644
index 0000000..ac4b501
Binary files /dev/null and b/frontend/public/wp-content/uploads/18-green-1-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/2019-03-19-12.08.14-teeoff72b88afb7a22.jpg b/frontend/public/wp-content/uploads/2019-03-19-12.08.14-teeoff72b88afb7a22.jpg
new file mode 100644
index 0000000..0e0bb46
Binary files /dev/null and b/frontend/public/wp-content/uploads/2019-03-19-12.08.14-teeoff72b88afb7a22.jpg differ
diff --git a/frontend/public/wp-content/uploads/Aapne-baner169.png b/frontend/public/wp-content/uploads/Aapne-baner169.png
new file mode 100644
index 0000000..62df68a
Binary files /dev/null and b/frontend/public/wp-content/uploads/Aapne-baner169.png differ
diff --git a/frontend/public/wp-content/uploads/AurskogGK1.jpg b/frontend/public/wp-content/uploads/AurskogGK1.jpg
new file mode 100644
index 0000000..b2197f9
Binary files /dev/null and b/frontend/public/wp-content/uploads/AurskogGK1.jpg differ
diff --git a/frontend/public/wp-content/uploads/Baneaapning.jpg b/frontend/public/wp-content/uploads/Baneaapning.jpg
new file mode 100644
index 0000000..06bcec8
Binary files /dev/null and b/frontend/public/wp-content/uploads/Baneaapning.jpg differ
diff --git a/frontend/public/wp-content/uploads/Bing-Kart-–-Veibeskrivelser-reiseplanlegging-trafikkameraer-med-mer.pdf b/frontend/public/wp-content/uploads/Bing-Kart-–-Veibeskrivelser-reiseplanlegging-trafikkameraer-med-mer.pdf
new file mode 100644
index 0000000..dc688e3
Binary files /dev/null and b/frontend/public/wp-content/uploads/Bing-Kart-–-Veibeskrivelser-reiseplanlegging-trafikkameraer-med-mer.pdf differ
diff --git a/frontend/public/wp-content/uploads/BjaavannBloggen.jpg b/frontend/public/wp-content/uploads/BjaavannBloggen.jpg
new file mode 100644
index 0000000..fde2386
Binary files /dev/null and b/frontend/public/wp-content/uploads/BjaavannBloggen.jpg differ
diff --git a/frontend/public/wp-content/uploads/Bjaavannbloggen2.jpg b/frontend/public/wp-content/uploads/Bjaavannbloggen2.jpg
new file mode 100644
index 0000000..ce59fe7
Binary files /dev/null and b/frontend/public/wp-content/uploads/Bjaavannbloggen2.jpg differ
diff --git a/frontend/public/wp-content/uploads/BodoGP_video.jpg b/frontend/public/wp-content/uploads/BodoGP_video.jpg
new file mode 100644
index 0000000..b30e642
Binary files /dev/null and b/frontend/public/wp-content/uploads/BodoGP_video.jpg differ
diff --git a/frontend/public/wp-content/uploads/Budersand-Sylt-DE.jpg b/frontend/public/wp-content/uploads/Budersand-Sylt-DE.jpg
new file mode 100644
index 0000000..1d1f613
Binary files /dev/null and b/frontend/public/wp-content/uploads/Budersand-Sylt-DE.jpg differ
diff --git a/frontend/public/wp-content/uploads/DSC_0706.jpg b/frontend/public/wp-content/uploads/DSC_0706.jpg
new file mode 100644
index 0000000..fe697c6
Binary files /dev/null and b/frontend/public/wp-content/uploads/DSC_0706.jpg differ
diff --git a/frontend/public/wp-content/uploads/DrammenGK-sommertilbud.jpg b/frontend/public/wp-content/uploads/DrammenGK-sommertilbud.jpg
new file mode 100644
index 0000000..2528b90
Binary files /dev/null and b/frontend/public/wp-content/uploads/DrammenGK-sommertilbud.jpg differ
diff --git a/frontend/public/wp-content/uploads/DrammenGK.jpg b/frontend/public/wp-content/uploads/DrammenGK.jpg
new file mode 100644
index 0000000..7ddd3c2
Binary files /dev/null and b/frontend/public/wp-content/uploads/DrammenGK.jpg differ
diff --git a/frontend/public/wp-content/uploads/DrammenGK1691.jpg b/frontend/public/wp-content/uploads/DrammenGK1691.jpg
new file mode 100644
index 0000000..fe07757
Binary files /dev/null and b/frontend/public/wp-content/uploads/DrammenGK1691.jpg differ
diff --git a/frontend/public/wp-content/uploads/DrammenGK1692.jpg b/frontend/public/wp-content/uploads/DrammenGK1692.jpg
new file mode 100644
index 0000000..4af8bd7
Binary files /dev/null and b/frontend/public/wp-content/uploads/DrammenGK1692.jpg differ
diff --git a/frontend/public/wp-content/uploads/DrammenGK1693.jpg b/frontend/public/wp-content/uploads/DrammenGK1693.jpg
new file mode 100644
index 0000000..8a699ab
Binary files /dev/null and b/frontend/public/wp-content/uploads/DrammenGK1693.jpg differ
diff --git a/frontend/public/wp-content/uploads/DrammenGK1694.jpg b/frontend/public/wp-content/uploads/DrammenGK1694.jpg
new file mode 100644
index 0000000..2c1b897
Binary files /dev/null and b/frontend/public/wp-content/uploads/DrammenGK1694.jpg differ
diff --git a/frontend/public/wp-content/uploads/DroebakGK.jpg b/frontend/public/wp-content/uploads/DroebakGK.jpg
new file mode 100644
index 0000000..d4f8463
Binary files /dev/null and b/frontend/public/wp-content/uploads/DroebakGK.jpg differ
diff --git a/frontend/public/wp-content/uploads/EGA.jpg b/frontend/public/wp-content/uploads/EGA.jpg
new file mode 100644
index 0000000..0488437
Binary files /dev/null and b/frontend/public/wp-content/uploads/EGA.jpg differ
diff --git a/frontend/public/wp-content/uploads/EgersundTopp.jpg b/frontend/public/wp-content/uploads/EgersundTopp.jpg
new file mode 100644
index 0000000..935b5dc
Binary files /dev/null and b/frontend/public/wp-content/uploads/EgersundTopp.jpg differ
diff --git a/frontend/public/wp-content/uploads/Falsterbo-Skaane-SE.jpg b/frontend/public/wp-content/uploads/Falsterbo-Skaane-SE.jpg
new file mode 100644
index 0000000..3970659
Binary files /dev/null and b/frontend/public/wp-content/uploads/Falsterbo-Skaane-SE.jpg differ
diff --git a/frontend/public/wp-content/uploads/FetGK-1.jpg b/frontend/public/wp-content/uploads/FetGK-1.jpg
new file mode 100644
index 0000000..ad0d3c1
Binary files /dev/null and b/frontend/public/wp-content/uploads/FetGK-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/Funksjon_golfpakker1.jpg b/frontend/public/wp-content/uploads/Funksjon_golfpakker1.jpg
new file mode 100644
index 0000000..d93e577
Binary files /dev/null and b/frontend/public/wp-content/uploads/Funksjon_golfpakker1.jpg differ
diff --git a/frontend/public/wp-content/uploads/GjersjoenGK2-169.jpg b/frontend/public/wp-content/uploads/GjersjoenGK2-169.jpg
new file mode 100644
index 0000000..e97515a
Binary files /dev/null and b/frontend/public/wp-content/uploads/GjersjoenGK2-169.jpg differ
diff --git a/frontend/public/wp-content/uploads/GjersjoenGK2.jpg b/frontend/public/wp-content/uploads/GjersjoenGK2.jpg
new file mode 100644
index 0000000..bde24f4
Binary files /dev/null and b/frontend/public/wp-content/uploads/GjersjoenGK2.jpg differ
diff --git a/frontend/public/wp-content/uploads/Golfbanefotografering.jpg b/frontend/public/wp-content/uploads/Golfbanefotografering.jpg
new file mode 100644
index 0000000..21dedf8
Binary files /dev/null and b/frontend/public/wp-content/uploads/Golfbanefotografering.jpg differ
diff --git a/frontend/public/wp-content/uploads/Golfbanen_Norge1.jpg b/frontend/public/wp-content/uploads/Golfbanen_Norge1.jpg
new file mode 100644
index 0000000..07dc6fd
Binary files /dev/null and b/frontend/public/wp-content/uploads/Golfbanen_Norge1.jpg differ
diff --git a/frontend/public/wp-content/uploads/GriniGK-1.jpg b/frontend/public/wp-content/uploads/GriniGK-1.jpg
new file mode 100644
index 0000000..1dc4bee
Binary files /dev/null and b/frontend/public/wp-content/uploads/GriniGK-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/HakadalBloggen.jpg b/frontend/public/wp-content/uploads/HakadalBloggen.jpg
new file mode 100644
index 0000000..d9107d7
Binary files /dev/null and b/frontend/public/wp-content/uploads/HakadalBloggen.jpg differ
diff --git a/frontend/public/wp-content/uploads/HaugerGK1.jpg b/frontend/public/wp-content/uploads/HaugerGK1.jpg
new file mode 100644
index 0000000..c2423df
Binary files /dev/null and b/frontend/public/wp-content/uploads/HaugerGK1.jpg differ
diff --git a/frontend/public/wp-content/uploads/HemsedalGK.jpg b/frontend/public/wp-content/uploads/HemsedalGK.jpg
new file mode 100644
index 0000000..658fcc1
Binary files /dev/null and b/frontend/public/wp-content/uploads/HemsedalGK.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hjemmeside-velkomstbilde.jpg b/frontend/public/wp-content/uploads/Hjemmeside-velkomstbilde.jpg
new file mode 100644
index 0000000..1fa8041
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hjemmeside-velkomstbilde.jpg differ
diff --git a/frontend/public/wp-content/uploads/HoltsmarkGK.jpg b/frontend/public/wp-content/uploads/HoltsmarkGK.jpg
new file mode 100644
index 0000000..d3848d7
Binary files /dev/null and b/frontend/public/wp-content/uploads/HoltsmarkGK.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-01.jpg b/frontend/public/wp-content/uploads/Hull-01.jpg
new file mode 100644
index 0000000..ded2f2c
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-01.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-02.jpg b/frontend/public/wp-content/uploads/Hull-02.jpg
new file mode 100644
index 0000000..2af33ef
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-02.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-03-green.jpg b/frontend/public/wp-content/uploads/Hull-03-green.jpg
new file mode 100644
index 0000000..d339c56
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-03-green.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-03.jpg b/frontend/public/wp-content/uploads/Hull-03.jpg
new file mode 100644
index 0000000..c3aa0f8
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-03.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-04-green.jpg b/frontend/public/wp-content/uploads/Hull-04-green.jpg
new file mode 100644
index 0000000..56c8747
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-04-green.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-05-green.jpg b/frontend/public/wp-content/uploads/Hull-05-green.jpg
new file mode 100644
index 0000000..018300a
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-05-green.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-07.jpg b/frontend/public/wp-content/uploads/Hull-07.jpg
new file mode 100644
index 0000000..9e9e654
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-07.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-08.jpg b/frontend/public/wp-content/uploads/Hull-08.jpg
new file mode 100644
index 0000000..b314326
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-08.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-09-green.jpg b/frontend/public/wp-content/uploads/Hull-09-green.jpg
new file mode 100644
index 0000000..778fd51
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-09-green.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-09.jpg b/frontend/public/wp-content/uploads/Hull-09.jpg
new file mode 100644
index 0000000..a86a1c0
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-09.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-1-Herdla.jpg b/frontend/public/wp-content/uploads/Hull-1-Herdla.jpg
new file mode 100644
index 0000000..eb81478
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-1-Herdla.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-1-Ogna.jpg b/frontend/public/wp-content/uploads/Hull-1-Ogna.jpg
new file mode 100644
index 0000000..28e7943
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-1-Ogna.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-10-Drammen.jpg b/frontend/public/wp-content/uploads/Hull-10-Drammen.jpg
new file mode 100644
index 0000000..48d4b2f
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-10-Drammen.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-10-Nes-09.jpg b/frontend/public/wp-content/uploads/Hull-10-Nes-09.jpg
new file mode 100644
index 0000000..ce68335
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-10-Nes-09.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-11-Sandefjord.jpg b/frontend/public/wp-content/uploads/Hull-11-Sandefjord.jpg
new file mode 100644
index 0000000..1575415
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-11-Sandefjord.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-11-paavei.jpg b/frontend/public/wp-content/uploads/Hull-11-paavei.jpg
new file mode 100644
index 0000000..e08278d
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-11-paavei.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-12-Fana.jpg b/frontend/public/wp-content/uploads/Hull-12-Fana.jpg
new file mode 100644
index 0000000..bf9afe5
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-12-Fana.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-12.jpg b/frontend/public/wp-content/uploads/Hull-12.jpg
new file mode 100644
index 0000000..055c25b
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-12.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-13-Sunnfjord.jpg b/frontend/public/wp-content/uploads/Hull-13-Sunnfjord.jpg
new file mode 100644
index 0000000..8670475
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-13-Sunnfjord.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-14-Atlungstad.jpg b/frontend/public/wp-content/uploads/Hull-14-Atlungstad.jpg
new file mode 100644
index 0000000..1914211
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-14-Atlungstad.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-15-Onsoey.jpg b/frontend/public/wp-content/uploads/Hull-15-Onsoey.jpg
new file mode 100644
index 0000000..08bb490
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-15-Onsoey.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-15.jpg b/frontend/public/wp-content/uploads/Hull-15.jpg
new file mode 100644
index 0000000..d4dd2d7
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-15.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-16-Trysil.jpg b/frontend/public/wp-content/uploads/Hull-16-Trysil.jpg
new file mode 100644
index 0000000..74e2c20
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-16-Trysil.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-16.jpg b/frontend/public/wp-content/uploads/Hull-16.jpg
new file mode 100644
index 0000000..33ba627
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-16.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-17-Haga.jpg b/frontend/public/wp-content/uploads/Hull-17-Haga.jpg
new file mode 100644
index 0000000..30381f3
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-17-Haga.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-18-Bjaavann.jpg b/frontend/public/wp-content/uploads/Hull-18-Bjaavann.jpg
new file mode 100644
index 0000000..a59d4c1
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-18-Bjaavann.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-18-Elverum.jpg b/frontend/public/wp-content/uploads/Hull-18-Elverum.jpg
new file mode 100644
index 0000000..5810011
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-18-Elverum.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-18-green.jpg b/frontend/public/wp-content/uploads/Hull-18-green.jpg
new file mode 100644
index 0000000..1f88c93
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-18-green.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-2-Steinkjer.jpg b/frontend/public/wp-content/uploads/Hull-2-Steinkjer.jpg
new file mode 100644
index 0000000..c6af571
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-2-Steinkjer.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-3-Asker1.jpg b/frontend/public/wp-content/uploads/Hull-3-Asker1.jpg
new file mode 100644
index 0000000..b8cb6fe
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-3-Asker1.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-4-Midt-Troms.jpg b/frontend/public/wp-content/uploads/Hull-4-Midt-Troms.jpg
new file mode 100644
index 0000000..3c2e5eb
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-4-Midt-Troms.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-4-Molde.jpg b/frontend/public/wp-content/uploads/Hull-4-Molde.jpg
new file mode 100644
index 0000000..ce99739
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-4-Molde.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-5-Hauger.jpg b/frontend/public/wp-content/uploads/Hull-5-Hauger.jpg
new file mode 100644
index 0000000..a38ca33
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-5-Hauger.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-5-Kvinnherad.jpg b/frontend/public/wp-content/uploads/Hull-5-Kvinnherad.jpg
new file mode 100644
index 0000000..5d48c72
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-5-Kvinnherad.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-6-Jaeren.jpg b/frontend/public/wp-content/uploads/Hull-6-Jaeren.jpg
new file mode 100644
index 0000000..294c0d2
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-6-Jaeren.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-7-Egersund.jpg b/frontend/public/wp-content/uploads/Hull-7-Egersund.jpg
new file mode 100644
index 0000000..c28ce4d
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-7-Egersund.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-7-Gjerdrum.jpg b/frontend/public/wp-content/uploads/Hull-7-Gjerdrum.jpg
new file mode 100644
index 0000000..b830ccf
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-7-Gjerdrum.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-8-Lofoten-Links.jpg b/frontend/public/wp-content/uploads/Hull-8-Lofoten-Links.jpg
new file mode 100644
index 0000000..285f873
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-8-Lofoten-Links.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-8-Trondheim.jpg b/frontend/public/wp-content/uploads/Hull-8-Trondheim.jpg
new file mode 100644
index 0000000..19e42ff
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-8-Trondheim.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-9-Kongsberg.jpg b/frontend/public/wp-content/uploads/Hull-9-Kongsberg.jpg
new file mode 100644
index 0000000..95f07d7
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-9-Kongsberg.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull-9-Noetteroey.jpg b/frontend/public/wp-content/uploads/Hull-9-Noetteroey.jpg
new file mode 100644
index 0000000..11eeca5
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull-9-Noetteroey.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull11-GamleFredrikstadGK1.jpg b/frontend/public/wp-content/uploads/Hull11-GamleFredrikstadGK1.jpg
new file mode 100644
index 0000000..f69a0d6
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull11-GamleFredrikstadGK1.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull18-BjaavannGK1.jpg b/frontend/public/wp-content/uploads/Hull18-BjaavannGK1.jpg
new file mode 100644
index 0000000..5b5ec3f
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull18-BjaavannGK1.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull3-OsloGK1.jpg b/frontend/public/wp-content/uploads/Hull3-OsloGK1.jpg
new file mode 100644
index 0000000..e8e064d
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull3-OsloGK1.jpg differ
diff --git a/frontend/public/wp-content/uploads/Hull6.jpg b/frontend/public/wp-content/uploads/Hull6.jpg
new file mode 100644
index 0000000..8b2e2f8
Binary files /dev/null and b/frontend/public/wp-content/uploads/Hull6.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_1036-450x300.jpg b/frontend/public/wp-content/uploads/IMG_1036-450x300.jpg
new file mode 100644
index 0000000..d1caa45
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_1036-450x300.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_1036-970x647.jpg b/frontend/public/wp-content/uploads/IMG_1036-970x647.jpg
new file mode 100644
index 0000000..84dacf9
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_1036-970x647.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_1036.jpg b/frontend/public/wp-content/uploads/IMG_1036.jpg
new file mode 100644
index 0000000..512dfc7
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_1036.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_1390_1600.jpg b/frontend/public/wp-content/uploads/IMG_1390_1600.jpg
new file mode 100644
index 0000000..e150677
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_1390_1600.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_123752.jpg b/frontend/public/wp-content/uploads/IMG_20161010_123752.jpg
new file mode 100644
index 0000000..a68a985
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_123752.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_124430.jpg b/frontend/public/wp-content/uploads/IMG_20161010_124430.jpg
new file mode 100644
index 0000000..5d82679
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_124430.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_130801.jpg b/frontend/public/wp-content/uploads/IMG_20161010_130801.jpg
new file mode 100644
index 0000000..9db5fb8
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_130801.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_130840.jpg b/frontend/public/wp-content/uploads/IMG_20161010_130840.jpg
new file mode 100644
index 0000000..0db8442
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_130840.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_132244.jpg b/frontend/public/wp-content/uploads/IMG_20161010_132244.jpg
new file mode 100644
index 0000000..6cd1a3b
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_132244.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_132920.jpg b/frontend/public/wp-content/uploads/IMG_20161010_132920.jpg
new file mode 100644
index 0000000..15bb169
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_132920.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_133614.jpg b/frontend/public/wp-content/uploads/IMG_20161010_133614.jpg
new file mode 100644
index 0000000..a1d84bf
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_133614.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_134757.jpg b/frontend/public/wp-content/uploads/IMG_20161010_134757.jpg
new file mode 100644
index 0000000..f0a8edb
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_134757.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_140229.jpg b/frontend/public/wp-content/uploads/IMG_20161010_140229.jpg
new file mode 100644
index 0000000..6636335
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_140229.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_140623.jpg b/frontend/public/wp-content/uploads/IMG_20161010_140623.jpg
new file mode 100644
index 0000000..41fe875
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_140623.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_142832.jpg b/frontend/public/wp-content/uploads/IMG_20161010_142832.jpg
new file mode 100644
index 0000000..9f910fd
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_142832.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_150844.jpg b/frontend/public/wp-content/uploads/IMG_20161010_150844.jpg
new file mode 100644
index 0000000..e11caca
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_150844.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_151204.jpg b/frontend/public/wp-content/uploads/IMG_20161010_151204.jpg
new file mode 100644
index 0000000..112cb7c
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_151204.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_151340-1.jpg b/frontend/public/wp-content/uploads/IMG_20161010_151340-1.jpg
new file mode 100644
index 0000000..26f79a0
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_151340-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_152138.jpg b/frontend/public/wp-content/uploads/IMG_20161010_152138.jpg
new file mode 100644
index 0000000..cfc082e
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_152138.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_154244.jpg b/frontend/public/wp-content/uploads/IMG_20161010_154244.jpg
new file mode 100644
index 0000000..a530406
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_154244.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_155424.jpg b/frontend/public/wp-content/uploads/IMG_20161010_155424.jpg
new file mode 100644
index 0000000..34ff806
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_155424.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_160352.jpg b/frontend/public/wp-content/uploads/IMG_20161010_160352.jpg
new file mode 100644
index 0000000..33e4ad1
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_160352.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_160804.jpg b/frontend/public/wp-content/uploads/IMG_20161010_160804.jpg
new file mode 100644
index 0000000..56089f4
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_160804.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161010_160831.jpg b/frontend/public/wp-content/uploads/IMG_20161010_160831.jpg
new file mode 100644
index 0000000..1610ea1
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161010_160831.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20161012_155811-1-1-.jpg b/frontend/public/wp-content/uploads/IMG_20161012_155811-1-1-.jpg
new file mode 100644
index 0000000..6dc549e
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20161012_155811-1-1-.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170321_115423.jpg b/frontend/public/wp-content/uploads/IMG_20170321_115423.jpg
new file mode 100644
index 0000000..4d09ffb
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170321_115423.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170321_122129.jpg b/frontend/public/wp-content/uploads/IMG_20170321_122129.jpg
new file mode 100644
index 0000000..3a7adec
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170321_122129.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170321_124748.jpg b/frontend/public/wp-content/uploads/IMG_20170321_124748.jpg
new file mode 100644
index 0000000..600be95
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170321_124748.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170321_125348.jpg b/frontend/public/wp-content/uploads/IMG_20170321_125348.jpg
new file mode 100644
index 0000000..5c2af0c
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170321_125348.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170321_125848.jpg b/frontend/public/wp-content/uploads/IMG_20170321_125848.jpg
new file mode 100644
index 0000000..4d1546c
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170321_125848.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170321_133317.jpg b/frontend/public/wp-content/uploads/IMG_20170321_133317.jpg
new file mode 100644
index 0000000..0c004ed
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170321_133317.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170321_133822.jpg b/frontend/public/wp-content/uploads/IMG_20170321_133822.jpg
new file mode 100644
index 0000000..3e94b5e
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170321_133822.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170321_145725.jpg b/frontend/public/wp-content/uploads/IMG_20170321_145725.jpg
new file mode 100644
index 0000000..336bf4e
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170321_145725.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170321_150321.jpg b/frontend/public/wp-content/uploads/IMG_20170321_150321.jpg
new file mode 100644
index 0000000..fb4c88e
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170321_150321.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_102806.jpg b/frontend/public/wp-content/uploads/IMG_20170322_102806.jpg
new file mode 100644
index 0000000..fcaa231
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_102806.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_102811.jpg b/frontend/public/wp-content/uploads/IMG_20170322_102811.jpg
new file mode 100644
index 0000000..dfdf475
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_102811.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_113825.jpg b/frontend/public/wp-content/uploads/IMG_20170322_113825.jpg
new file mode 100644
index 0000000..fcdb227
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_113825.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_114817.jpg b/frontend/public/wp-content/uploads/IMG_20170322_114817.jpg
new file mode 100644
index 0000000..59d9cb7
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_114817.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_115102-1.jpg b/frontend/public/wp-content/uploads/IMG_20170322_115102-1.jpg
new file mode 100644
index 0000000..6b07c52
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_115102-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_115844-1.jpg b/frontend/public/wp-content/uploads/IMG_20170322_115844-1.jpg
new file mode 100644
index 0000000..298a8c5
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_115844-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_120521.jpg b/frontend/public/wp-content/uploads/IMG_20170322_120521.jpg
new file mode 100644
index 0000000..a3f095e
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_120521.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_133714-1.jpg b/frontend/public/wp-content/uploads/IMG_20170322_133714-1.jpg
new file mode 100644
index 0000000..dbc6d15
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_133714-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_134847-1.jpg b/frontend/public/wp-content/uploads/IMG_20170322_134847-1.jpg
new file mode 100644
index 0000000..a8611b8
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_134847-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_140324-1.jpg b/frontend/public/wp-content/uploads/IMG_20170322_140324-1.jpg
new file mode 100644
index 0000000..b572465
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_140324-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_140400-1.jpg b/frontend/public/wp-content/uploads/IMG_20170322_140400-1.jpg
new file mode 100644
index 0000000..3c34bce
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_140400-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_140400-3.jpg b/frontend/public/wp-content/uploads/IMG_20170322_140400-3.jpg
new file mode 100644
index 0000000..741e076
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_140400-3.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_143017-1.jpg b/frontend/public/wp-content/uploads/IMG_20170322_143017-1.jpg
new file mode 100644
index 0000000..e65577e
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_143017-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_143208-1.jpg b/frontend/public/wp-content/uploads/IMG_20170322_143208-1.jpg
new file mode 100644
index 0000000..b711b21
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_143208-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_144042-1.jpg b/frontend/public/wp-content/uploads/IMG_20170322_144042-1.jpg
new file mode 100644
index 0000000..333f36f
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_144042-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170322_153238.jpg b/frontend/public/wp-content/uploads/IMG_20170322_153238.jpg
new file mode 100644
index 0000000..3c2bcca
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170322_153238.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170910_193037-min.jpg b/frontend/public/wp-content/uploads/IMG_20170910_193037-min.jpg
new file mode 100644
index 0000000..23453f2
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170910_193037-min.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170918_172854-min.jpg b/frontend/public/wp-content/uploads/IMG_20170918_172854-min.jpg
new file mode 100644
index 0000000..1a6d922
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170918_172854-min.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170923.jpg b/frontend/public/wp-content/uploads/IMG_20170923.jpg
new file mode 100644
index 0000000..b0dafca
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170923.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20170930_104631.jpg b/frontend/public/wp-content/uploads/IMG_20170930_104631.jpg
new file mode 100644
index 0000000..839e2f7
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20170930_104631.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_111653.jpg b/frontend/public/wp-content/uploads/IMG_20171013_111653.jpg
new file mode 100644
index 0000000..420c02e
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_111653.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_121558.jpg b/frontend/public/wp-content/uploads/IMG_20171013_121558.jpg
new file mode 100644
index 0000000..76a9e6a
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_121558.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_124955.jpg b/frontend/public/wp-content/uploads/IMG_20171013_124955.jpg
new file mode 100644
index 0000000..a778470
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_124955.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_125431.jpg b/frontend/public/wp-content/uploads/IMG_20171013_125431.jpg
new file mode 100644
index 0000000..92f9e1b
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_125431.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_131612.jpg b/frontend/public/wp-content/uploads/IMG_20171013_131612.jpg
new file mode 100644
index 0000000..2fbacb2
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_131612.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_132443.jpg b/frontend/public/wp-content/uploads/IMG_20171013_132443.jpg
new file mode 100644
index 0000000..b292760
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_132443.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_133008.jpg b/frontend/public/wp-content/uploads/IMG_20171013_133008.jpg
new file mode 100644
index 0000000..cec1c4f
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_133008.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_133705.jpg b/frontend/public/wp-content/uploads/IMG_20171013_133705.jpg
new file mode 100644
index 0000000..dec53ae
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_133705.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_141016.jpg b/frontend/public/wp-content/uploads/IMG_20171013_141016.jpg
new file mode 100644
index 0000000..7e5fe56
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_141016.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_143147.jpg b/frontend/public/wp-content/uploads/IMG_20171013_143147.jpg
new file mode 100644
index 0000000..2b9c29f
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_143147.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_143212.jpg b/frontend/public/wp-content/uploads/IMG_20171013_143212.jpg
new file mode 100644
index 0000000..a85ecf1
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_143212.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_145005.jpg b/frontend/public/wp-content/uploads/IMG_20171013_145005.jpg
new file mode 100644
index 0000000..8b2cc0a
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_145005.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_145238.jpg b/frontend/public/wp-content/uploads/IMG_20171013_145238.jpg
new file mode 100644
index 0000000..e17645f
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_145238.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_151525.jpg b/frontend/public/wp-content/uploads/IMG_20171013_151525.jpg
new file mode 100644
index 0000000..eeed17f
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_151525.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171013_154834.jpg b/frontend/public/wp-content/uploads/IMG_20171013_154834.jpg
new file mode 100644
index 0000000..38189aa
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171013_154834.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_110533.jpg b/frontend/public/wp-content/uploads/IMG_20171109_110533.jpg
new file mode 100644
index 0000000..285e714
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_110533.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_111422.jpg b/frontend/public/wp-content/uploads/IMG_20171109_111422.jpg
new file mode 100644
index 0000000..b701add
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_111422.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_112720.jpg b/frontend/public/wp-content/uploads/IMG_20171109_112720.jpg
new file mode 100644
index 0000000..b0de8c7
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_112720.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_114144.jpg b/frontend/public/wp-content/uploads/IMG_20171109_114144.jpg
new file mode 100644
index 0000000..0cf5d50
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_114144.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_115840.jpg b/frontend/public/wp-content/uploads/IMG_20171109_115840.jpg
new file mode 100644
index 0000000..1556d41
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_115840.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_121037.jpg b/frontend/public/wp-content/uploads/IMG_20171109_121037.jpg
new file mode 100644
index 0000000..d90922a
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_121037.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_121631.jpg b/frontend/public/wp-content/uploads/IMG_20171109_121631.jpg
new file mode 100644
index 0000000..0802307
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_121631.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_122222.jpg b/frontend/public/wp-content/uploads/IMG_20171109_122222.jpg
new file mode 100644
index 0000000..eb8e427
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_122222.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_122614.jpg b/frontend/public/wp-content/uploads/IMG_20171109_122614.jpg
new file mode 100644
index 0000000..2861dc3
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_122614.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_123710.jpg b/frontend/public/wp-content/uploads/IMG_20171109_123710.jpg
new file mode 100644
index 0000000..c3b0518
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_123710.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_123901.jpg b/frontend/public/wp-content/uploads/IMG_20171109_123901.jpg
new file mode 100644
index 0000000..82af693
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_123901.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_125623.jpg b/frontend/public/wp-content/uploads/IMG_20171109_125623.jpg
new file mode 100644
index 0000000..e671575
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_125623.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_131703.jpg b/frontend/public/wp-content/uploads/IMG_20171109_131703.jpg
new file mode 100644
index 0000000..0b833d9
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_131703.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_132445.jpg b/frontend/public/wp-content/uploads/IMG_20171109_132445.jpg
new file mode 100644
index 0000000..26f7bf3
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_132445.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_133536.jpg b/frontend/public/wp-content/uploads/IMG_20171109_133536.jpg
new file mode 100644
index 0000000..ceb9c55
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_133536.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_135730.jpg b/frontend/public/wp-content/uploads/IMG_20171109_135730.jpg
new file mode 100644
index 0000000..f472a8d
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_135730.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_141849.jpg b/frontend/public/wp-content/uploads/IMG_20171109_141849.jpg
new file mode 100644
index 0000000..70ca67d
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_141849.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20171109_143133.jpg b/frontend/public/wp-content/uploads/IMG_20171109_143133.jpg
new file mode 100644
index 0000000..c3e552b
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20171109_143133.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20180421_153140-min.jpg b/frontend/public/wp-content/uploads/IMG_20180421_153140-min.jpg
new file mode 100644
index 0000000..2b8c28f
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20180421_153140-min.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20180908_085514.jpg b/frontend/public/wp-content/uploads/IMG_20180908_085514.jpg
new file mode 100644
index 0000000..084e599
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20180908_085514.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20180915_114009-1.jpg b/frontend/public/wp-content/uploads/IMG_20180915_114009-1.jpg
new file mode 100644
index 0000000..49ced10
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20180915_114009-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20181017_142832.jpg b/frontend/public/wp-content/uploads/IMG_20181017_142832.jpg
new file mode 100644
index 0000000..63f82c5
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20181017_142832.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20190331_132122.jpg b/frontend/public/wp-content/uploads/IMG_20190331_132122.jpg
new file mode 100644
index 0000000..0304076
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20190331_132122.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200626_082335-2-1.jpg b/frontend/public/wp-content/uploads/IMG_20200626_082335-2-1.jpg
new file mode 100644
index 0000000..370bc52
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200626_082335-2-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200626_084301762-1-1.jpg b/frontend/public/wp-content/uploads/IMG_20200626_084301762-1-1.jpg
new file mode 100644
index 0000000..17cdf0f
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200626_084301762-1-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200626_115126-1-1.jpg b/frontend/public/wp-content/uploads/IMG_20200626_115126-1-1.jpg
new file mode 100644
index 0000000..6d2d77c
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200626_115126-1-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200627_052333-1-1.jpg b/frontend/public/wp-content/uploads/IMG_20200627_052333-1-1.jpg
new file mode 100644
index 0000000..536b6ee
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200627_052333-1-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200627_105607956_HDR-2.jpg b/frontend/public/wp-content/uploads/IMG_20200627_105607956_HDR-2.jpg
new file mode 100644
index 0000000..79e7a11
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200627_105607956_HDR-2.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200627_122453-1.jpg b/frontend/public/wp-content/uploads/IMG_20200627_122453-1.jpg
new file mode 100644
index 0000000..605e10c
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200627_122453-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200627_160446-1.jpg b/frontend/public/wp-content/uploads/IMG_20200627_160446-1.jpg
new file mode 100644
index 0000000..1a05847
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200627_160446-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200627_160627-1.jpg b/frontend/public/wp-content/uploads/IMG_20200627_160627-1.jpg
new file mode 100644
index 0000000..12d0a14
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200627_160627-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200627_220124844_HDR-1.jpg b/frontend/public/wp-content/uploads/IMG_20200627_220124844_HDR-1.jpg
new file mode 100644
index 0000000..dc50530
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200627_220124844_HDR-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_100951742_HDR-1-min.jpg b/frontend/public/wp-content/uploads/IMG_20200628_100951742_HDR-1-min.jpg
new file mode 100644
index 0000000..acbdd4f
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_100951742_HDR-1-min.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_110631-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_110631-1.jpg
new file mode 100644
index 0000000..aa4605d
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_110631-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_113104__-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_113104__-1.jpg
new file mode 100644
index 0000000..cf3049b
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_113104__-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_120440_-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_120440_-1.jpg
new file mode 100644
index 0000000..6757274
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_120440_-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_123407_-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_123407_-1.jpg
new file mode 100644
index 0000000..0820a82
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_123407_-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_125116_-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_125116_-1.jpg
new file mode 100644
index 0000000..17ec7d4
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_125116_-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_182651-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_182651-1.jpg
new file mode 100644
index 0000000..ca01aef
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_182651-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_225340-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_225340-1.jpg
new file mode 100644
index 0000000..850b50b
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_225340-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_230223-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_230223-1.jpg
new file mode 100644
index 0000000..76e8b9c
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_230223-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_231019-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_231019-1.jpg
new file mode 100644
index 0000000..5e114f5
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_231019-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_232341-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_232341-1.jpg
new file mode 100644
index 0000000..e737fda
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_232341-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_232822-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_232822-1.jpg
new file mode 100644
index 0000000..220592b
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_232822-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_234346-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_234346-1.jpg
new file mode 100644
index 0000000..832a7d7
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_234346-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_234845-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_234845-1.jpg
new file mode 100644
index 0000000..cb67a91
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_234845-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_235312-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_235312-1.jpg
new file mode 100644
index 0000000..37cf118
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_235312-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200628_235607-1.jpg b/frontend/public/wp-content/uploads/IMG_20200628_235607-1.jpg
new file mode 100644
index 0000000..bd20a8b
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200628_235607-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_000938-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_000938-1.jpg
new file mode 100644
index 0000000..5aaa536
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_000938-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_001112-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_001112-1.jpg
new file mode 100644
index 0000000..910fc13
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_001112-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_004220_-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_004220_-1.jpg
new file mode 100644
index 0000000..baa581d
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_004220_-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_005205_-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_005205_-1.jpg
new file mode 100644
index 0000000..6edd053
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_005205_-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_005708_-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_005708_-1.jpg
new file mode 100644
index 0000000..e896569
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_005708_-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_010016_-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_010016_-1.jpg
new file mode 100644
index 0000000..6b182b9
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_010016_-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_011612_-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_011612_-1.jpg
new file mode 100644
index 0000000..e0bcd3d
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_011612_-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_011651_-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_011651_-1.jpg
new file mode 100644
index 0000000..b1da5ff
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_011651_-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_012044_-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_012044_-1.jpg
new file mode 100644
index 0000000..6b3f6f9
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_012044_-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_015416_-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_015416_-1.jpg
new file mode 100644
index 0000000..09a56ce
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_015416_-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_021257-1-1-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_021257-1-1-1.jpg
new file mode 100644
index 0000000..9de1c31
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_021257-1-1-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_021749-1-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_021749-1-1.jpg
new file mode 100644
index 0000000..33c3a73
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_021749-1-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_022253-1-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_022253-1-1.jpg
new file mode 100644
index 0000000..51d5c71
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_022253-1-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_034323_-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_034323_-1.jpg
new file mode 100644
index 0000000..4376d06
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_034323_-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_105841138-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_105841138-1.jpg
new file mode 100644
index 0000000..8338e6d
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_105841138-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_20200629_112301-1.jpg b/frontend/public/wp-content/uploads/IMG_20200629_112301-1.jpg
new file mode 100644
index 0000000..00b1b38
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_20200629_112301-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/IMG_Hull12-bakover.jpg b/frontend/public/wp-content/uploads/IMG_Hull12-bakover.jpg
new file mode 100644
index 0000000..87e41d7
Binary files /dev/null and b/frontend/public/wp-content/uploads/IMG_Hull12-bakover.jpg differ
diff --git a/frontend/public/wp-content/uploads/InstaAtTeeOff.jpg b/frontend/public/wp-content/uploads/InstaAtTeeOff.jpg
new file mode 100644
index 0000000..a3a09b3
Binary files /dev/null and b/frontend/public/wp-content/uploads/InstaAtTeeOff.jpg differ
diff --git a/frontend/public/wp-content/uploads/Klubbhus-1-1-scaled.jpg b/frontend/public/wp-content/uploads/Klubbhus-1-1-scaled.jpg
new file mode 100644
index 0000000..4bbcd30
Binary files /dev/null and b/frontend/public/wp-content/uploads/Klubbhus-1-1-scaled.jpg differ
diff --git a/frontend/public/wp-content/uploads/KrageroGK-1.jpg b/frontend/public/wp-content/uploads/KrageroGK-1.jpg
new file mode 100644
index 0000000..7cdf51d
Binary files /dev/null and b/frontend/public/wp-content/uploads/KrageroGK-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/KrageroGK-2.jpg b/frontend/public/wp-content/uploads/KrageroGK-2.jpg
new file mode 100644
index 0000000..bb27278
Binary files /dev/null and b/frontend/public/wp-content/uploads/KrageroGK-2.jpg differ
diff --git a/frontend/public/wp-content/uploads/LarvikGK.jpg b/frontend/public/wp-content/uploads/LarvikGK.jpg
new file mode 100644
index 0000000..2638d97
Binary files /dev/null and b/frontend/public/wp-content/uploads/LarvikGK.jpg differ
diff --git a/frontend/public/wp-content/uploads/LifeProTip.jpg b/frontend/public/wp-content/uploads/LifeProTip.jpg
new file mode 100644
index 0000000..4143ccb
Binary files /dev/null and b/frontend/public/wp-content/uploads/LifeProTip.jpg differ
diff --git a/frontend/public/wp-content/uploads/LosbyGK.jpg b/frontend/public/wp-content/uploads/LosbyGK.jpg
new file mode 100644
index 0000000..0fe9069
Binary files /dev/null and b/frontend/public/wp-content/uploads/LosbyGK.jpg differ
diff --git a/frontend/public/wp-content/uploads/LosbyGK16-9.jpg b/frontend/public/wp-content/uploads/LosbyGK16-9.jpg
new file mode 100644
index 0000000..505ee43
Binary files /dev/null and b/frontend/public/wp-content/uploads/LosbyGK16-9.jpg differ
diff --git a/frontend/public/wp-content/uploads/Lubker-DK.jpg b/frontend/public/wp-content/uploads/Lubker-DK.jpg
new file mode 100644
index 0000000..6dd8237
Binary files /dev/null and b/frontend/public/wp-content/uploads/Lubker-DK.jpg differ
diff --git a/frontend/public/wp-content/uploads/Medlemskap-Bleik-Hoeken.jpg b/frontend/public/wp-content/uploads/Medlemskap-Bleik-Hoeken.jpg
new file mode 100644
index 0000000..bba1f78
Binary files /dev/null and b/frontend/public/wp-content/uploads/Medlemskap-Bleik-Hoeken.jpg differ
diff --git a/frontend/public/wp-content/uploads/Mental-breakdown.jpeg b/frontend/public/wp-content/uploads/Mental-breakdown.jpeg
new file mode 100644
index 0000000..837e734
Binary files /dev/null and b/frontend/public/wp-content/uploads/Mental-breakdown.jpeg differ
diff --git a/frontend/public/wp-content/uploads/Midt-TromsBloggen.jpg b/frontend/public/wp-content/uploads/Midt-TromsBloggen.jpg
new file mode 100644
index 0000000..7e869f5
Binary files /dev/null and b/frontend/public/wp-content/uploads/Midt-TromsBloggen.jpg differ
diff --git a/frontend/public/wp-content/uploads/Miklagard-169.jpg b/frontend/public/wp-content/uploads/Miklagard-169.jpg
new file mode 100644
index 0000000..68f25c8
Binary files /dev/null and b/frontend/public/wp-content/uploads/Miklagard-169.jpg differ
diff --git a/frontend/public/wp-content/uploads/MiklagardGK.jpg b/frontend/public/wp-content/uploads/MiklagardGK.jpg
new file mode 100644
index 0000000..93eaee7
Binary files /dev/null and b/frontend/public/wp-content/uploads/MiklagardGK.jpg differ
diff --git a/frontend/public/wp-content/uploads/Min-beste-runde.jpg b/frontend/public/wp-content/uploads/Min-beste-runde.jpg
new file mode 100644
index 0000000..f4ee117
Binary files /dev/null and b/frontend/public/wp-content/uploads/Min-beste-runde.jpg differ
diff --git a/frontend/public/wp-content/uploads/MoerkGK.jpg b/frontend/public/wp-content/uploads/MoerkGK.jpg
new file mode 100644
index 0000000..a0489e3
Binary files /dev/null and b/frontend/public/wp-content/uploads/MoerkGK.jpg differ
diff --git a/frontend/public/wp-content/uploads/MorkGK2.jpg b/frontend/public/wp-content/uploads/MorkGK2.jpg
new file mode 100644
index 0000000..1a6a6c0
Binary files /dev/null and b/frontend/public/wp-content/uploads/MorkGK2.jpg differ
diff --git a/frontend/public/wp-content/uploads/MossRyggeGK.jpg b/frontend/public/wp-content/uploads/MossRyggeGK.jpg
new file mode 100644
index 0000000..eb7f94a
Binary files /dev/null and b/frontend/public/wp-content/uploads/MossRyggeGK.jpg differ
diff --git a/frontend/public/wp-content/uploads/Nedslagsmerke.jpg b/frontend/public/wp-content/uploads/Nedslagsmerke.jpg
new file mode 100644
index 0000000..56fad25
Binary files /dev/null and b/frontend/public/wp-content/uploads/Nedslagsmerke.jpg differ
diff --git a/frontend/public/wp-content/uploads/NesbyenGK2.jpg b/frontend/public/wp-content/uploads/NesbyenGK2.jpg
new file mode 100644
index 0000000..6e38f79
Binary files /dev/null and b/frontend/public/wp-content/uploads/NesbyenGK2.jpg differ
diff --git a/frontend/public/wp-content/uploads/NettsideSteinkjerGK.jpg b/frontend/public/wp-content/uploads/NettsideSteinkjerGK.jpg
new file mode 100644
index 0000000..6fb924f
Binary files /dev/null and b/frontend/public/wp-content/uploads/NettsideSteinkjerGK.jpg differ
diff --git a/frontend/public/wp-content/uploads/Nordgeven-1920x1080.jpg b/frontend/public/wp-content/uploads/Nordgeven-1920x1080.jpg
new file mode 100644
index 0000000..93fd2a0
Binary files /dev/null and b/frontend/public/wp-content/uploads/Nordgeven-1920x1080.jpg differ
diff --git a/frontend/public/wp-content/uploads/Norges-vanskeligste1.jpg b/frontend/public/wp-content/uploads/Norges-vanskeligste1.jpg
new file mode 100644
index 0000000..c30b8ab
Binary files /dev/null and b/frontend/public/wp-content/uploads/Norges-vanskeligste1.jpg differ
diff --git a/frontend/public/wp-content/uploads/Norges_gjennomsnittshull.jpg b/frontend/public/wp-content/uploads/Norges_gjennomsnittshull.jpg
new file mode 100644
index 0000000..a444439
Binary files /dev/null and b/frontend/public/wp-content/uploads/Norges_gjennomsnittshull.jpg differ
diff --git a/frontend/public/wp-content/uploads/Notteroy-169-1.jpg b/frontend/public/wp-content/uploads/Notteroy-169-1.jpg
new file mode 100644
index 0000000..7205d2a
Binary files /dev/null and b/frontend/public/wp-content/uploads/Notteroy-169-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/NotteroyGK-artikkelbilde.jpg b/frontend/public/wp-content/uploads/NotteroyGK-artikkelbilde.jpg
new file mode 100644
index 0000000..c8a71e9
Binary files /dev/null and b/frontend/public/wp-content/uploads/NotteroyGK-artikkelbilde.jpg differ
diff --git a/frontend/public/wp-content/uploads/NyFunksjonTeeOff.jpg b/frontend/public/wp-content/uploads/NyFunksjonTeeOff.jpg
new file mode 100644
index 0000000..f57ced4
Binary files /dev/null and b/frontend/public/wp-content/uploads/NyFunksjonTeeOff.jpg differ
diff --git a/frontend/public/wp-content/uploads/Odense.jpg b/frontend/public/wp-content/uploads/Odense.jpg
new file mode 100644
index 0000000..df99c3f
Binary files /dev/null and b/frontend/public/wp-content/uploads/Odense.jpg differ
diff --git a/frontend/public/wp-content/uploads/OsloGk-169-1.jpg b/frontend/public/wp-content/uploads/OsloGk-169-1.jpg
new file mode 100644
index 0000000..793fd78
Binary files /dev/null and b/frontend/public/wp-content/uploads/OsloGk-169-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/Randaberg1920.jpg b/frontend/public/wp-content/uploads/Randaberg1920.jpg
new file mode 100644
index 0000000..731155d
Binary files /dev/null and b/frontend/public/wp-content/uploads/Randaberg1920.jpg differ
diff --git a/frontend/public/wp-content/uploads/Regelrytter.jpg b/frontend/public/wp-content/uploads/Regelrytter.jpg
new file mode 100644
index 0000000..329a0a2
Binary files /dev/null and b/frontend/public/wp-content/uploads/Regelrytter.jpg differ
diff --git a/frontend/public/wp-content/uploads/RoyalOak-DK.jpg b/frontend/public/wp-content/uploads/RoyalOak-DK.jpg
new file mode 100644
index 0000000..96a1c63
Binary files /dev/null and b/frontend/public/wp-content/uploads/RoyalOak-DK.jpg differ
diff --git a/frontend/public/wp-content/uploads/SaltenBlogg3.jpg b/frontend/public/wp-content/uploads/SaltenBlogg3.jpg
new file mode 100644
index 0000000..a6137e5
Binary files /dev/null and b/frontend/public/wp-content/uploads/SaltenBlogg3.jpg differ
diff --git a/frontend/public/wp-content/uploads/Sand-SE.jpg b/frontend/public/wp-content/uploads/Sand-SE.jpg
new file mode 100644
index 0000000..1492810
Binary files /dev/null and b/frontend/public/wp-content/uploads/Sand-SE.jpg differ
diff --git a/frontend/public/wp-content/uploads/Sinnagolfer.jpg b/frontend/public/wp-content/uploads/Sinnagolfer.jpg
new file mode 100644
index 0000000..cad7355
Binary files /dev/null and b/frontend/public/wp-content/uploads/Sinnagolfer.jpg differ
diff --git a/frontend/public/wp-content/uploads/SkiGK.jpg b/frontend/public/wp-content/uploads/SkiGK.jpg
new file mode 100644
index 0000000..58ac644
Binary files /dev/null and b/frontend/public/wp-content/uploads/SkiGK.jpg differ
diff --git a/frontend/public/wp-content/uploads/Skjermbilde-fra-2015-03-16-193059.png b/frontend/public/wp-content/uploads/Skjermbilde-fra-2015-03-16-193059.png
new file mode 100644
index 0000000..78734f6
Binary files /dev/null and b/frontend/public/wp-content/uploads/Skjermbilde-fra-2015-03-16-193059.png differ
diff --git a/frontend/public/wp-content/uploads/Skjermbilde-fra-2015-03-18-091010.png b/frontend/public/wp-content/uploads/Skjermbilde-fra-2015-03-18-091010.png
new file mode 100644
index 0000000..fd4555f
Binary files /dev/null and b/frontend/public/wp-content/uploads/Skjermbilde-fra-2015-03-18-091010.png differ
diff --git a/frontend/public/wp-content/uploads/SotraGolfklubb1.jpg b/frontend/public/wp-content/uploads/SotraGolfklubb1.jpg
new file mode 100644
index 0000000..58aee38
Binary files /dev/null and b/frontend/public/wp-content/uploads/SotraGolfklubb1.jpg differ
diff --git a/frontend/public/wp-content/uploads/TGK-DR-1.jpg b/frontend/public/wp-content/uploads/TGK-DR-1.jpg
new file mode 100644
index 0000000..9b0f08c
Binary files /dev/null and b/frontend/public/wp-content/uploads/TGK-DR-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/TeeOff-Multilanguage1600.jpg b/frontend/public/wp-content/uploads/TeeOff-Multilanguage1600.jpg
new file mode 100644
index 0000000..cada3e2
Binary files /dev/null and b/frontend/public/wp-content/uploads/TeeOff-Multilanguage1600.jpg differ
diff --git a/frontend/public/wp-content/uploads/TeeOffEttAar.jpg b/frontend/public/wp-content/uploads/TeeOffEttAar.jpg
new file mode 100644
index 0000000..dbe5f8e
Binary files /dev/null and b/frontend/public/wp-content/uploads/TeeOffEttAar.jpg differ
diff --git a/frontend/public/wp-content/uploads/TeeOffLokalisering.jpg b/frontend/public/wp-content/uploads/TeeOffLokalisering.jpg
new file mode 100644
index 0000000..823e2a1
Binary files /dev/null and b/frontend/public/wp-content/uploads/TeeOffLokalisering.jpg differ
diff --git a/frontend/public/wp-content/uploads/TeeOffNyLayout.jpg b/frontend/public/wp-content/uploads/TeeOffNyLayout.jpg
new file mode 100644
index 0000000..45cfef9
Binary files /dev/null and b/frontend/public/wp-content/uploads/TeeOffNyLayout.jpg differ
diff --git a/frontend/public/wp-content/uploads/The-Scandinavium-Old-Course-Farum-DK.jpg b/frontend/public/wp-content/uploads/The-Scandinavium-Old-Course-Farum-DK.jpg
new file mode 100644
index 0000000..3009635
Binary files /dev/null and b/frontend/public/wp-content/uploads/The-Scandinavium-Old-Course-Farum-DK.jpg differ
diff --git a/frontend/public/wp-content/uploads/Tingvoll-1920-1080-edt.jpg b/frontend/public/wp-content/uploads/Tingvoll-1920-1080-edt.jpg
new file mode 100644
index 0000000..87b6075
Binary files /dev/null and b/frontend/public/wp-content/uploads/Tingvoll-1920-1080-edt.jpg differ
diff --git a/frontend/public/wp-content/uploads/TjoemeGK-DrivingRange-Gina-Gisholt.jpg b/frontend/public/wp-content/uploads/TjoemeGK-DrivingRange-Gina-Gisholt.jpg
new file mode 100644
index 0000000..e6f9f9c
Binary files /dev/null and b/frontend/public/wp-content/uploads/TjoemeGK-DrivingRange-Gina-Gisholt.jpg differ
diff --git a/frontend/public/wp-content/uploads/Toppbilde-default.jpg b/frontend/public/wp-content/uploads/Toppbilde-default.jpg
new file mode 100644
index 0000000..5b2f282
Binary files /dev/null and b/frontend/public/wp-content/uploads/Toppbilde-default.jpg differ
diff --git a/frontend/public/wp-content/uploads/Turneringsanarki-foto-gina-gisholt.jpg b/frontend/public/wp-content/uploads/Turneringsanarki-foto-gina-gisholt.jpg
new file mode 100644
index 0000000..12fe8c5
Binary files /dev/null and b/frontend/public/wp-content/uploads/Turneringsanarki-foto-gina-gisholt.jpg differ
diff --git a/frontend/public/wp-content/uploads/UllensakerGK.jpg b/frontend/public/wp-content/uploads/UllensakerGK.jpg
new file mode 100644
index 0000000..00ef6c2
Binary files /dev/null and b/frontend/public/wp-content/uploads/UllensakerGK.jpg differ
diff --git a/frontend/public/wp-content/uploads/Vasatorp-Classic-course-SE.jpg b/frontend/public/wp-content/uploads/Vasatorp-Classic-course-SE.jpg
new file mode 100644
index 0000000..02d1aee
Binary files /dev/null and b/frontend/public/wp-content/uploads/Vasatorp-Classic-course-SE.jpg differ
diff --git a/frontend/public/wp-content/uploads/VelkommenKracht.jpg b/frontend/public/wp-content/uploads/VelkommenKracht.jpg
new file mode 100644
index 0000000..c254362
Binary files /dev/null and b/frontend/public/wp-content/uploads/VelkommenKracht.jpg differ
diff --git a/frontend/public/wp-content/uploads/ViljeEvne-1-1.jpg b/frontend/public/wp-content/uploads/ViljeEvne-1-1.jpg
new file mode 100644
index 0000000..0e09eea
Binary files /dev/null and b/frontend/public/wp-content/uploads/ViljeEvne-1-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/Vradal.jpg b/frontend/public/wp-content/uploads/Vradal.jpg
new file mode 100644
index 0000000..1941e02
Binary files /dev/null and b/frontend/public/wp-content/uploads/Vradal.jpg differ
diff --git a/frontend/public/wp-content/uploads/brick-2646694_1920-1.jpg b/frontend/public/wp-content/uploads/brick-2646694_1920-1.jpg
new file mode 100644
index 0000000..9dfe59b
Binary files /dev/null and b/frontend/public/wp-content/uploads/brick-2646694_1920-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/bug-169.jpg b/frontend/public/wp-content/uploads/bug-169.jpg
new file mode 100644
index 0000000..4686902
Binary files /dev/null and b/frontend/public/wp-content/uploads/bug-169.jpg differ
diff --git a/frontend/public/wp-content/uploads/close-soon.png b/frontend/public/wp-content/uploads/close-soon.png
new file mode 100644
index 0000000..e8f32a7
Binary files /dev/null and b/frontend/public/wp-content/uploads/close-soon.png differ
diff --git a/frontend/public/wp-content/uploads/closed.png b/frontend/public/wp-content/uploads/closed.png
new file mode 100644
index 0000000..9692f66
Binary files /dev/null and b/frontend/public/wp-content/uploads/closed.png differ
diff --git a/frontend/public/wp-content/uploads/discontinued-.png b/frontend/public/wp-content/uploads/discontinued-.png
new file mode 100644
index 0000000..9bd92f3
Binary files /dev/null and b/frontend/public/wp-content/uploads/discontinued-.png differ
diff --git a/frontend/public/wp-content/uploads/egersund2017.jpg b/frontend/public/wp-content/uploads/egersund2017.jpg
new file mode 100644
index 0000000..6497668
Binary files /dev/null and b/frontend/public/wp-content/uploads/egersund2017.jpg differ
diff --git a/frontend/public/wp-content/uploads/evjegkfinside-450x300.jpg b/frontend/public/wp-content/uploads/evjegkfinside-450x300.jpg
new file mode 100644
index 0000000..13ef74d
Binary files /dev/null and b/frontend/public/wp-content/uploads/evjegkfinside-450x300.jpg differ
diff --git a/frontend/public/wp-content/uploads/evjegkfinside-970x647.jpg b/frontend/public/wp-content/uploads/evjegkfinside-970x647.jpg
new file mode 100644
index 0000000..2f1dd70
Binary files /dev/null and b/frontend/public/wp-content/uploads/evjegkfinside-970x647.jpg differ
diff --git a/frontend/public/wp-content/uploads/evjegkfinside.jpg b/frontend/public/wp-content/uploads/evjegkfinside.jpg
new file mode 100644
index 0000000..b3e33d1
Binary files /dev/null and b/frontend/public/wp-content/uploads/evjegkfinside.jpg differ
diff --git a/frontend/public/wp-content/uploads/golfbilde.jpg b/frontend/public/wp-content/uploads/golfbilde.jpg
new file mode 100644
index 0000000..81c6a3f
Binary files /dev/null and b/frontend/public/wp-content/uploads/golfbilde.jpg differ
diff --git a/frontend/public/wp-content/uploads/golfcentertrening.jpg b/frontend/public/wp-content/uploads/golfcentertrening.jpg
new file mode 100644
index 0000000..da6ad17
Binary files /dev/null and b/frontend/public/wp-content/uploads/golfcentertrening.jpg differ
diff --git a/frontend/public/wp-content/uploads/golfgamebook-403x300.jpg b/frontend/public/wp-content/uploads/golfgamebook-403x300.jpg
new file mode 100644
index 0000000..bd9c051
Binary files /dev/null and b/frontend/public/wp-content/uploads/golfgamebook-403x300.jpg differ
diff --git a/frontend/public/wp-content/uploads/golfgamebook-970x722.jpg b/frontend/public/wp-content/uploads/golfgamebook-970x722.jpg
new file mode 100644
index 0000000..abc0b25
Binary files /dev/null and b/frontend/public/wp-content/uploads/golfgamebook-970x722.jpg differ
diff --git a/frontend/public/wp-content/uploads/golfgamebook.jpg b/frontend/public/wp-content/uploads/golfgamebook.jpg
new file mode 100644
index 0000000..d9cfdbd
Binary files /dev/null and b/frontend/public/wp-content/uploads/golfgamebook.jpg differ
diff --git a/frontend/public/wp-content/uploads/holtsmarkgkfinside-450x300.jpg b/frontend/public/wp-content/uploads/holtsmarkgkfinside-450x300.jpg
new file mode 100644
index 0000000..8083ea6
Binary files /dev/null and b/frontend/public/wp-content/uploads/holtsmarkgkfinside-450x300.jpg differ
diff --git a/frontend/public/wp-content/uploads/holtsmarkgkfinside-970x647.jpg b/frontend/public/wp-content/uploads/holtsmarkgkfinside-970x647.jpg
new file mode 100644
index 0000000..47ccf06
Binary files /dev/null and b/frontend/public/wp-content/uploads/holtsmarkgkfinside-970x647.jpg differ
diff --git a/frontend/public/wp-content/uploads/holtsmarkgkfinside.jpg b/frontend/public/wp-content/uploads/holtsmarkgkfinside.jpg
new file mode 100644
index 0000000..f2b7a9a
Binary files /dev/null and b/frontend/public/wp-content/uploads/holtsmarkgkfinside.jpg differ
diff --git a/frontend/public/wp-content/uploads/krokholGK13.jpg b/frontend/public/wp-content/uploads/krokholGK13.jpg
new file mode 100644
index 0000000..7f2cf2e
Binary files /dev/null and b/frontend/public/wp-content/uploads/krokholGK13.jpg differ
diff --git a/frontend/public/wp-content/uploads/kvinnedagen.jpg b/frontend/public/wp-content/uploads/kvinnedagen.jpg
new file mode 100644
index 0000000..4eeab57
Binary files /dev/null and b/frontend/public/wp-content/uploads/kvinnedagen.jpg differ
diff --git a/frontend/public/wp-content/uploads/livescore.jpg b/frontend/public/wp-content/uploads/livescore.jpg
new file mode 100644
index 0000000..31ba155
Binary files /dev/null and b/frontend/public/wp-content/uploads/livescore.jpg differ
diff --git a/frontend/public/wp-content/uploads/lofotenlinksfinside-450x300.jpg b/frontend/public/wp-content/uploads/lofotenlinksfinside-450x300.jpg
new file mode 100644
index 0000000..8fe1569
Binary files /dev/null and b/frontend/public/wp-content/uploads/lofotenlinksfinside-450x300.jpg differ
diff --git a/frontend/public/wp-content/uploads/lofotenlinksfinside-970x646.jpg b/frontend/public/wp-content/uploads/lofotenlinksfinside-970x646.jpg
new file mode 100644
index 0000000..582b6d4
Binary files /dev/null and b/frontend/public/wp-content/uploads/lofotenlinksfinside-970x646.jpg differ
diff --git a/frontend/public/wp-content/uploads/lofotenlinksfinside.jpg b/frontend/public/wp-content/uploads/lofotenlinksfinside.jpg
new file mode 100644
index 0000000..45afcad
Binary files /dev/null and b/frontend/public/wp-content/uploads/lofotenlinksfinside.jpg differ
diff --git a/frontend/public/wp-content/uploads/norske-golfbaner-nord-syd.kmz b/frontend/public/wp-content/uploads/norske-golfbaner-nord-syd.kmz
new file mode 100644
index 0000000..cad7458
Binary files /dev/null and b/frontend/public/wp-content/uploads/norske-golfbaner-nord-syd.kmz differ
diff --git a/frontend/public/wp-content/uploads/norskegolfbanernordsyd.jpg b/frontend/public/wp-content/uploads/norskegolfbanernordsyd.jpg
new file mode 100644
index 0000000..febbb5b
Binary files /dev/null and b/frontend/public/wp-content/uploads/norskegolfbanernordsyd.jpg differ
diff --git a/frontend/public/wp-content/uploads/open-soon.png b/frontend/public/wp-content/uploads/open-soon.png
new file mode 100644
index 0000000..d26a81d
Binary files /dev/null and b/frontend/public/wp-content/uploads/open-soon.png differ
diff --git a/frontend/public/wp-content/uploads/open-winter.png b/frontend/public/wp-content/uploads/open-winter.png
new file mode 100644
index 0000000..93151ae
Binary files /dev/null and b/frontend/public/wp-content/uploads/open-winter.png differ
diff --git a/frontend/public/wp-content/uploads/open.png b/frontend/public/wp-content/uploads/open.png
new file mode 100644
index 0000000..6634316
Binary files /dev/null and b/frontend/public/wp-content/uploads/open.png differ
diff --git a/frontend/public/wp-content/uploads/regelquiz-2.jpg b/frontend/public/wp-content/uploads/regelquiz-2.jpg
new file mode 100644
index 0000000..7ca27fe
Binary files /dev/null and b/frontend/public/wp-content/uploads/regelquiz-2.jpg differ
diff --git a/frontend/public/wp-content/uploads/rjukangkfinside-450x300.jpg b/frontend/public/wp-content/uploads/rjukangkfinside-450x300.jpg
new file mode 100644
index 0000000..f790836
Binary files /dev/null and b/frontend/public/wp-content/uploads/rjukangkfinside-450x300.jpg differ
diff --git a/frontend/public/wp-content/uploads/rjukangkfinside-970x647.jpg b/frontend/public/wp-content/uploads/rjukangkfinside-970x647.jpg
new file mode 100644
index 0000000..02ec08f
Binary files /dev/null and b/frontend/public/wp-content/uploads/rjukangkfinside-970x647.jpg differ
diff --git a/frontend/public/wp-content/uploads/rjukangkfinside.jpg b/frontend/public/wp-content/uploads/rjukangkfinside.jpg
new file mode 100644
index 0000000..2382476
Binary files /dev/null and b/frontend/public/wp-content/uploads/rjukangkfinside.jpg differ
diff --git a/frontend/public/wp-content/uploads/sandaneGK_ettAar.jpg b/frontend/public/wp-content/uploads/sandaneGK_ettAar.jpg
new file mode 100644
index 0000000..b08ce37
Binary files /dev/null and b/frontend/public/wp-content/uploads/sandaneGK_ettAar.jpg differ
diff --git a/frontend/public/wp-content/uploads/scrolf-403x300.jpg b/frontend/public/wp-content/uploads/scrolf-403x300.jpg
new file mode 100644
index 0000000..59ebb11
Binary files /dev/null and b/frontend/public/wp-content/uploads/scrolf-403x300.jpg differ
diff --git a/frontend/public/wp-content/uploads/scrolf-970x722.jpg b/frontend/public/wp-content/uploads/scrolf-970x722.jpg
new file mode 100644
index 0000000..950e17c
Binary files /dev/null and b/frontend/public/wp-content/uploads/scrolf-970x722.jpg differ
diff --git a/frontend/public/wp-content/uploads/scrolf.jpg b/frontend/public/wp-content/uploads/scrolf.jpg
new file mode 100644
index 0000000..b615da7
Binary files /dev/null and b/frontend/public/wp-content/uploads/scrolf.jpg differ
diff --git a/frontend/public/wp-content/uploads/sisteNytt.jpg b/frontend/public/wp-content/uploads/sisteNytt.jpg
new file mode 100644
index 0000000..f7c92a2
Binary files /dev/null and b/frontend/public/wp-content/uploads/sisteNytt.jpg differ
diff --git a/frontend/public/wp-content/uploads/skjeberggkfinside-450x300.jpg b/frontend/public/wp-content/uploads/skjeberggkfinside-450x300.jpg
new file mode 100644
index 0000000..acc318b
Binary files /dev/null and b/frontend/public/wp-content/uploads/skjeberggkfinside-450x300.jpg differ
diff --git a/frontend/public/wp-content/uploads/skjeberggkfinside-970x647.jpg b/frontend/public/wp-content/uploads/skjeberggkfinside-970x647.jpg
new file mode 100644
index 0000000..eb40c3e
Binary files /dev/null and b/frontend/public/wp-content/uploads/skjeberggkfinside-970x647.jpg differ
diff --git a/frontend/public/wp-content/uploads/skjeberggkfinside.jpg b/frontend/public/wp-content/uploads/skjeberggkfinside.jpg
new file mode 100644
index 0000000..3aa2200
Binary files /dev/null and b/frontend/public/wp-content/uploads/skjeberggkfinside.jpg differ
diff --git a/frontend/public/wp-content/uploads/skjermbildeBaneDirekte.jpg b/frontend/public/wp-content/uploads/skjermbildeBaneDirekte.jpg
new file mode 100644
index 0000000..9186700
Binary files /dev/null and b/frontend/public/wp-content/uploads/skjermbildeBaneDirekte.jpg differ
diff --git a/frontend/public/wp-content/uploads/spillelister.jpg b/frontend/public/wp-content/uploads/spillelister.jpg
new file mode 100644
index 0000000..0c251e6
Binary files /dev/null and b/frontend/public/wp-content/uploads/spillelister.jpg differ
diff --git a/frontend/public/wp-content/uploads/teeoff-endringer.jpg b/frontend/public/wp-content/uploads/teeoff-endringer.jpg
new file mode 100644
index 0000000..d8375af
Binary files /dev/null and b/frontend/public/wp-content/uploads/teeoff-endringer.jpg differ
diff --git a/frontend/public/wp-content/uploads/teeoff-kontor.jpg b/frontend/public/wp-content/uploads/teeoff-kontor.jpg
new file mode 100644
index 0000000..1baea5e
Binary files /dev/null and b/frontend/public/wp-content/uploads/teeoff-kontor.jpg differ
diff --git a/frontend/public/wp-content/uploads/trash-3487009_1920-1.jpg b/frontend/public/wp-content/uploads/trash-3487009_1920-1.jpg
new file mode 100644
index 0000000..84504cc
Binary files /dev/null and b/frontend/public/wp-content/uploads/trash-3487009_1920-1.jpg differ
diff --git a/frontend/public/wp-content/uploads/under-development.png b/frontend/public/wp-content/uploads/under-development.png
new file mode 100644
index 0000000..f483edc
Binary files /dev/null and b/frontend/public/wp-content/uploads/under-development.png differ
diff --git a/frontend/public/wp-content/uploads/unknown.png b/frontend/public/wp-content/uploads/unknown.png
new file mode 100644
index 0000000..18297f5
Binary files /dev/null and b/frontend/public/wp-content/uploads/unknown.png differ
diff --git a/frontend/public/wp-content/uploads/vintertrening-min.jpg b/frontend/public/wp-content/uploads/vintertrening-min.jpg
new file mode 100644
index 0000000..56a2938
Binary files /dev/null and b/frontend/public/wp-content/uploads/vintertrening-min.jpg differ
diff --git a/frontend/public/wp-content/uploads/vtg123No.jpg b/frontend/public/wp-content/uploads/vtg123No.jpg
new file mode 100644
index 0000000..31e4bc8
Binary files /dev/null and b/frontend/public/wp-content/uploads/vtg123No.jpg differ
diff --git a/frontend/src/app/FacilitySearch.tsx b/frontend/src/app/FacilitySearch.tsx
index bec11be..466ef69 100755
--- a/frontend/src/app/FacilitySearch.tsx
+++ b/frontend/src/app/FacilitySearch.tsx
@@ -128,6 +128,8 @@ const STATUS_CLASSES: Record = {
ukjent: "bg-[#D9DED5] text-[#112015]",
};
+const MONTH_LABELS = ["jan.", "feb.", "mars", "apr.", "mai", "juni", "juli", "aug.", "sep.", "okt.", "nov.", "des."];
+
const normalizeText = (value: unknown) =>
String(value ?? "")
.replace(/[æøå]/gi, (char) => {
@@ -207,13 +209,24 @@ const getPrimaryStatus = (statuses: Array<{ status?: string }>) => {
const formatUpdatedDate = (value: string | null | undefined) => {
if (!value) return "Ukjent";
- const date = new Date(value);
+ const trimmed = String(value).trim();
+ const isoDateMatch = trimmed.match(/^(\d{4})-(\d{2})-(\d{2})/);
+
+ if (isoDateMatch) {
+ const [, year, month, day] = isoDateMatch;
+ const monthIndex = Number(month) - 1;
+ if (monthIndex >= 0 && monthIndex < MONTH_LABELS.length) {
+ return `${day}. ${MONTH_LABELS[monthIndex]} ${year}`;
+ }
+ }
+
+ const date = new Date(trimmed);
if (Number.isNaN(date.getTime())) return "Ukjent";
- return date.toLocaleDateString("nb-NO", {
- day: "2-digit",
- month: "short",
- year: "numeric",
- });
+
+ const day = String(date.getUTCDate()).padStart(2, "0");
+ const monthLabel = MONTH_LABELS[date.getUTCMonth()];
+ const year = date.getUTCFullYear();
+ return `${day}. ${monthLabel} ${year}`;
};
const getStatusLabel = (status: string) => STATUS_MAP[status] || "Ukjent";
diff --git a/frontend/src/app/HeroSlider.tsx b/frontend/src/app/HeroSlider.tsx
index eb3f125..b3f823a 100755
--- a/frontend/src/app/HeroSlider.tsx
+++ b/frontend/src/app/HeroSlider.tsx
@@ -2,7 +2,7 @@
import Image from "next/image";
import Link from "next/link";
-import { useEffect, useMemo, useState } from "react";
+import { useEffect, useMemo, useRef, useState, type TouchEvent } from "react";
const MANUAL_EXCLUSION_LIST = [
"alsten-golfklubb",
@@ -51,8 +51,27 @@ type Facility = {
course_statuses?: CourseStatus[] | null;
};
-export default function HeroSlider({ facilities }: { facilities: Facility[] }) {
+const hashString = (value: string) => {
+ let hash = 0;
+ for (let index = 0; index < value.length; index += 1) {
+ hash = (hash * 31 + value.charCodeAt(index)) >>> 0;
+ }
+ return hash;
+};
+
+const getSeededRank = (facility: Facility, rotationSeed: string) =>
+ (hashString(`${rotationSeed}:${facility.slug}:${facility.id}`) + facility.id * 97) % 10007;
+
+export default function HeroSlider({
+ facilities,
+ rotationSeed,
+}: {
+ facilities: Facility[];
+ rotationSeed: string;
+}) {
const [currentIndex, setCurrentIndex] = useState(0);
+ const touchStartXRef = useRef(null);
+ const touchStartYRef = useRef(null);
const sliderItems = useMemo(() => {
if (!Array.isArray(facilities) || facilities.length === 0) return [];
@@ -77,15 +96,16 @@ export default function HeroSlider({ facilities }: { facilities: Facility[] }) {
const fallback = validFacilities.filter((facility) => !priority.includes(facility));
- const now = new Date();
- const seed = Number(`${now.getFullYear()}${now.getMonth()}${now.getDate()}${now.getHours()}`);
-
const seededShuffle = (items: Facility[]) =>
- [...items].sort((a, b) => ((a.id * seed) % 101) - ((b.id * seed) % 101));
+ [...items].sort((a, b) => {
+ const rankDiff = getSeededRank(a, rotationSeed) - getSeededRank(b, rotationSeed);
+ if (rankDiff !== 0) return rankDiff;
+ return a.name.localeCompare(b.name, "nb");
+ });
const selected = [...seededShuffle(priority), ...seededShuffle(fallback)].slice(0, 5);
return selected;
- }, [facilities]);
+ }, [facilities, rotationSeed]);
useEffect(() => {
if (sliderItems.length <= 1) return;
@@ -97,8 +117,57 @@ export default function HeroSlider({ facilities }: { facilities: Facility[] }) {
if (sliderItems.length === 0) return null;
+ const goToPrevious = () => {
+ setCurrentIndex((previous) => (previous - 1 + sliderItems.length) % sliderItems.length);
+ };
+
+ const goToNext = () => {
+ setCurrentIndex((previous) => (previous + 1) % sliderItems.length);
+ };
+
+ const handleTouchStart = (event: TouchEvent) => {
+ const touch = event.touches[0];
+ touchStartXRef.current = touch.clientX;
+ touchStartYRef.current = touch.clientY;
+ };
+
+ const resetTouch = () => {
+ touchStartXRef.current = null;
+ touchStartYRef.current = null;
+ };
+
+ const handleTouchEnd = (event: TouchEvent) => {
+ if (touchStartXRef.current === null || touchStartYRef.current === null) {
+ resetTouch();
+ return;
+ }
+
+ const touch = event.changedTouches[0];
+ const deltaX = touch.clientX - touchStartXRef.current;
+ const deltaY = touch.clientY - touchStartYRef.current;
+
+ resetTouch();
+
+ if (Math.abs(deltaX) < 40 || Math.abs(deltaX) <= Math.abs(deltaY)) {
+ return;
+ }
+
+ if (deltaX > 0) {
+ goToPrevious();
+ return;
+ }
+
+ goToNext();
+ };
+
return (
-
+
{sliderItems.map((facility, index) => (
;
+};
+
+export default async function FacilityAliasPage({ params }: FacilityAliasPageProps) {
+ const { alias } = await params;
+ const facilitySlug = await resolveFacilityAlias(alias);
+
+ if (!facilitySlug) {
+ notFound();
+ }
+
+ permanentRedirect(`/golfbaner/${facilitySlug}`);
+}
diff --git a/frontend/src/app/admin/artikler/page.tsx b/frontend/src/app/admin/artikler/page.tsx
index 969113a..cb7c07b 100644
--- a/frontend/src/app/admin/artikler/page.tsx
+++ b/frontend/src/app/admin/artikler/page.tsx
@@ -6,6 +6,15 @@ import { API_URL } from "@/config/constants";
import { adminFetch } from "@/config/adminFetch";
import TiptapHtmlEditor from "@/components/TiptapHtmlEditor";
+type ArticleMediaItem = {
+ id: string;
+ type: "image" | "video";
+ src: string;
+ alt: string;
+ caption: string;
+ poster?: string;
+};
+
type AdminArticle = {
id: number;
section?: "banebesok" | "meninger";
@@ -24,6 +33,8 @@ type AdminArticle = {
alt?: string;
caption?: string;
}>;
+ media_gallery?: ArticleMediaItem[];
+ featured_media_id?: string | null;
content_html?: string | null;
source_url?: string | null;
source_label?: string | null;
@@ -49,7 +60,8 @@ type ArticleFormState = {
facility_slug: string;
author_name: string;
status: "draft" | "published";
- heroImageUrls: string;
+ media_gallery: ArticleMediaItem[];
+ featured_media_id: string;
content_html: string;
source_url: string;
source_label: string;
@@ -74,9 +86,27 @@ function toDatetimeLocal(value?: string | null) {
return local.toISOString().slice(0, 16);
}
-function heroImagesToText(images?: AdminArticle["hero_images"]) {
- if (!Array.isArray(images)) return "";
- return images.map((image) => image.src).filter(Boolean).join("\n");
+function createMediaId(type: "image" | "video", src: string) {
+ const normalized = `${type}:${src.trim()}`;
+ let hash = 0;
+ for (let index = 0; index < normalized.length; index += 1) {
+ hash = (hash * 31 + normalized.charCodeAt(index)) >>> 0;
+ }
+ return `${type}-${hash.toString(16)}`;
+}
+
+function heroImagesToMediaGallery(images?: AdminArticle["hero_images"]) {
+ if (!Array.isArray(images)) return [];
+ return images
+ .filter((image): image is NonNullable
[number] => Boolean(image?.src))
+ .map((image) => ({
+ id: createMediaId("image", image.src),
+ type: "image" as const,
+ src: image.src,
+ alt: image.alt || "",
+ caption: image.caption || image.alt || "",
+ poster: "",
+ }));
}
function createEmptyForm(): ArticleFormState {
@@ -92,7 +122,8 @@ function createEmptyForm(): ArticleFormState {
facility_slug: "",
author_name: "TeeOff",
status: "draft",
- heroImageUrls: "",
+ media_gallery: [],
+ featured_media_id: "",
content_html: "",
source_url: "",
source_label: "",
@@ -101,6 +132,14 @@ function createEmptyForm(): ArticleFormState {
}
function articleToForm(article: AdminArticle): ArticleFormState {
+ const mediaGallery = Array.isArray(article.media_gallery) && article.media_gallery.length > 0
+ ? article.media_gallery
+ : heroImagesToMediaGallery(article.hero_images);
+ const featuredMediaId =
+ article.featured_media_id ||
+ mediaGallery.find((item) => item.type === "image")?.id ||
+ "";
+
return {
section: article.section || "banebesok",
slug: article.slug || "",
@@ -113,7 +152,8 @@ function articleToForm(article: AdminArticle): ArticleFormState {
facility_slug: article.facility_slug || "",
author_name: article.author_name || "TeeOff",
status: article.status || "draft",
- heroImageUrls: heroImagesToText(article.hero_images),
+ media_gallery: mediaGallery,
+ featured_media_id: featuredMediaId,
content_html: article.content_html || "",
source_url: article.source_url || "",
source_label: article.source_label || "",
@@ -121,18 +161,6 @@ function articleToForm(article: AdminArticle): ArticleFormState {
};
}
-function buildHeroImages(heroImageUrls: string, title: string) {
- return heroImageUrls
- .split("\n")
- .map((line) => line.trim())
- .filter(Boolean)
- .map((src) => ({
- src,
- alt: title,
- caption: title,
- }));
-}
-
export default function AdminArticlesPage() {
const [articles, setArticles] = useState([]);
const [facilities, setFacilities] = useState([]);
@@ -145,6 +173,7 @@ export default function AdminArticlesPage() {
const [isUploadingHeroImages, setIsUploadingHeroImages] = useState(false);
const [feedback, setFeedback] = useState("");
const [slugTouched, setSlugTouched] = useState(false);
+ const [newVideoUrl, setNewVideoUrl] = useState("");
const heroImageInputRef = useRef(null);
const loadArticles = async () => {
@@ -184,6 +213,7 @@ export default function AdminArticlesPage() {
setSelectedArticleId(article.id);
setForm(articleToForm(article));
setSlugTouched(true);
+ setNewVideoUrl("");
setFeedback("");
};
@@ -191,6 +221,7 @@ export default function AdminArticlesPage() {
setSelectedArticleId(null);
setForm(createEmptyForm());
setSlugTouched(false);
+ setNewVideoUrl("");
setFeedback("");
};
@@ -198,6 +229,75 @@ export default function AdminArticlesPage() {
setForm((current) => ({ ...current, [field]: value as ArticleFormState[keyof ArticleFormState] }));
};
+ const updateMediaItem = (mediaId: string, patch: Partial) => {
+ setForm((current) => ({
+ ...current,
+ media_gallery: current.media_gallery.map((item) =>
+ item.id === mediaId ? { ...item, ...patch } : item,
+ ),
+ }));
+ };
+
+ const removeMediaItem = (mediaId: string) => {
+ setForm((current) => {
+ const nextMedia = current.media_gallery.filter((item) => item.id !== mediaId);
+ const nextFeatured =
+ current.featured_media_id === mediaId
+ ? nextMedia.find((item) => item.type === "image")?.id || ""
+ : current.featured_media_id;
+
+ return {
+ ...current,
+ media_gallery: nextMedia,
+ featured_media_id: nextFeatured,
+ };
+ });
+ };
+
+ const moveMediaItem = (mediaId: string, direction: -1 | 1) => {
+ setForm((current) => {
+ const currentIndex = current.media_gallery.findIndex((item) => item.id === mediaId);
+ if (currentIndex === -1) return current;
+ const nextIndex = currentIndex + direction;
+ if (nextIndex < 0 || nextIndex >= current.media_gallery.length) return current;
+
+ const reordered = [...current.media_gallery];
+ const [item] = reordered.splice(currentIndex, 1);
+ reordered.splice(nextIndex, 0, item);
+
+ return {
+ ...current,
+ media_gallery: reordered,
+ };
+ });
+ };
+
+ const addVideoMedia = (src: string) => {
+ const trimmedSrc = src.trim();
+ if (!trimmedSrc) return;
+
+ setForm((current) => {
+ if (current.media_gallery.some((item) => item.src === trimmedSrc && item.type === "video")) {
+ return current;
+ }
+
+ return {
+ ...current,
+ media_gallery: [
+ ...current.media_gallery,
+ {
+ id: createMediaId("video", trimmedSrc),
+ type: "video",
+ src: trimmedSrc,
+ alt: current.title || "Video",
+ caption: current.title || "Video",
+ poster: "",
+ },
+ ],
+ };
+ });
+ };
+
const uploadArticleImage = async (file: File) => {
const payload = new FormData();
payload.append("file", file);
@@ -223,20 +323,35 @@ export default function AdminArticlesPage() {
return result.url;
};
- const appendHeroImageUrls = (urls: string[]) => {
+ const appendUploadedImages = (urls: string[]) => {
setForm((current) => {
- const existingUrls = current.heroImageUrls
- .split("\n")
- .map((line) => line.trim())
- .filter(Boolean);
-
- const combined = [...existingUrls, ...urls].filter(
- (url, index, list) => list.indexOf(url) === index,
+ const existingImageUrls = new Set(
+ current.media_gallery
+ .filter((item) => item.type === "image")
+ .map((item) => item.src),
);
+ const appendedMedia = urls
+ .filter((url) => !existingImageUrls.has(url))
+ .map((url) => ({
+ id: createMediaId("image", url),
+ type: "image" as const,
+ src: url,
+ alt: current.title || "Bilde",
+ caption: current.title || "Bilde",
+ poster: "",
+ }));
+
+ const mediaGallery = [...current.media_gallery, ...appendedMedia];
+ const featuredMediaId =
+ current.featured_media_id ||
+ mediaGallery.find((item) => item.type === "image")?.id ||
+ "";
+
return {
...current,
- heroImageUrls: combined.join("\n"),
+ media_gallery: mediaGallery,
+ featured_media_id: featuredMediaId,
};
});
};
@@ -270,9 +385,9 @@ export default function AdminArticlesPage() {
try {
const uploadedUrls = await Promise.all(files.map((file) => uploadArticleImage(file)));
- appendHeroImageUrls(uploadedUrls);
+ appendUploadedImages(uploadedUrls);
setFeedback(
- `Lastet opp ${uploadedUrls.length} hero-bilde${uploadedUrls.length === 1 ? "" : "r"} som AVIF.`,
+ `Lastet opp ${uploadedUrls.length} bilde${uploadedUrls.length === 1 ? "" : "r"} som AVIF.`,
);
} catch (error) {
setFeedback(error instanceof Error ? error.message : "Kunne ikke laste opp hero-bilder.");
@@ -302,7 +417,15 @@ export default function AdminArticlesPage() {
source_url: form.source_url.trim(),
source_label: form.source_label.trim(),
published_at: form.published_at ? new Date(form.published_at).toISOString() : null,
- hero_images: buildHeroImages(form.heroImageUrls, form.title.trim()),
+ media_gallery: form.media_gallery.map((item) => ({
+ id: item.id,
+ type: item.type,
+ src: item.src.trim(),
+ alt: item.alt.trim(),
+ caption: item.caption.trim(),
+ poster: (item.poster || "").trim(),
+ })),
+ featured_media_id: form.featured_media_id || null,
};
const response = await adminFetch(`${API_URL}/admin/articles`, {
@@ -612,26 +735,162 @@ export default function AdminArticlesPage() {
onChange={handleHeroImageUpload}
/>
-
Hero-bilder
-
heroImageInputRef.current?.click()}
- disabled={isUploadingHeroImages}
- className="btn btn-sm btn-secondary disabled:cursor-not-allowed disabled:opacity-50"
- >
- {isUploadingHeroImages ? "Laster opp..." : "Last opp bilder"}
-
+
Galleri og hovedbilde
+
+ heroImageInputRef.current?.click()}
+ disabled={isUploadingHeroImages}
+ className="btn btn-sm btn-secondary disabled:cursor-not-allowed disabled:opacity-50"
+ >
+ {isUploadingHeroImages ? "Laster opp..." : "Last opp bilder"}
+
+ {
+ addVideoMedia(newVideoUrl);
+ setNewVideoUrl("");
+ }}
+ disabled={!newVideoUrl.trim()}
+ className="btn btn-sm btn-secondary disabled:cursor-not-allowed disabled:opacity-50"
+ >
+ Legg til video
+
+
-
@@ -641,8 +900,8 @@ export default function AdminArticlesPage() {
Artikler kan nå laste opp bildefiler direkte. Uploadene prosesseres på serveren,
- konverteres til AVIF og lagres som lokale filer som kan brukes både som hero-bilder
- og inne i brødteksten.
+ konverteres til AVIF og lagres som lokale filer som kan brukes både i galleriet
+ og inne i brødteksten. Videoer kan legges til som lenker med egen caption.
diff --git a/frontend/src/app/banebesok/[slug]/page.tsx b/frontend/src/app/banebesok/[slug]/page.tsx
index df3cd76..d5eab18 100644
--- a/frontend/src/app/banebesok/[slug]/page.tsx
+++ b/frontend/src/app/banebesok/[slug]/page.tsx
@@ -25,7 +25,9 @@ function renderBlock(block: CourseVisitBodyBlock, index: number) {
{block.title}
) : null}
@@ -196,8 +198,26 @@ export default async function CourseVisitPage({ params }: CourseVisitPageProps)
>
-
+
{article.blocks.map((block, index) => renderBlock(block, index))}
+ {article.mediaGallery.length > 1 ? (
+
+
+
+
+ Galleri
+
+
+ Bilder og video
+
+
+
+ {article.mediaGallery.length} elementer
+
+
+
+
+ ) : null}
@@ -241,7 +261,7 @@ export default async function CourseVisitPage({ params }: CourseVisitPageProps)
{article.facilitySlug
? "Bruk artikkelen for inspirasjon, og gå videre til baneprofilen når du trenger praktiske detaljer og oppdatert klubbinfo."
- : "Artikkelen står på egne ben, men du kan fortsatt gå tilbake til oversikten eller åpne originalkilden om den finnes."}
+ : "Artikkelen står på egne ben, men du kan fortsatt gå tilbake til oversikten når du er ferdig."}
{article.facilitySlug ? (
@@ -258,16 +278,6 @@ export default async function CourseVisitPage({ params }: CourseVisitPageProps)
>
Tilbake til banebesøk
- {article.sourceUrl ? (
-
- Original kilde ↗
-
- ) : null}
diff --git a/frontend/src/app/banebesok/page.tsx b/frontend/src/app/banebesok/page.tsx
index cc65049..1bb3953 100644
--- a/frontend/src/app/banebesok/page.tsx
+++ b/frontend/src/app/banebesok/page.tsx
@@ -1,6 +1,5 @@
import Image from "next/image";
import Link from "next/link";
-import InfoPageShell from "@/components/InfoPageShell";
import { getCourseVisits } from "@/content/courseVisits";
import {
createBreadcrumbJsonLd,
@@ -22,7 +21,6 @@ export const dynamic = "force-dynamic";
export default async function CourseVisitsPage() {
const articles = await getCourseVisits();
- const featuredArticle = articles[0];
const collectionJsonLd = createCollectionPageJsonLd({
name: pageTitle,
@@ -46,92 +44,18 @@ export default async function CourseVisitsPage() {
dangerouslySetInnerHTML={{ __html: JSON.stringify(breadcrumbJsonLd) }}
/>
-
- {featuredArticle ? (
-
-
-
-
-
-
-
- {featuredArticle.eyebrow}
-
-
- {featuredArticle.title}
-
-
- {featuredArticle.excerpt}
-
-
- {featuredArticle.locationLabel}
- {featuredArticle.readingTime}
- {featuredArticle.publishedAt}
-
-
-
- Les artikkelen
-
- {featuredArticle.facilitySlug ? (
-
- Baneprofil
-
- ) : null}
-
-
-
-
+
+
+
+
+ Banebesøk
+
+
Banebesøk
+
+
-
-
- Dette er på plass nå
-
-
- Første publiseringsklare struktur
-
-
- {featuredArticle.highlights.map((highlight) => (
-
- ))}
-
-
- Innholdet ligger foreløpig i kode, men modellen er laget for å kunne ta imot
- HTML eller editor-data senere uten at artikkelsidene må designes om.
-
-
-
- ) : null}
-
-
-
-
-
- Artikler
-
-
Banebesøk i system
-
+