Building in Public

Every feature. Every fix.

We're replacing a 20-year monopoly in UK flood hydrology software. Follow every decision, every line of code, as we build the platform practitioners actually deserve.

1,218

Tests passing

13

Packages

260

Commits

25 Feb 2026

Last updated

Changelog

What we shipped, fixed, and improved — week by week.

Week of 24 Feb 2026
Feature

Expanded QMED pathway coverage with FDC-statistics estimation

Added an additional QMED estimation route from flow-duration statistics for short-record and data-transfer workflows.

  • New QMED path supports Q5DMF, Q10DMF, DPSBAR, and gauged-flow BFI inputs
  • Method selection and reporting now include this route where complete inputs are provided
  • Input validation and fallback behavior hardened for partial or invalid inputs
25 Feb
Fix

Issue #243 parity refinements for SM2025 studies (for testing)

Improved candidate shortlisting consistency for modern descriptor runs to reduce divergence during external cross-checking. This item is currently marked for testing.

  • Shortlisting now prioritises the SM2025 similarity metric when available
  • Fallback behavior remains in place where modern descriptors are incomplete
  • Regression tests added for shortlist ordering and branch selection behavior
  • Issue #243 remains open until tester parity validation completes
25 Feb
Infrastructure

Railway hydro-faucet production alignment

Aligned hydro-faucet connectivity across preview and production with explicit environment checks and deployment runbooks.

  • Standardised HYDRO_FAUCET_URL handling for Vercel + Railway deployments
  • Added operator checklist for smoke verification and rollback readiness
  • Preview and production checks now include protected hydro endpoints
25 Feb
Fix

Auth continuity hardening for magic-link sessions

Fixed redirect loops after login by tightening host canonicalisation, server-side magic-link verification, and cookie domain handling.

  • Protected pages now preserve session continuity across dashboard, projects, and map-data
  • Authenticated users are redirected away from /login correctly
  • Added regression coverage for auth guards and protected route behavior
24 Feb
Feature

Entitlements and quota enforcement across compute routes

All compute and report entry points now enforce account entitlements with free-tier limits and server-side unlimited whitelisting.

  • Default account quota: 5 assessments
  • Unlimited usage for approved organisation/domain accounts
  • Blocked over-quota attempts are logged for audit and support
24 Feb
Improvement

Bulk upload moved to a dedicated dashboard workflow

Bulk import is now a first-class dashboard flow with clearer controls for naming, project placement, and import intent.

  • Bulk upload is no longer hidden inside the generic assessment flow
  • Improved UX for large batch descriptor and boundary ingestion
24 Feb
Infrastructure

Provenance capture and admin governance actions for imported data

Added data lineage tracking for bulk imports and internal governance tools to review, reconcile, and clean imported records.

  • Provenance metadata tracks archive and file lineage
  • Admin cleanup paths added for legacy or unlinked import records
  • Comparative export workflows expanded for multi-branch analysis outputs
24 Feb
Feature

Project intelligence: boundary map and catchment search

Project detail pages now include boundary-aware map views and search utilities so large project libraries are easier to navigate.

  • Catchment and place search improves project-level discoverability
  • Boundary rendering and map fit behavior hardened for mixed datasets
24 Feb
Improvement

Hydro service resilience and scheduled health monitoring

Improved degraded-mode handling when hydro services are unavailable and added automated monitoring/sync checks.

  • UI now surfaces hydro availability status rather than failing silently
  • Scheduled smoke monitoring and sync checks documented for operations
24 Feb
Week of 17 Feb 2026
Feature

Project workspaces with invite-based collaboration

Introduced project ownership, invite-based sharing, and per-user workspace isolation to keep active jobs separated by account.

  • Invite acceptance is tied to registered email identity
  • Cross-user project access now requires explicit project grant
  • Dashboard navigation is now project-first for faster team workflows
23 Feb
Feature

Bulk descriptor and boundary ingestion at production scale

