1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1"> 6 <title>Contact - HydroForecast by Upstream Tech</title> 7 <meta name="description" content="Get in touch with the HydroForecast team."> 8 9 10 11 <link rel="preconnect" href="https://fonts.googleapis.com"> 12 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 13 <link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet"> 14 <link rel="icon" type="image/x-icon" href="/images/favicon/favicon.ico?v=d930dfd2"> 15 <link rel="icon" type="image/svg+xml" href="/images/favicon/favicon.svg?v=b7e0d42b"> 16 <link rel="icon" type="image/png" sizes="96x96" href="/images/favicon/favicon-96x96.png?v=a203b36e"> 17 <link rel="apple-touch-icon" sizes="180x180" href="/images/favicon/apple-touch-icon.png?v=ffb72c49"> 18 <link rel="manifest" href="/images/favicon/site.webmanifest"> 19 <link rel="stylesheet" href="/css/style.32e4843e.css"> 20
20<script src="https://fast.wistia.com/player.js" async></script>
20 21 22 23<!-- Google Analytics 4 -->
vendor: 108 bytes, lines 23-24
23 24<script type="text/plain" data-category="analytics" async src="https://www.googletagmanager.com/gtag/js?id=
24G-68YYYT3EBN
vendor: 12 bytes, line 24
24"></script>
25<script type="text/plain" data-category="analytics"> 26
vendor: 133 bytes, lines 26-29
26window.dataLayer = window.dataLayer || []; 27 function gtag(){dataLayer.push(arguments);} 28 gtag('js', new Date()); 29 gtag('config', '
29G-68YYYT3EBN
vendor: 4 bytes, line 29
29');
30</script>
30 31 32<!-- PostHog -->
33<script type="text/plain" data-category="analytics"> 34!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once register_for_session unregister unregister_for_session getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty createPersonProfile opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing clear_opt_in_out_capturing debug".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]); 35posthog.init('phc_BXZk1wrHfz5E1h0anQjDWBW4dtFv4jETmpFaBo6oSlo', { 36 api_host: 'https://us.i.posthog.com', 37 person_profiles: 'identified_only' 38}); 39</script>
39 40 41<!-- Meta (Facebook) Pixel -->
42<script type="text/plain" data-category="marketing">
vendor: 399 bytes, lines 42-51
42 43!function(f,b,e,v,n,t,s) 44{if(f.fbq)return;n=f.fbq=function(){n.callMethod? 45n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 46if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 47n.queue=[];t=b.createElement(e);t.async=!0; 48t.src=v;s=b.getElementsByTagName(e)[0]; 49s.parentNode.insertBefore(t,s)}(window, document,'script', 50'https://connect.facebook.net/en_US/fbevents.js'); 51fbq('init', '
511823226748278748
vendor: 30 bytes, lines 51-52
51'); 52fbq('track', 'PageView');
53</script>
53 54 55<!-- HubSpot -->
56<script type="text/plain" data-category="marketing" id="hs-script-loader" async defer src="//js.hs-scripts.com/20745831.js"></script>
56 57 58<!-- LinkedIn Insight Tag -->
59<script type="text/plain" data-category="marketing"> 60_linkedin_partner_id = "7250858"; 61window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || []; 62window._linkedin_data_partner_ids.push(_linkedin_partner_id); 63</script>
vendor: 1 bytes, line 63
63
64<script type="text/plain" data-category="marketing"> 65(function(l) { 66if (!l){window.lintrk = function(a,b){window.lintrk.q.push([a,b])}; 67window.lintrk.q=[]} 68var s = document.getElementsByTagName("script")[0]; 69var b = document.createElement("script"); 70b.type = "text/javascript";b.async = true; 71b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js"; 72s.parentNode.insertBefore(b, s);})(window.lintrk); 73</script>
73 74 75<!-- Google Ads (gtag.js) -->
vendor: 108 bytes, lines 75-76
75 76<script type="text/plain" data-category="marketing" async src="https://www.googletagmanager.com/gtag/js?id=
76AW-662763737
vendor: 12 bytes, line 76
76"></script>
77<script type="text/plain" data-category="marketing"> 78
vendor: 133 bytes, lines 78-81
78window.dataLayer = window.dataLayer || []; 79 function gtag(){dataLayer.push(arguments);} 80 gtag('js', new Date()); 81 gtag('config', '
81AW-662763737
vendor: 4 bytes, line 81
81');
82</script>
82 83 84 85 86<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/cookieconsent.css"> 87<style> 88 /* Brand tokens â vanilla-cookieconsent CSS variables */ 89 #cc-main { 90 --cc-font-family: var(--font-sans); 91 --cc-bg: var(--color-bg); 92 --cc-primary-color: var(--color-text); 93 --cc-secondary-color: var(--color-text-muted); 94 --cc-btn-border-radius: var(--radius); 95 --cc-modal-border-radius: var(--radius); 96 --cc-btn-primary-bg: var(--color-accent); 97 --cc-btn-primary-color: var(--color-bg); 98 --cc-btn-primary-border-color: var(--color-accent); 99 --cc-btn-primary-hover-bg: var(--color-accent-hover); 100 --cc-btn-primary-hover-color: var(--color-bg); 101 --cc-btn-primary-hover-border-color: var(--color-accent-hover); 102 --cc-btn-secondary-bg: transparent; 103 --cc-btn-secondary-color: var(--color-text); 104 --cc-btn-secondary-border-color: var(--color-border-strong); 105 --cc-btn-secondary-hover-bg: rgba(0, 0, 0, 0.03); 106 --cc-btn-secondary-hover-color: var(--color-text); 107 --cc-btn-secondary-hover-border-color: var(--color-text); 108 --cc-link-color: var(--color-accent); 109 } 110 111 /* Compact consent banner */ 112 #cc-main .cm--box { 113 max-width: 340px; 114 box-shadow: var(--shadow-card-hover); 115 } 116 /* Keep "Learn more" from splitting across lines. */ 117 #cc-main .cm--box .cm__desc a { 118 white-space: nowrap; 119 } 120 #cc-main .cm--box .cm__body { 121 padding: 0; 122 } 123 #cc-main .cm--box .cm__texts { 124 padding: var(--space-md); 125 } 126 #cc-main .cm--box .cm__title { 127 font-size: var(--text-sm); 128 font-weight: 700; 129 margin: 0 0 var(--space-xs); 130 padding: 0; 131 } 132 #cc-main .cm--box .cm__title:empty { 133 display: none; 134 } 135 /* Zero out the library's own 1.1em top margin and 1em bottom padding 136 on .cm__desc â .cm__texts already gives us the right outer padding. */ 137 #cc-main .cm--box .cm__desc { 138 font-size: var(--text-sm); 139 line-height: 1.45; 140 margin: 0; 141 padding: 0; 142 } 143 /* Flatten the library's nested .cm__btn-group so Accept + Reject sit 144 side-by-side in a single flex row with consistent heights. */ 145 #cc-main .cm--box .cm__btns { 146 display: flex !important; 147 flex-direction: row !important; 148 align-items: stretch; 149 gap: var(--space-sm); 150 padding: 0 var(--space-md) var(--space-md); 151 border-top: none; 152 margin: 0; 153 } 154 #cc-main .cm--box .cm__btn-group { 155 display: contents !important; 156 } 157 #cc-main .cm--box .cm__btn { 158 margin: 0 !important; 159 line-height: 1.2; 160 box-sizing: border-box; 161 } 162 /* Accept = flex-grow 2 (primary). Reject = flex-grow 1 (secondary). 163 2:1 ratio reads as intentional rather than "a wide button with a 164 stub next to it". */ 165 #cc-main .cm--box .cm__btn[data-role="all"] { 166 flex: 2 1 0 !important; 167 } 168 #cc-main .cm--box .cm__btn[data-role="necessary"] { 169 flex: 1 1 0 !important; 170 } 171</style>
172<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/cookieconsent.umd.js"></script>
vendor: 1 bytes, line 172
172
173<script defer> 174 window.__CC_PRIVACY_URL = 'https://www.upstream.tech/privacy/'; 175</script>
vendor: 1 bytes, line 175
175
176<script defer> 177 178 // EU 27 + EEA (IS, LI, NO) + UK + Switzerland â the standard "GDPR 179 // region" set. Visitors outside this list get auto-accept; visitors 180 // inside it get the consent banner. 181 var GDPR_COUNTRIES = new Set([ 182 'AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR','DE','GR','HU', 183 'IE','IT','LV','LT','LU','MT','NL','PL','PT','RO','SK','SI','ES', 184 'SE','IS','LI','NO','GB','CH' 185 ]); 186 187 function detectCountry() { 188 return fetch('/cdn-cgi/trace', { cache: 'no-store' }) 189 .then(function (r) { return r.ok ? r.text() : ''; }) 190 .then(function (text) { 191 var m = text.match(/loc=([A-Z]{2})/); 192 return m ? m[1] : null; 193 }) 194 .catch(function () { return null; }); 195 } 196 197 addEventListener('DOMContentLoaded', function () { 198 if (typeof CookieConsent === 'undefined') return; 199 detectCountry().then(function (country) { 200 // Default to GDPR-safe (show banner) if detection fails. 201 var requiresConsent = !country || GDPR_COUNTRIES.has(country); 202 CookieConsent.run({ 203 autoShow: requiresConsent, 204 guiOptions: { 205 consentModal: { layout: 'box', position: 'bottom right', equalWeightButtons: false }, 206 preferencesModal: { layout: 'box', equalWeightButtons: false } 207 }, 208 categories: { 209 necessary: { enabled: true, readOnly: true }, 210 analytics: {}, 211 marketing: {} 212 }, 213 language: { 214 default: 'en', 215 translations: { 216 en: { 217 consentModal: { 218 title: '', 219 description: 'We use cookies for analytics and marketing. <a href="' + window.__CC_PRIVACY_URL + '">Learn more</a>.', 220 acceptAllBtn: 'Accept', 221 acceptNecessaryBtn: 'Reject' 222 }, 223 preferencesModal: { 224 title: 'Cookie preferences', 225 acceptAllBtn: 'Accept all', 226 acceptNecessaryBtn: 'Reject all', 227 savePreferencesBtn: 'Save preferences', 228 closeIconLabel: 'Close', 229 sections: [ 230 { 231 title: 'Strictly necessary', 232 description: 'Required for the site to function. Cannot be disabled.', 233 linkedCategory: 'necessary' 234 }, 235 { 236 title: 'Analytics', 237 description: 'Google Analytics and PostHog â help us understand how visitors use the site so we can improve it.', 238 linkedCategory: 'analytics' 239 }, 240 { 241 title: 'Marketing', 242 description: 'Meta Pixel, HubSpot, and LinkedIn Insight â used for advertising measurement and outreach.', 243 linkedCategory: 'marketing' 244 } 245 ] 246 } 247 } 248 } 249 } 250 }).then(function () { 251 // Outside GDPR regions: auto-accept all categories so pixels 252 // fire without showing the banner. Skip if the visitor already 253 // made an explicit choice (e.g., they previously opted out via 254 // the footer "Cookie preferences" link). 255 if (!requiresConsent && !CookieConsent.validConsent()) { 256 CookieConsent.acceptCategory('all'); 257 } 258 }); 259 }); 260 }); 261 262</script>
262 263 264</head> 265<body> 266 267 <header> 268 <nav> 269 <a href="/" class="nav-logo"><img src="/images/hydroforecast-logo.svg?v=080bee06" alt="HydroForecast"></a> 270 <button class="nav-toggle" aria-label="Toggle menu" aria-expanded="false"> 271 <span></span><span></span><span></span> 272 </button> 273 <ul> 274 <li><a href="/">Home</a></li> 275 <li class="nav-dropdown-wrap"> 276 <button class="nav-dropdown-trigger" aria-expanded="false">Industries <svg class="nav-chevron" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" width="14" height="14"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/></svg></button> 277 <div class="nav-dropdown"> 278 <a href="/hydropower/" class="nav-dropdown-item"> 279 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z"/></svg> 280 Hydropower 281 </a> 282 <a href="/energy-traders/" class="nav-dropdown-item"> 283 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"/></svg> 284 Energy Traders 285 </a> 286 <a href="/water-utilities/" class="nav-dropdown-item"> 287 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z"/></svg> 288 Water Utilities 289 </a> 290 <a href="/mining/" class="nav-dropdown-item"> 291 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 7.5l-2.25-1.313m0 0l-2.25-1.312M18.75 6.187l-2.25 1.313M18.75 6.187V3.375m-9 5.25l-2.25-1.312m0 0L5.25 6l-2.25 1.313M7.5 7.313V4.5m0 0L5.25 3.187M7.5 4.5l2.25-1.313M12 21l-2.25-1.313m0 0l-2.25-1.312m2.25 1.312l-2.25 1.313M9.75 19.687V16.875m0 0l2.25-1.313m-2.25 1.313L7.5 15.562"/></svg> 292 Mining 293 </a> 294 <a href="/government-agencies/" class="nav-dropdown-item"> 295 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 21v-8.25M15.75 21v-8.25M8.25 21v-8.25M3 9l9-6 9 6m-1.5 12V10.332A48.36 48.36 0 0 0 12 9.75c-2.551 0-5.056.2-7.5.582V21M3 21h18M12 6.75h.008v.008H12V6.75Z"/></svg> 296 Government Agencies 297 </a> 298 </div> 299 </li> 300 <li class="nav-dropdown-wrap"> 301 <button class="nav-dropdown-trigger" aria-expanded="false">Platform <svg class="nav-chevron" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" width="14" height="14"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/></svg></button> 302 <div class="nav-dropdown"> 303 <a href="/features/" class="nav-dropdown-item"> 304 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.
304074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.248a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.282c-.062-.373-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"/><path d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"/></svg> 305 Features 306 </a> 307 <a href="/faq/" class="nav-dropdown-item"> 308 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 5.25h.008v.008H12v-.008Z"/></svg> 309 FAQ 310 </a> 311 </div> 312 </li> 313 <li class="nav-dropdown-wrap"> 314 <button class="nav-dropdown-trigger" aria-expanded="false">Resources <svg class="nav-chevron" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" width="14" height="14"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/></svg></button> 315 <div class="nav-dropdown nav-dropdown--wide"> 316 <div class="nav-dropdown-cols"> 317 <div class="nav-dropdown-col nav-dropdown-col--featured"> 318 <div class="nav-featured-carousel"> 319 320 <article class="resource-card nav-featured-post active"> 321 <a href="/resources/upstream-tech-partners-with-noaa-office-of-water-prediction/"> 322 <img src="/images/noaa-crada-hero.webp?v=88346c60" alt="Upstream Tech Partners with NOAA's Office of Water Prediction" loading="lazy"> 323 <div class="resource-card-body"> 324 <span class="resource-date">June 26, 2026 · The HydroForecast Team</span> 325 <p class="nav-featured-title">Upstream Tech Partners with NOAA's Office of Water Prediction</p> 326 </div> 327 </a> 328 </article> 329 330 <article class="resource-card nav-featured-post"> 331 <a href="/resources/forecasting-in-ungauged-basins/"> 332 <img src="/images/PNW-AR-Blog--4-.webp?v=8bf8ca5b" alt="Forecasting in ungauged basins" loading="lazy"> 333 <div class="resource-card-body"> 334 <span class="resource-date">March 25, 2026 · Alex Truby</span> 335 <p class="nav-featured-title">Forecasting in ungauged basins</p> 336 </div> 337 </a> 338 </article> 339 340 <article class="resource-card nav-featured-post"> 341 <a href="/resources/hydroforecast-provides-critical-decision-support-during-a-month-of-historic-atmospheric-rivers/"> 342 <img src="/images/PNW-AR-Blog.webp?v=1c459097" alt="HydroForecast provides critical decision support during a month of historic atmospheric rivers" loading="lazy"> 343 <div class="resource-card-body"> 344 <span class="resource-date">February 17, 2026 · Hunter Johnson</span> 345 <p class="nav-featured-title">HydroForecast provides critical decision support during a month of historic atmospheric rivers</p> 346 </div> 347 </a> 348 </article> 349 350 </div> 351 </div> 352 <div class="nav-dropdown-col nav-dropdown-col--browse"> 353 <div class="nav-dropdown-group"> 354 <button type="button" class="nav-dropdown-item nav-dropdown-group-trigger" aria-expanded="true" aria-controls="nav-resources-learn">
355 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25"/></svg> 356 Learn <svg class="nav-chevron nav-dropdown-group-chevron" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" width="14" height="14" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/></svg> 357 </button> 358 <div class="nav-dropdown-group-items" id="nav-resources-learn"> 359 <a href="/resources/#blog" class="nav-dropdown-item"> 360 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 0 1-2.25 2.25M16.5 7.5V18a2.25 2.25 0 0 0 2.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 0 0 2.25 2.25h13.5M6 7.5h3v3H6v-3Z"/></svg> 361 Blog 362 </a> 363 <a href="/resources/#webinar" class="nav-dropdown-item"> 364 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M17.25 6.75 22.5 4.5v15l-5.25-2.25M4.5 6.75h9a1.5 1.5 0 0 1 1.5 1.5v9a1.5 1.5 0 0 1-1.5 1.5h-9a1.5 1.5 0 0 1-1.5-1.5v-9a1.5 1.5 0 0 1 1.5-1.5Z"/></svg> 365 Webinars 366 </a> 367 <a href="/resources/#case-study" class="nav-dropdown-item"> 368 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 0 0 2.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 0 0-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75 2.25 2.25 0 0 0-.1-.664m-5.8 0A2.251 2.251 0 0 1 13.5 2.25H15c1.012 0 1.867.668 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25ZM6.75 12h.008v.008H6.75V12Zm0 3h.008v.008H6.75V15Zm0 3h.008v.008H6.75V18Z"/></svg> 369 Case studies 370 </a> 371 <a href="/resources/#product" class="nav-dropdown-item"> 372 <svg class="industry-icon" viewBox="0 0 130 130" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M55.5447 30.7572C57.8334 25.3079 65.6179 25.4938 67.6438 31.0463L86.1495 81.7655L103.537 86.1125C104.119 86.258 104.678 86.4834 105.199 86.7822L142.994 108.495L139.756 114.131L101.961 92.4184L84.573 88.0715C82.4799 87.5482 80.7828 86.0204 80.0433 83.9935L61.5376 33.2742L32.361 102.742C30.6469 106.823 25.4434 108.035 22.103 105.13L9.09243 93.8166L-10.7017 113.611L-15.2979 109.015L4.49623 89.2204C6.9105 86.8061 10.7811 86.6712 13.3576 88.9116L26.3681 100.225L55.5447 30.7572Z"/></svg> 373 Product 374 </a> 375 <a href="/resources/#research" class="nav-dropdown-item"> 376 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4.26 10.147a60.438 60.438 0 0 0-.491 6.347A48.62 48.62 0 0 1 12 20.904a48.62 48.62 0 0 1 8.232-4.41 60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.636 50.636 0 0 0-2.658-.813A59.906 59.906 0 0 1 12 3.493a59.903 59.903 0 0 1 10.399 5.84c-.896.248-1.783.52-2.658.814m-15.482 0A50.717 50.717 0 0 1 12 13.489a50.702 50.702 0 0 1 3.741-3.342M6.75 15a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/></svg> 377 Research 378 </a> 379 </div> 380 </div> 381 <a href="/resources/#news" class="nav-dropdown-item">
382 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0"/></svg> 383 Announcements 384 </a> 385 <a href="/forecast-face-off/" class="nav-dropdown-item"> 386 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><path d="M15.91 11.672a.375.375 0 0 1 0 .656l-5.603 3.113a.375.375 0 0 1-.557-.328V8.887c0-.286.307-.466.557-.327l5.603 3.112Z"/></svg> 387 Forecast Face-off game 388 </a> 389 <a href="/resources/" class="nav-dropdown-explore-all"> 390 Explore all <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="14" height="14"><path fill-rule="evenodd" d="M3 10a.75.75 0 0 1 .75-.75h10.638L10.23 5.29a.75.75 0 1 1 1.04-1.08l5.5 5.25a.75.75 0 0 1 0 1.08l-5.5 5.25a.75.75 0 1 1-1.04-1.08l4.158-3.96H3.75A.75.75 0 0 1 3 10Z" clip-rule="evenodd"/></svg> 391 </a> 392 </div> 393 </div> 394 </div> 395 </li> 396 <li class="nav-dropdown-wrap"> 397 <button class="nav-dropdown-trigger" aria-expanded="false">About <svg class="nav-chevron" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" width="14" height="14"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/></svg></button> 398 <div class="nav-dropdown"> 399 <a href="/about/" class="nav-dropdown-item"> 400 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="8.5" cy="7.5" r="2.5"/><circle cx="16" cy="8" r="2"/><path d="M3.5 19c0-3 2.5-5 5-5s5 2 5 5"/><path d="M13.5 15c2 0 4 1.5 4.5 4"/></svg> 401 Team 402 </a> 403 <a href="/press/" class="nav-dropdown-item"> 404 <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.34 15.84c-.688-.06-1.386-.09-2.09-.09H7.5a4.5 4.5 0 1 1 0-9h.75c.704 0 1.402-.03 2.09-.09m0 9.18c.253.962.584 1.892.985 2.783.247.55.06 1.21-.463 1.511l-.657.38c-.551.318-1.26.117-1.527-.461a20.845 20.845 0 0 1-1.44-4.282m3.102.069a18.03 18.03 0 0 1-.59-4.59c0-1.586.205-3.124.59-4.59m0 9.18a23.848 23.848 0 0 1 8.835 2.535M10.34 6.66a23.847 23.847 0 0 1 8.835-2.535m0 0A23.74 23.74 0 0 1 18.795 3m.38 1.125a23.91 23.91 0 0 1 1.014 5.395m-1.014 8.855c-.118.38-.245.754-.38 1.125m.38-1.125a23.91 23.91 0 0 0 1.014-5.395m0-3.46c.495.413.811 1.035.811 1.73 0 .695-.316 1.317-.811 1.73m0-3.46a24.347 24.347 0 0 1 0 3.46"/></svg> 405 Press 406 </a> 407 </div> 408 </li> 409 <li><a href="/contact/" class="btn-contact">Contact</a></li> 410 <li><a href="https://dashboard.hydroforecast.com/" class="btn-login">Log in</a></li> 411 </ul> 412 </nav> 413 </header> 414 415 <main> 416 <div id="hubspot-form"></div>
417<script> 418 window.addEventListener('load', function() { 419 if (typeof hbspt !== 'undefined') { 420 hbspt.forms.create({ 421 region: "na1", 422 portalId: "20745831", 423 formId: "f59c0f56-d2a4-4386-8870-4abe525e9145", 424 target: "#hubspot-form" 425 }); 426 } 427 }); 428</script>
428 429 430 431 </main> 432 433 <footer> 434 <div class="footer-top"> 435 <div class="footer-brand"> 436 <a href="https://www.upstream.tech" class="footer-logo"><img src="/images/upstream-tech-logo.svg?v=5fa5528a" alt="Upstream Tech"></a> 437 <div class="footer-newsletter-section"> 438 <img src="/images/hydroforecast-logo.svg?v=080bee06" alt="HydroForecast" class="footer-newsletter-logo"> 439 <p class="footer-newsletter-text">Stay up to date with the latest from HydroForecast</p> 440 <a href="/newsletter/" class="btn-primary footer-newsletter-btn">Subscribe to our newsletter</a> 441 </div> 442 </div> 443 <div class="footer-columns"> 444 <div class="footer-col"> 445 <strong>Product</strong> 446 <ul> 447 <li><a href="/features/">Features</a></li> 448 <li><a href="/faq/">FAQ</a></li> 449 <li><a href="/support/">Support</a></li> 450 </ul> 451 </div> 452 <div class="footer-col"> 453 <strong>Industries</strong> 454 <ul> 455 <li><a href="/hydropower/">Hydropower</a></li> 456 <li><a href="/energy-traders/">Energy Traders</a></li> 457 <li><a href="/water-utilities/">Water Utilities</a></li> 458 <li><a href="/mining/">Mining</a></li> 459 <li><a href="/government-agencies/">Government Agencies</a></li> 460 </ul> 461 </div> 462 <div class="footer-col"> 463 <strong>Resources</strong> 464 <ul> 465 <li><a href="/resources/#blog">Blog</a></li> 466 <li><a href="/resources/#webinar">Webinars</a></li> 467 <li><a href="/resources/#case-study">Case studies</a></li> 468 <li><a href="/resources/#product">Product</a></li> 469 <li><a href="/resources/#news">Announcements</a></li> 470 </ul> 471 </div> 472 <div class="footer-col"> 473 <strong>Company</strong> 474 <ul> 475 <li><a href="/about/">Team</a></li> 476 <li><a href="https://www.upstream.tech/careers/">Careers</a></li> 477 <li><a href="/press/">Press</a></li> 478 <li><a href="/contact/">Contact</a></li> 479 <li><a href="/licenses/">Terms</a></li> 480 <li><a href="https://dashboard.hydroforecast.com/">Log in</a></li> 481 </ul> 482 </div> 483 </div> 484 </div> 485 <div class="footer-bottom"> 486 <p>Copyright © 2026 Upstream Tech, Inc.</p> 487 <div class="footer-bottom-right"> 488 <a href="https://www.linkedin.com/company/upstream-pbc/" aria-label="LinkedIn" class="footer-social"> 489 <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg> 490 </a> 491 <a href="https://www.youtube.com/channel/UCO4cjFHJFOygDM6UhsznUaA" aria-label="YouTube" class="footer-social"> 492 <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg> 493 </a> 494 <a href="/licenses/">Terms</a> 495 <a href="https://www.upstream.tech/privacy/">Privacy</a> 496 <a href="#" data-cc="show-preferencesModal">Cookie preferences</a> 497 </div> 498 </div> 499 </footer> 500 501
501<script> 502// Toggle .nav-scrolled on <body> so the home-hero-nav transparent nav (CSS in 503// _shared/base.css) flips to its solid state once the user scrolls past the 504// hero. Scoped: no-op on pages that don't set bodyClass: home-hero-nav. 505(function () { 506 if (!document.body.classList.contains("home-hero-nav")) return; 507 var scrolled = false; 508 function update() { 509 var next = window.scrollY > 8; 510 if (next === scrolled) return; 511 scrolled = next; 512 document.body.classList.toggle("nav-scrolled", next); 513 } 514 update(); 515 window.addEventListener("scroll", update, { passive: true }); 516 window.addEventListener("resize", update); 517})(); 518</script>
518 519 520
520<script> 521 (function(){ 522 var btn=document.querySelector('.nav-toggle'); 523 var ul=document.querySelector('header nav ul'); 524 btn.addEventListener('click',function(){ 525 var open=btn.getAttribute('aria-expanded')==='true'; 526 btn.setAttribute('aria-expanded',String(!open)); 527 ul.classList.toggle('nav-open'); 528 }); 529 var wraps=document.querySelectorAll('.nav-dropdown-wrap'); 530 wraps.forEach(function(wrap){ 531 var trigger=wrap.querySelector('.nav-dropdown-trigger'); 532 trigger.addEventListener('click',function(e){ 533 e.stopPropagation(); 534 wrap.classList.toggle('open'); 535 }); 536 }); 537 document.addEventListener('click',function(){ 538 wraps.forEach(function(wrap){ wrap.classList.remove('open'); }); 539 }); 540 // Expandable groups inside a dropdown (Resources â Learn). Stop the click 541 // reaching the document handler above, which would close the dropdown. 542 document.querySelectorAll('.nav-dropdown-group-trigger').forEach(function(t){ 543 var items=document.getElementById(t.getAttribute('aria-controls')); 544 t.addEventListener('click',function(e){ 545 e.stopPropagation(); 546 var open=t.getAttribute('aria-expanded')==='true'; 547 t.setAttribute('aria-expanded',String(!open)); 548 items.hidden=open; 549 }); 550 }); 551 })(); 552 // Featured post carousel 553 (function(){ 554 var carousel = document.querySelector('.nav-featured-carousel'); 555 if (!carousel) return; 556 var posts = carousel.querySelectorAll('.nav-featured-post'); 557 if (posts.length < 2) return; 558 var idx = 0; 559 posts[idx].classList.add('active'); 560 setInterval(function(){ 561 posts[idx].classList.remove('active'); 562 idx = (idx + 1) % posts.length; 563 posts[idx].classList.add('active'); 564 }, 4000); 565 })(); 566 </script>
566 567
567<script charset="utf-8" type="text/javascript" src="//js.hsforms.net/forms/embed/v2.js"></script>
567 568<!-- Cloudflare Pages Analytics -->
vendor: 99 bytes, line 568
568<script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "
5685445986602dd40848b6b342b01ca210f
vendor: 13 bytes, line 568
568"}'></script>
568<!-- Cloudflare Pages Analytics --></body> 569</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.