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
What we shipped, fixed, and improved — week by week.
Added an additional QMED estimation route from flow-duration statistics for short-record and data-transfer workflows.
Improved candidate shortlisting consistency for modern descriptor runs to reduce divergence during external cross-checking. This item is currently marked for testing.
Aligned hydro-faucet connectivity across preview and production with explicit environment checks and deployment runbooks.
Fixed redirect loops after login by tightening host canonicalisation, server-side magic-link verification, and cookie domain handling.
All compute and report entry points now enforce account entitlements with free-tier limits and server-side unlimited whitelisting.
Bulk import is now a first-class dashboard flow with clearer controls for naming, project placement, and import intent.
Added data lineage tracking for bulk imports and internal governance tools to review, reconcile, and clean imported records.
Project detail pages now include boundary-aware map views and search utilities so large project libraries are easier to navigate.
Improved degraded-mode handling when hydro services are unavailable and added automated monitoring/sync checks.
Introduced project ownership, invite-based sharing, and per-user workspace isolation to keep active jobs separated by account.
Expanded import support for ZIP/XML/CSV/CD3 descriptors and multi-file shapefile boundaries with safer parsing and reprojection.
Unified station mapping with a hydro-faucet-backed hex grid layer and dedicated map-data explorer for fast catchment interrogation.
Added project detail pages, move/duplicate flows, report links, and stronger naming metadata for large analysis portfolios.
Added the initial Stripe checkout, subscription webhook wiring, and dashboard billing panel to support paid rollout.
Shipped staged, confirmable analysis steps with side-by-side forked branches and a clearer audit trail for route comparison.
Stabilised deployment/runtime behavior to reduce production regressions on hosted environments.
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.
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.
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.
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.
Dedicated shareable station detail route with mini MapLibre map, AMAX summary statistics (mean, max, min, CV), and rule-based data quality warnings.
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.
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.
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.
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.
Replaced localStorage with SQLite for persisting saved analyses. No more 5 MB browser limit — save unlimited catchment analyses locally with instant retrieval.
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.
Automated testing on every push — 1,019 tests run across all packages in dependency order. TypeScript type-checking included.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Full SM2025 descriptor support: SAAR9120, FARL2015, BFIHOST19scaled, FPEXT. Ungauged catchment workflow with manual descriptor overrides. Observed data label distinguishes gauged vs estimated.
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.
What we're building next. Priorities shaped by practitioner feedback.
Full Depth-Duration-Frequency estimation from catchment descriptors. Replaces the empirical placeholder currently used by ReFH2.
Shared projects, multi-user workspaces, and team admin. Built for consultancies running dozens of FRAs simultaneously.
Auto-generate catchment boundaries from Environment Agency LiDAR DTM. No more manual tracing in FEH Web Service.
We're in early access. Your feedback drives our roadmap. Join the community and help us build the future of UK flood hydrology.