Expanded import support for ZIP/XML/CSV/CD3 descriptors and multi-file shapefile boundaries with safer parsing and reprojection.

  • Batch ZIP ingestion handles mixed archives and links boundaries to analyses
  • Improved validation and error feedback for failed or partial uploads
  • Boundary layers persist and reload with saved analysis records
23 Feb
Feature

Map-data viewer and hex-grid integration

Unified station mapping with a hydro-faucet-backed hex grid layer and dedicated map-data explorer for fast catchment interrogation.

  • Hex layers can be toggled and queried by map viewport
  • Map stability improved for worker loading, bounds handling, and layer order
23 Feb
Improvement

Project management upgrade across dashboard and analysis

Added project detail pages, move/duplicate flows, report links, and stronger naming metadata for large analysis portfolios.

  • Project assignment and analysis naming are now explicit throughout the flow
  • Direct report links available from dashboard and analysis views
  • Project cards and map detail panels improved for faster triage
23 Feb
Infrastructure

Billing foundation scaffold for paid plans

Added the initial Stripe checkout, subscription webhook wiring, and dashboard billing panel to support paid rollout.

23 Feb
Feature

Decision journey canvas and parallel branch workflows

Shipped staged, confirmable analysis steps with side-by-side forked branches and a clearer audit trail for route comparison.

  • Fork-on-edit preserves baseline branches for transparent comparisons
  • Sticky navigation and contextual headers improve long-session usability
  • Decision Journey section added to exported report pages
20 Feb
Fix

Cloud runtime and build reliability hardening

Stabilised deployment/runtime behavior to reduce production regressions on hosted environments.

  • Moved ephemeral caches to /tmp for read-only hosting environments
  • Patched feedback widget behavior when integration tokens are unavailable
  • Resolved post-merge type/build regressions in analysis UI
20 Feb
Feature

FEH report proforma completion — all 11 standard sections

Added the 4 missing FEH technical note sections: Summary & Conclusions, Method Selection rationale, pooling diagnostics (D_i, H, Z tables), and descriptor attribution. Plus ReFH2 initial conditions table, recommended branch marking, and OS grid reference in header.

  • PDF quality: page breaks, A4-safe chart widths, page footer with station name
  • Markdown download endpoint for non-PDF workflows
  • PDF route now uses saved analysis cache — no 10-15s re-run on download
  • Configurable author name via query parameter
19 Feb
Improvement

SSE progressive panel reveal — QMED in ~3s, not 15s

Analysis panels now appear progressively as data arrives via Server-Sent Events. The QMED panel renders within ~3 seconds instead of waiting for the full 10-15 second pipeline to complete.

  • Each panel appears as its *:ready event fires (qmed:ready, pooling:ready, etc.)
  • Donor candidate fetch shows live n/total progress counter
  • Step-key sync test prevents frontend/pipeline naming drift
19 Feb
Feature

Interactive QMED & growth curve selection with instant recompute

Click any QMED method or growth curve row to select it — design flows recompute instantly in the browser with zero server round-trip. Branch capture lets you snapshot the current state for comparison.

  • Fixed pooling "Rerun with modified group" losing all client-side state
  • Pooling exclusions now flow through SSE overrides instead of router.push()
  • Active overrides summary callout shows what was changed
19 Feb
Improvement

Decision tree intelligence — Z-stats, heterogeneity, AI suggestions

The decision tree sidebar now surfaces computed analysis intelligence: goodness-of-fit Z-stat badges, heterogeneity H colour-coded, discordant station counts, trend/outlier warnings, Q100 inline, and ReFH2 vs statistical comparison.

  • Z-stat badges: green (OK) / amber (FAIL) on each growth curve node
  • Heterogeneity H: green (<1) / amber (1-2) / red (>2) on pooling node
  • Two new AI suggestion rules: ReFH2 vs stat Q100 >30% discrepancy, short AMAX record
  • Warning and suggestion count badges in tree toolbar
19 Feb
Feature

Station detail page (/stations/[stationId])

