Hopp til innhold
Lumi

Tre komponenter, alle på din infrastruktur

Widget, API og dashboard i en helhet — designet for BYOC fra første prinsipp.

Komponenter

Lumi-arkitektur: tre komponenter på din infrastruktur Widget embedded i ditt frontend-domene, API som mottar submissions og leverer analytics, og dashboard som lar teamet ditt utforske data. Submission-flyt går widget → API. Dashboard leser fra API. Widget @lumianalytics/survey (npm) API Kotlin/Ktor + Postgres Dashboard TanStack Start (React) submission read Din infrastruktur
Tre komponenter, alle kjørt på din infrastruktur. Widget embed-es i ditt frontend; API + dashboard leveres som Helm chart.

Widget — @lumianalytics/survey

React-komponent embedded i din nettside via npm. Støtter rating, NPS, fritekst, multi-choice + branching-logikk. Tilgjengelighetsklar (WCAG AA), tema-tilpassbar via CSS custom properties. Kjører i kundens domene — submissions går direkte til ditt API.

API — Kotlin/Ktor

Mottar submissions, validerer mot survey-definition, lagrer i Postgres med PII-redaksjon. Utstyrer dashboardet med analytics-endepunkter. Pluggable autentisering: lokal i dev, OIDC i prod.

Dashboard — TanStack Start (React)

Tilgjengelig administrasjonsgrensesnitt for å designe surveys, hente analytics, administrere team og API-nøkler. Server-rendered med React + Tailwind, kjører i samme cluster som API-et.

Dataflyt og immutable definition-semantikk

Submission-stien er enkel: bruker svarer i widget → widget poster til ditt API → API persistrer i din Postgres med definition-hash. SHA-256-hash av survey-definition (struktur) lagres ved første submission for å holde analytics konsistent på tvers av submissions.

Strukturelle endringer (nye/fjernede felt, endret felttype, endrede valg) krever ny surveyId — analytics binder seg mot definition-hash. Labels kan oppdateres innenfor samme surveyId uten brudd. PII-redaksjon kjøres både ved lagring og ved visning ("dobbel maskering").

Tech-stack

Backend

  • Java 21 + Kotlin/Ktor
  • PostgreSQL + Flyway-migrasjoner
  • Pluggable auth (lokal / OIDC)

Frontend

  • TanStack Start (React) for dashboard
  • shadcn/ui + Tailwind CSS
  • Self-contained widget (npm-pakke)

Distribusjon

  • Helm chart (Bitnami Postgres + Valkey subcharts)
  • Docker images på ghcr.io
  • SHA-pinnede base-images

Klient (widget)

  • React 18+, TypeScript
  • Publisert på npm: @lumianalytics/survey
  • Ingen runtime-dependencies bortsett fra React

Kom i gang

Lumi består av to deler: en backend med dashboard som kjører i ditt Kubernetes-cluster, og en survey-widget du legger til på dine nettsider.

1. Installer backend (Helm)

helm install lumi oci://ghcr.io/asorheim/lumi-analytics/charts/lumi \
  --namespace lumi \
  --create-namespace \
  --values values.yaml

2. Installer widget (npm)

npm install @lumianalytics/survey

For fullstendig konfig (OIDC-oppsett, secrets, Postgres-tilkobling), book en demo eller be om evaluator-tilgang. Deploy-paths utover Helm (Docker compose, manual image-build) er beskrevet i /byoc.

Vil du se hvordan deploy-paths ser ut i praksis?

Helm chart, Docker compose, IdP-oppsett — alt du trenger for å starte en BYOC-pilot.

Se BYOC-detaljene