Dokumentasjon

Alt du trenger for å få et levende eventfeed på nettsiden din. Ingen utvikler nødvendig for standardoppsettet — men hele JSON-API-et er åpent for kontoen din hvis du vil bygge selv.

Hurtigstart — live på 5 minutter

  1. Opprett kontoadmin.eventfeed.no/signup. Org.nr valideres mot Brønnøysundregistrene. 30 dagers prøveperiode, ingen kort.
  2. Lag en feed. Velg kilder (hele katalogen er tilgjengelig fra dag én) og filtrer på kommune, kategori, dato eller arrangør. Du kan ha flere feeds på samme konto.
  3. Kopier embed-koden fra «Embed»-fanen i dashbordet:
    <div data-eventfeed="DIN-FEED-ID"></div>
    <script src="https://widget.eventfeed.no/v1/embed.js" async></script>
  4. Lim inn der arrangementene skal vises. Widgeten laster automatisk, arver dine farger (se CSS-variabler) og oppdaterer seg selv — ingen videre vedlikehold.

Tips: <script>-taggen trenger bare å stå én gang per side, uansett hvor mange widgeter du har.

Embed-eksempler

Ren HTML / alle CMS

Fungerer overalt hvor du kan lime inn HTML — Squarespace (Code block), Webflow (Embed element), Framer (Embed component), Joomla, Drupal, statiske sider:

<section class="hva-skjer">
  <h2>Hva skjer i Trondheim</h2>
  <div data-eventfeed="DIN-FEED-ID" data-layout="grid" data-max="12"></div>
  <script src="https://widget.eventfeed.no/v1/embed.js" async></script>
</section>

WordPress

Gutenberg: legg til en «Egendefinert HTML»-blokk og lim inn begge linjene. Forhåndsvisningen i editoren kan være tom — widgeten rendres på den publiserte siden.

Elementor: bruk HTML-widgeten og lim inn det samme.

Klassisk editor: bytt til «Tekst»-visning (ikke «Visuell») før du limer inn, ellers escapes koden.

Du trenger ingen plugin, og koden overlever tema-bytter så lenge blokken består.

Wix

  1. Legg til → Embed kode → Embed HTML («Custom embeds»).
  2. Lim inn begge linjene i HTML-boksen.
  3. Sett høyde på elementet (f.eks. 600 px) — Wix kjører custom HTML i en iframe med fast høyde, så widgeten kan ikke utvide rammen selv. Med data-max styrer du hvor mange events som vises slik at innholdet passer høyden.

React / Next.js

Loaderen overvåker DOM-en (MutationObserver) og monterer automatisk widgeter som dukker opp etter sidelast — SPA-er fungerer uten ekstra kode:

import { useEffect } from 'react';

const SRC = 'https://widget.eventfeed.no/v1/embed.js';

export function EventFeed({ feedId, layout = 'list', max }) {
  useEffect(() => {
    if (!document.querySelector(`script[src="${SRC}"]`)) {
      const s = document.createElement('script');
      s.src = SRC;
      s.async = true;
      document.body.appendChild(s);
    }
  }, []);
  return <div data-eventfeed={feedId} data-layout={layout} data-max={max} />;
}

I Next.js: komponenten må være en client component ('use client'). Ved navigering re-monteres widgeten automatisk når div-en kommer tilbake i DOM-en.

Infoskjerm / skjermmodus

Vil du vise feeden på en infoskjerm (BrightSign, ScreenCloud, Xibo, eller en TV med nettleser)? EventFeed har en egen skjermmodus: kopier den ferdige skjerm-URL-en fra «Embed»-fanen i dashbordet og pek skjermen på den:

https://widget.eventfeed.no/screen/DIN-FEED-ID?token=…&layout=carousel&interval=8

Skjermmodusen kjører i fullskjerm, roterer automatisk mellom arrangementene (interval = sekunder per kort), tilpasser seg portrett og landskap automatisk, og oppdaterer innholdet hvert 15. minutt. Den setter ingen cookies — du trenger ikke samtykkebanner i lobbyen. Fungerer i BrightSign, ScreenCloud, Xibo eller en vanlig nettleser i kioskmodus.