Dedicated shareable station detail route with mini MapLibre map, AMAX summary statistics (mean, max, min, CV), and rule-based data quality warnings.

  • Quality warnings: short record, high rejection rate, urban, lakes, missing 2025 descriptors
  • "Run Analysis" button links directly to /analyse/[stationId]
  • "Full Details" link added to map slide-up panel
19 Feb
Fix

Equation comparison donor bug fix

Fixed the SM2025 donor-adjusted column showing the wrong number. Was applying SM2008 adjustment factor to both columns — now correctly uses the distinct SM2025 donor adjustment value.

  • Panel moved from bottom of page to immediately after QMED section
  • Donor methodology comparison explains SM2008 direct ratio vs SM2025 de-urbanise/re-urbanise
  • Shows "2025 descriptors unavailable" notice when appropriate
19 Feb
Infrastructure

Turbopack module resolution fix

Stripped .js extensions from all 148 internal imports across the monorepo. Turbopack doesn't perform the .js to .ts rewrite that tsc does — extensionless imports work for both.

19 Feb
Week of 10 Feb 2026
Improvement

Frontend polish — responsive layout, scroll sync, error handling

Mobile-responsive sidebar with hamburger drawer, decision tree scroll-to-panel on branch selection, map loading skeleton, error boundary on StationMap, and beforeunload warning for unsaved analysis state.

  • AEP toggle persisted in Zustand (survives panel switches)
  • Team pricing CTA now links to contact email
13 Feb
Fix

ReFH2 coefficient alignment with UKFE R

Cross-referenced every ReFH2 parameter against the UKFE R package (CRAN, Anthony Hammond). Found and fixed two discrepancies: Tp regression exponent (-0.25 → -0.28) and alpha parameter now uses season-specific power-law formulas.

  • Tp: 10-16% systematic bias corrected for steep catchments
  • Alpha: winter 1.166×T^-0.073, summer 1.444×T^-0.182 (was log-linear)
  • BL/BR intercept rounding aligned (25.47→25.5, 3.751→3.75)
13 Feb
Feature

SQLite-backed saved analyses

Replaced localStorage with SQLite for persisting saved analyses. No more 5 MB browser limit — save unlimited catchment analyses locally with instant retrieval.

12 Feb
Fix

SM2025 pooling and donor corrections

Pooling group formation now uses SM2025 similarity distance metric when 2025 descriptors are available. 800-year pooling target matches SM2025 specification. Donor selection prioritised by geographic distance.

  • Donor candidate shortlist increased from 20 to 100
  • SM2025 SDM includes BFIHOST as 5th component
12 Feb
Infrastructure

GitHub Actions CI pipeline

Automated testing on every push — 1,019 tests run across all packages in dependency order. TypeScript type-checking included.

11 Feb
Week of 3 Feb 2026
Feature

ReFH2 summer/winter seasonality

Implemented seasonal initial conditions for the ReFH2 rainfall-runoff model. Winter and summer now produce different Cini (initial soil moisture) and BF0 (baseflow) values, matching UKFE R reference equations.

  • Seasonal Cini equations from UKFE R (distinct winter/summer formulas)
  • Seasonal BF0 with floor clamping for small summer catchments
  • Configurable coefficient architecture — drop-in swap when WHS coefficients confirmed
8 Feb
Feature

Pooling station exclusion with justification

Practitioners can now exclude stations from the pooling group with a mandatory justification note. Exclusions flow through to growth curve recomputation and are recorded in the audit trail.

7 Feb
Fix

Batch fixes — AMAX rejection, station colours, UI polish

Resolved 7 issues in one pass: AMAX values can be rejected/restored, station markers colour-coded by data quality, tree node deduplication, BNG reprojection fix for ungauged catchments, and donor suitability filtering improvements.

  • AMAX rejection updates L-moments and QMED in real-time
  • Ungauged catchments now fall back to descriptor-only QMED
6 Feb
Feature

SM2025 donor adjustment + ungauged pooling

