Appearance
May 15, 2026 — Frontend
Release date: Friday, 2026-05-15
Summary
BMS gained a full Forsikring (building insurance) experience—replacing the old risk-profile tab—with underwriting flows, tariff-aware coverage display, and tighter alignment to backend insurance profiles. Property overview was rebuilt into focused cards with insurance and risk rollups across buildings. Account security improved through session and device self-service, safer destructive confirmations, and login deep-link redirects after authentication.
Shipped
- Building Forsikring tab: insurance profiles by year, coverage tables (including naturskadefond premium/rate), building-type and price-line catalog integration, and calculated building value display.
- Property overview modular layout with attention strip, inspection/ownership/location cards, and insurance/risk summaries plus optional building-level value and EML columns.
- Building Nøkkeltall sidebar fields for calculated building value and EML % from active insurance profiles (GET-only).
- Profile hub refactor: dedicated info, devices, permissions, and sessions routes with improved navigation on small screens.
- Auth: session restoration on app load,
?redirect=support on login, and shared confirm modals for destructive admin actions. - Building overview status: §13 fire-object and public-order flags; inline boolean fields on the status form.
- Contracts & icons: repeated OpenAPI sync/regeneration for insurance APIs; explicit SVG dimensions on shared icons for Safari.
Engineering (commit recap)
Frontend — week of May 11 – May 17, 2026
Window: --after="2026-05-08" --before="2026-05-16" (--no-merges).
Summary
Most engineering effort went into insurance: a new building tab replaced the legacy risk-profile form, with large UI work on profiles, price lines, building types, and display utilities backed by several contract syncs. Property and building surfaces now surface insurance-derived metrics without POST preview calls for read-only rollups. In parallel, profile and auth flows matured—hub routing, session/device APIs, restoration on startup, and login redirect handling—while smaller building-overview and icon fixes landed.
Themes
- Building insurance (Forsikring): New
BuildingInsuranceTabreplaces risk-profile tab; underwriting and tariff-based quantity display; building value banners and price-line mismatch warnings; naturskadefond columns; price-table queries keyed bybuildingTypeId. - Property overview: Split
PropertyOverviewPageinto card sections;buildingListViewModeland overview utils;PropertyInsuranceCard/PropertyRiskCard; GET-based profile aggregation for rollups and building table columns. - Building sidebar metrics:
BuildingPageloads insurance profile fields (building value, EML %) for Nøkkeltall using year resolution aligned with the Forsikring tab (session storage, active year, catalog). - Profile & sessions: Profile hub layout and routes; permissions helpers; devices vs sessions lists; revoke-all and confirm-modal pattern for admin users.
- Authentication: Session restore and loading gate in
AuthContext;loginRedirectutilities for post-login and guard redirects; API client hooks on 401. - Building overview status: §13 and public-order flags on overview;
FieldDisplayand inline booleans on status form. - OpenAPI & inspection diff: Multiple backend contract pins and generated BMS types; insurance profile paths mapped for inspection draft diff.
- Shared UI & icons: Safari-safe explicit dimensions on
@sod/iconsSVG components.
Notable fixes or risks (if any)
- Insurance year selection: Sidebar and property rollups depend on resolving the same profile year as the Forsikring tab (session storage vs active vs newest catalog year); verify behavior when no ACTIVE year exists.
- Property insurance load: Overview uses parallel GETs per building profile; large properties increase client request volume—watch performance and error handling (
Promise.allSettled). - Contract churn: Several insurance-related OpenAPI syncs in one week; run typecheck and smoke-test Forsikring and property overview after pulling.