HERON (GEK TERNA Group)

Vendor Management Portal

Summary

An internal portal for managing external delivery vendors: filterable delivery tracking, multi-tab analytics, structured team feedback, admin-configurable scoring, and timesheet reconciliation against tracked effort. Deployed on Azure Static Web Apps.

Architecture

A user signs in through Microsoft Entra ID into a static web app whose delivery tracking grid feeds analytics tabs and a browser generated workbook, while timesheet uploads and every other request go to a backend API that serves all upstream data from a cached mirror of the issue tracker, scores and reconciles it against uploaded effort, builds server side reports and persists configuration and uploads to a document store.
Vendor delivery portal where all upstream data is proxied and cached server side before scoring.
  • The workbook library is pulled in by a dynamic import at the moment an export is requested rather than by a static import, so a heavy document dependency stays out of the initial bundle for the large majority of sessions that never export.
  • Grid exports emit a workbook rather than comma separated values because the exported data mixes two scripts and contains range labels that a spreadsheet would silently coerce into dates. The reason is recorded next to the implementation.
  • Multi value filters are encoded as repeated query parameters instead of a single joined value, so a filter value that itself contains a separator character survives the round trip intact.
  • This is the only surface here that runs a client side query cache, configured with a five minute freshness window and a single retry, so switching between the analytics tabs reuses already fetched results instead of refetching a computed aggregate on every tab change.

Highlights

  • Build-time Content-Security-Policy generation, with an invalid policy failing the build instead of shipping.
  • Design-system invariants enforced mechanically: a custom lint gate, wired into pre-commit and pre-push, rejects hardcoded typography literals.
  • Third-party rich text sanitized at the render boundary with DOMPurify.
  • Responsive behavior treated as a regression surface via Playwright e2e specs covering mobile navigation and layout.
  • Upstream issue data is held in a TTL bounded in memory cache guarded by an async lock, so concurrent requests arriving during a refresh collapse into a single upstream call instead of a stampede.
  • The composite vendor score is a weighted average over a declared metric catalog, so adding a weightable metric is a single point change and weights stay administrator configurable at runtime.
  • Cache warm up runs as a cancellable background task in the application lifespan, so a slow or unavailable upstream at boot cannot block startup.

Technologies

  • Python
  • FastAPI
  • Azure Functions
  • Azure Cosmos DB
  • openpyxl
  • python-pptx
  • React 19
  • TypeScript
  • Azure Static Web Apps
  • MSAL
  • Playwright