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
- Embed-eksempler
- WordPress
- Wix
- React
- Infoskjerm
- Attributter
- CSS-variabler
- JS-API
- JSON-referanse
- Teknisk FAQ
Hurtigstart — live på 5 minutter
- Opprett konto på admin.eventfeed.no/signup. Org.nr valideres mot Brønnøysundregistrene. 30 dagers prøveperiode, ingen kort.
- 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.
- 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> - 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
- Legg til → Embed kode → Embed HTML («Custom embeds»).
- Lim inn begge linjene i HTML-boksen.
- 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-maxstyrer 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=8Skjermmodusen 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».
| Attributt | Verdier | Standard | Beskrivelse |
|---|---|---|---|
data-eventfeed | feed-ID (streng) | — (påkrevd) | ID-en til feeden, fra «Embed»-fanen i dashbordet. |
data-layout | list | grid | carousel | list (eller valgt i dashbordet) | Oppsett. Rutenett og karusell krever Standard eller høyere. |
data-locale | nb | en | nb | Språk for datoer og UI-tekster. |
data-max | heltall | alle events i feeden | Maks antall events som vises i denne widgeten. |
data-url | URL | — | Overstyr 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;
}| Variabel | Standard | Styrer |
|---|---|---|
--ef-color-bg | transparent | Bakgrunn |
--ef-color-fg | #0a0c12 | Tekstfarge |
--ef-color-muted | #6b7280 | Sekundærtekst (tid, sted) |
--ef-color-accent | #5469ff | Lenker, datoer, aksenter |
--ef-color-line | #e8eaf1 | Skillelinjer og rammer |
--ef-radius | 10px | Hjørneradius |
--ef-spacing | 12px | Innvendig luft |
--ef-font-family | systemfont | Brødtekst |
--ef-font-heading | = font-family | Titler |
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-LESETOKENURL-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)
| Felt | Type | Beskrivelse |
|---|---|---|
feedId | string | Feed-ID |
name, description | string? | Navn/beskrivelse fra dashbordet |
generatedAt | ISO 8601 | Når filen ble generert |
contentChangedAt | ISO 8601 | Sist innholdet faktisk endret seg |
contentHash | string | Hash av innholdet — perfekt cache-nøkkel |
version | number | Skjemaversjon |
eventsCount | number | Antall events i events |
events | PublicEvent[] | Arrangementene, sortert på starttid |
truncatedFromCount | number? | Satt hvis plan-kvoten kuttet listen |
allowedDomains | string[]? | Domenelås — widgeten viser feilmelding på andre domener |
branding | objekt? | Farger/fonter/layout fra dashbordet |
brandingVisible | boolean? | Om «Drevet av eventfeed» vises |
subscriptionStatus | string? | trialing · active · past_due · expired · cancelled |
Event (PublicEvent) — de viktigste feltene
| Felt | Type | Beskrivelse |
|---|---|---|
id | string | Stabil ID på tvers av kilder (etter dedup) |
title | {nb?, en?} | Tittel per språk |
description | {nb?, en?} | Beskrivelse (descriptionFormat: html eller plain) |
start, end | ISO 8601 | Start/slutt |
venue | objekt | name, address, municipality, region, coordinates {lat,lng} |
categories, tags | string[] | Normaliserte kategorier |
images | [{url, alt?}] | Bilder (første brukes i widgeten) |
prices | [{amount?, currency?, label?}] | Priser |
tickets | {url?, status?} | Billettlenke |
eventSoldOut, eventCancelled | boolean | Status-flagg |
links | {event?, moreInfo?, streaming?} | Lenker |
organizers | [{name?, website?}] | Arrangører |
source | {id?, name?, originalId?} | Hvor eventet kom fra |
repetitions | array | Flere forestillinger av samme event (start/end/venue per gang) |
updatedAt | ISO 8601 | Sist 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-heightpå 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.noconnect-src https://firebasestorage.googleapis.comimg-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-layoutpå 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.