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,031

Tests passing

13

Packages

71

Commits

19 Feb 2026

Last updated

Changelog

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

Week of 17 Feb 2026
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.