Skip to content

July 24, 2026 — Frontend

Release date: Friday, 2026-07-24

Summary

This week replaces the localStorage tender demo with a full API-backed captive tender preparation experience in BMS: create and manage tenders, pick portfolio buildings, edit working copies, write a one-pager summary, attach documents (including download), track activity, run the approve/publish lifecycle, and maintain the preapproved reinsurers directory—gated by tender.* permissions and the existing tender feature flag.

Shipped

  • Tenders list & create/tenders and /tenders/new with insurance year, permissions, and nav entry.
  • Tender workspace — detail tabs: overview (workflow + metadata), buildings, summary, documents, activity.
  • Buildings — add from portfolio on /tenders/:id/buildings/select; list columns aligned with the buildings table (minus inspector); row editor for working-copy data; frozen snapshots after approve.
  • Summary — editable one-pager fields plus live portfolio key figures stored in summaryJson.
  • Documents — upload/delete by kind; Last ned via tender document download API.
  • Lifecycle — submit / approve / reject / publish / close / export / delete draft, status-driven actions.
  • Reinsurers/reinsurers directory admin for preapproved markets.
  • Agent guardrail — always-on frontend-only Cursor rule: UI agents must not edit sibling backend repos.

Engineering (commit recap)

Frontend — week of July 18 – July 24, 2026

Window: after 2026-07-17, before 2026-07-25 (--no-merges).

Summary

One large BMS delivery lands captive tender UI on top of a regenerated OpenAPI contract: tendersApi / reinsurersApi, permission keys, workflow helpers, and screens under views/tender/, while removing the demo draft storage. Table toolbar skips empty chrome; tender tables use compact size="sm" wiring consistent with the buildings list.

Themes

  • Contract & APIs: OpenAPI sync; tendersApi (CRUD, buildings, summary, documents + download blob, snapshots, export, activity, lifecycle) and reinsurersApi with Vitest coverage.
  • Permissions & routing: tender.view|edit|manage|approve|publish; feature-flag + RequirePermission routes; old /tender* paths redirect to /tenders.
  • Buildings picker & list: Full-page multi-select; shared list columns (ID, name, manager, address, inspection date/status); remove-from-tender without bloating row height.
  • Documents & summary: Flat document list with download; summary key figures from working copies / snapshots.
  • Platform hygiene: frontend-only.mdc + AGENTS.md note; empty TableToolbar no longer renders a padded strip.

Notable fixes or risks (if any)

  • Download depends on GET /tenders/:id/documents/:documentId/download being deployed with the API the app points at.
  • Tender seed data may show (m) for forvalter / inspection on working copies when those fields are not in the tender package—portfolio select has richer inspection fields.
  • Demo removal: localStorage tender draft modules are gone; anything still linked only to the old demo will break until migrated to /tenders.