Full SM2025 donor transfer process: de-urbanise donor QMED, compute ratios, re-urbanise final result. URBEXT2015 urban expansion factor. Ungauged catchments can now form pooling groups from descriptor similarity alone.

5 Feb
Week of 27 Jan 2026
Fix

BFIHOST19scaled descriptor fix

SM2025 equations require BFIHOST19scaled (not BFIHOST19). Traced the bug end-to-end from NRFA API through client types to the equation inputs. Also fixed AREA to use DTM-derived ihdtm-catchment-area.

  • NRFA provides 3 BFIHOST variants — only bfihost19-scaled is correct for SM2025
  • NRFA provides 2 AREA fields — DTM-derived is what FEH equations are calibrated against
31 Jan
Fix

Median normalisation fix for growth curves

GLO/GEV/GPA scale parameters were mean-normalised (λ₁=1) but FEH growth curves normalise to QMED (median=1). Fixed to match UKFE R median-normalised formulas. ~1-2% growth factor error corrected.

30 Jan
Feature

UKFE R cross-verification suite

Created 23 cross-verification tests comparing our implementations against the UKFE R package (v2.0.0). Verified: QMED (2008+2025), L-moments, GLO, GEV, GPA, Kappa3, non-flood adjustment, SDM, and urban adjustment factor.

  • Found and fixed Kappa3 sign bug in gamma function arguments
  • GEV shape: our Hosking rational approximation is more accurate than UKFE's 2-term polynomial
  • All verified equations match within floating-point precision
29 Jan
Week of 20 Jan 2026
Feature

Non-flood years L-moment adjustment

Implemented the FEH Volume 3 §19 adjustment for stations with recorded non-flood years. L-moment ratios are corrected to account for years where flow was below the perception threshold.

24 Jan
Feature

SCS/NRCS Curve Number + Rational Method packages

Two new calculation packages: @hydrometric/scs (SCS curve number runoff model with unit hydrograph) and @hydrometric/rational (Rational method for small catchments). Plus FSR reservoir routing research.

23 Jan
Feature

4-parameter Kappa distribution

Added the Kappa distribution (4 parameters) to the growth curve fitting engine. Includes the generalised logistic, GEV, and GPA as special cases. FEH reference library documentation added.

22 Jan
Improvement

Comprehensive product review

Full assessment of the platform against the original vision. Identified critical UX gaps, prioritised the roadmap, and documented the gap between calculation engine maturity and frontend polish.

21 Jan
Week of 13 Jan 2026
Feature

PE3/Kappa distributions, ReFH2 overrides, AMAX editor

Sprint 4 delivery: Pearson Type III and Kappa distributions for growth curves, manual parameter overrides for ReFH2, AEP toggle on design flow table, and inline AMAX series editing with real-time recomputation.

17 Jan
Feature

2025 catchment descriptors + ungauged overrides

Full SM2025 descriptor support: SAAR9120, FARL2015, BFIHOST19scaled, FPEXT. Ungauged catchment workflow with manual descriptor overrides. Observed data label distinguishes gauged vs estimated.

16 Jan
Fix

Pipeline overrides carry through to rerun

Fixed a bug where user overrides (descriptor tweaks, QMED manual entry) were lost when rerunning the analysis pipeline. Overrides now persist through SSE stream and populate on reload.

15 Jan
Coming Next

On the Roadmap

What we're building next. Priorities shaped by practitioner feedback.

FEH DDF Rainfall Model

Full Depth-Duration-Frequency estimation from catchment descriptors. Replaces the empirical placeholder currently used by ReFH2.

Team Collaboration

Shared projects, multi-user workspaces, and team admin. Built for consultancies running dozens of FRAs simultaneously.

LiDAR Catchment Delineation

Auto-generate catchment boundaries from Environment Agency LiDAR DTM. No more manual tracing in FEH Web Service.

Want to shape what we build next?

We're in early access. Your feedback drives our roadmap. Join the community and help us build the future of UK flood hydrology.