Tre komponenter, alle på din infrastruktur
Widget, API og dashboard i en helhet — designet for BYOC fra første prinsipp.
Komponenter
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