Foretrekker du å bygge skjermsiden selv? En minimal HTML-side med karusell-widgeten fungerer også:

<!doctype html>
<html lang="nb">
<head><meta charset="utf-8"><style>body{margin:0;background:#0a0c12}</style></head>
<body>
  <div data-eventfeed="DIN-FEED-ID" data-layout="carousel" data-max="10"></div>
  <script src="https://widget.eventfeed.no/v1/embed.js" async></script>
</body>
</html>

Attributter

Alle innstillinger settes som data--attributter på div-en. Attributtene overstyrer branding-innstillingene fra dashbordet — en per-side «escape hatch».

AttributtVerdierStandardBeskrivelse
data-eventfeedfeed-ID (streng)(påkrevd)ID-en til feeden, fra «Embed»-fanen i dashbordet.
data-layoutlist | grid | carousellist (eller valgt i dashbordet)Oppsett. Rutenett og karusell krever Standard eller høyere.
data-localenb | ennbSpråk for datoer og UI-tekster.
data-maxheltallalle events i feedenMaks antall events som vises i denne widgeten.
data-urlURLOverstyr JSON-kilden (for testing/proxy). Normalt ikke nødvendig.

data-autofeed støttes som legacy-alias for data-eventfeed, men ikke bruk det i ny kode.

Flere widgeter på samme side? Bare legg flere div-er — hver med sin egen feed-ID og egne attributter. Skriptet lastes én gang.

Tilpasning med CSS-variabler

Widgeten er scopet under .ef-root og styres av CSS-variabler. Sett dem i dashbordet (Branding) eller overstyr direkte i din egen CSS:

.ef-root {
  --ef-color-accent: #b3261e;
  --ef-font-family: "Your Brand Sans", sans-serif;
  --ef-radius: 4px;
}
VariabelStandardStyrer
--ef-color-bgtransparentBakgrunn
--ef-color-fg#0a0c12Tekstfarge
--ef-color-muted#6b7280Sekundærtekst (tid, sted)
--ef-color-accent#5469ffLenker, datoer, aksenter
--ef-color-line#e8eaf1Skillelinjer og rammer
--ef-radius10pxHjørneradius
--ef-spacing12pxInnvendig luft
--ef-font-familysystemfontBrødtekst
--ef-font-heading= font-familyTitler

Widgeten arver ingen stiler fra siden din utover variablene — den ødelegger ikke din CSS, og din CSS ødelegger ikke den.

JavaScript-API

Loaderen eksponerer et lite globalt objekt:

window.eventfeed.version    // f.eks. "1.4.2"
window.eventfeed.mount(el)  // monter widget i et element manuelt
window.eventfeed.mountAll() // skann siden og monter alle [data-eventfeed]

Du trenger normalt ikke dette — automontering dekker både vanlige sider og SPA-er. mountAll() er nyttig hvis du injiserer HTML via mekanismer MutationObserver ikke fanger (f.eks. document.write i eldre CMS).

JSON-referanse

Hver publisert feed er en CORS-aktivert JSON-fil. Bygg din egen visning, app eller integrasjon: kopier JSON-URL-en (med lesetoken) fra «Embed»-fanen i dashbordet. Den ser slik ut:

https://firebasestorage.googleapis.com/v0/b/autofeed-f1741.firebasestorage.app/o/feeds%2Fv1%2F{FEED_ID}%2Fevents.json?alt=media&token=DITT-LESETOKEN

URL-en krever lesetoken — bruk alltid den komplette URL-en fra Embed-fanen. Innholdet regenereres løpende (typisk hvert 5. minutt når noe endres); bruk contentHash/contentChangedAt til egen caching.

Toppnivå (PublicFeedPayload)

FeltTypeBeskrivelse
feedIdstringFeed-ID
name, descriptionstring?Navn/beskrivelse fra dashbordet
generatedAtISO 8601Når filen ble generert
contentChangedAtISO 8601Sist innholdet faktisk endret seg
contentHashstringHash av innholdet — perfekt cache-nøkkel
versionnumberSkjemaversjon
eventsCountnumberAntall events i events
eventsPublicEvent[]Arrangementene, sortert på starttid
truncatedFromCountnumber?Satt hvis plan-kvoten kuttet listen
allowedDomainsstring[]?Domenelås — widgeten viser feilmelding på andre domener
brandingobjekt?Farger/fonter/layout fra dashbordet
brandingVisibleboolean?Om «Drevet av eventfeed» vises
subscriptionStatusstring?trialing · active · past_due · expired · cancelled

Event (PublicEvent) — de viktigste feltene

FeltTypeBeskrivelse
idstringStabil ID på tvers av kilder (etter dedup)
title{nb?, en?}Tittel per språk
description{nb?, en?}Beskrivelse (descriptionFormat: html eller plain)
start, endISO 8601Start/slutt
venueobjektname, address, municipality, region, coordinates {lat,lng}
categories, tagsstring[]Normaliserte kategorier
images[{url, alt?}]Bilder (første brukes i widgeten)
prices[{amount?, currency?, label?}]Priser
tickets{url?, status?}Billettlenke
eventSoldOut, eventCancelledbooleanStatus-flagg
links{event?, moreInfo?, streaming?}Lenker
organizers[{name?, website?}]Arrangører
source{id?, name?, originalId?}Hvor eventet kom fra
repetitionsarrayFlere forestillinger av samme event (start/end/venue per gang)
updatedAtISO 8601Sist oppdatert

Eksempel (forkortet):

{
  "feedId": "abc123",
  "eventsCount": 42,
  "contentChangedAt": "2026-06-11T06:10:00Z",
  "events": [{
    "id": "ev_9f2",
    "title": { "nb": "Trondheim Symfoniorkester — Mahler 5" },
    "start": "2026-06-18T19:30:00+02:00",
    "venue": { "name": "Olavshallen", "municipality": "Trondheim" },
    "categories": ["Konsert", "Klassisk"],
    "images": [{ "url": "https://…/mahler.jpg" }],
    "tickets": { "url": "https://www.ticketmaster.no/…" }
  }]
}

Teknisk FAQ

Påvirker widgeten sidehastigheten?

Bundle-en er ~35 KB (Preact, én fil, async). Ingen jQuery, ingen tredjeparts-sporing, ingen layout-shift når container-bredden er definert. Sett gjerne en min-height på div-en hvis du vil reservere plass før lasting.

Setter widgeten cookies?

Nei. Ingen cookies, ingen localStorage, ingen sporing av sluttbrukere. JSON-en hentes med credentials: 'omit'. Du trenger ikke samtykkebanner for widgeten.

Content-Security-Policy — hva må jeg tillate?
  • script-src https://widget.eventfeed.no
  • connect-src https://firebasestorage.googleapis.com
  • img-src https: (eventbilder ligger hos kildene/vår CDN)
  • style-src 'unsafe-inline' (widgeten injiserer én <style>-tag)
Hvorfor står det «ikke autorisert for dette domenet»?

Feeden er domenelåst. Legg til domenet under feed-innstillinger i dashbordet (antall domener avhenger av plan). Localhost er alltid tillatt under utvikling.

Hva skjer hvis abonnementet utløper?

Widgeten viser inntil 5 events med «Drevet av eventfeed» — siden din blir aldri tom. Full visning gjenopptas straks abonnementet er aktivt igjen.

Kan jeg ha ulike layouts på ulike sider med samme feed?

Ja — data-layout på div-en overstyrer dashbord-valget per side.

Fungerer det i SharePoint/intranett?

Ja, alle flater som tillater custom HTML/script (SharePoint Script Editor / moderne Embed-webdel med tillatt domene). Alternativt: hent JSON-en (med lesetoken fra Embed-fanen) og render selv.

Noe som ikke virker?

Skriv til hei@eventfeed.no — du snakker med utvikleren, ikke et kundesenter.