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.0" /> 6 <title>StormCast â NWS Weather Alerts & River Flood App</title> 7 <link rel="canonical" href="https://stormcastapp.com/" /> 8 <link rel="icon" href="/favicon.ico" sizes="any" /> 9 <link rel="icon" type="image/png" href="/favicon.png" /> 10 <link rel="apple-touch-icon" href="/favicon.png" /> 11 <meta name="theme-color" content="#05070d" /> 12 <meta name="google-adsense-account" content="ca-pub-6374991879498911"> 13 14 <meta name="description" content="Free Android app for NWS severe weather alerts, river flood monitoring, hurricane tracking, and live radar â anywhere in the US." /> 15 <meta property="og:type" content="website" /> 16 <meta property="og:url" content="https://stormcastapp.com/" /> 17 <meta property="og:title" content="StormCast â NWS Severe Weather Alerts & River Flood App for Android" /> 18 <meta property="og:description" content="Android app for NWS tornado, flood, and severe weather push notifications anywhere in the US. River gauge monitoring, hurricane tracking, emergency scanner feeds. Available now on Google Play." /> 19 <meta property="og:image" content="https://stormcastapp.com/og-image.jpg" /> 20 <meta name="twitter:card" content="summary_large_image" /> 21 <meta name="twitter:title" content="StormCast â NWS Severe Weather Alerts & River Flood App for Android" /> 22 <meta name="twitter:description" content="Android app for NWS tornado, flood, and severe weather push notifications anywhere in the US. River gauge monitoring, hurricane tracking, emergency scanner feeds." /> 23 <meta name="twitter:image" content="https://stormcastapp.com/og-image.jpg" /> 24 25 <!-- Structured data --> 26
26<script type="application/ld+json"> 27 { 28 "@context": "https://schema.org", 29 "@type": "SoftwareApplication", 30 "@id": "https://stormcastapp.com/#app", 31 "name": "StormCast: Weather & Radar", 32 "alternateName": "StormCast", 33 "description": "Free Android and Windows app for real-time NWS severe weather alerts, USGS river flood monitoring, hurricane tracking, and emergency scanner feeds. Built in Giles County, Virginia. Push notifications delivered nationwide.", 34 "applicationCategory": "WeatherApplication", 35 "operatingSystem": "Android 8.0+, Windows 10+", 36 "datePublished": "2025-05-24", 37 "installUrl": "https://play.google.com/store/apps/details?id=app.stormcast.android", 38 "sameAs": ["https://play.google.com/store/apps/details?id=app.stormcast.android"], 39 "publisher": { "@id": "https://stormcastapp.com/#org" }, 40 "offers": { 41 "@type": "Offer", 42 "price": "0", 43 "priceCurrency": "USD" 44 }, 45 "url": "https://stormcastapp.com" 46 } 47 </script>
47 48 49
49<script type="application/ld+json"> 50 { 51 "@context": "https://schema.org", 52 "@type": "Organization", 53 "@id": "https://stormcastapp.com/#org", 54 "name": "StormCast", 55 "alternateName": "StormCast App", 56 "url": "https://stormcastapp.com", 57 "logo": "https://stormcastapp.com/favicon.png", 58 "foundingDate": "2025-05-24", 59 "foundingLocation": { "@type": "Place", "name": "Giles County, Virginia, United States" }, 60 "areaServed": { "@type": "Country", "name": "United States" }, 61 "sameAs": ["https://play.google.com/store/apps/details?id=app.stormcast.android"] 62 } 63 </script>
63 64 65 <!-- Google consent management (Privacy & messaging) â must load before AdSense --> 66
66<script async src="https://fundingchoicesmessages.google.com/i/pub-6374991879498911?ers=1"></script>
66 67
67<script>(function(){function signalGooglefcPresent(){if(!window.frames['googlefcPresent']){if(document.body){const iframe=document.createElement('iframe');iframe.style='width:0;height:0;border:none;z-index:-1000;left:-1000px;top:-1000px;';iframe.style.display='none';iframe.name='googlefcPresent';document.body.appendChild(iframe);}else{setTimeout(signalGooglefcPresent,0);}}}signalGooglefcPresent();})();</script>
67 68 69 <!-- AdSense --> 70
70<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-6374991879498911" crossorigin="anonymous"></script>
70 71 72 <!-- Fonts --> 73 <link rel="preconnect" href="https://fonts.googleapis.com" /> 74 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 75 <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" /> 76 77 <link rel="stylesheet" href="styles.css" /> 78 <link rel="stylesheet" href="live-hero.css" /> 79 <link rel="stylesheet" href="hero-widget/hero-widget.css" /> 80 <link rel="preconnect" href="https://api.weather.gov" crossorigin /> 81 <link rel="preconnect" href="https://opengeo.ncep.noaa.gov" crossorigin />
82<script async src="https://fundingchoicesmessages.google.com/i/pub-6374991879498911?ers=1"></script>
vendor: 1 bytes, line 82
82
83<script>(function(){function signalGooglefcPresent(){if(!window.frames['googlefcPresent']){if(document.body){const iframe=document.createElement('iframe');iframe.style='width:0;height:0;border:none;z-index:-1000;left:-1000px;top:-1000px;';iframe.style.display='none';iframe.name='googlefcPresent';document.body.appendChild(iframe);}else{setTimeout(signalGooglefcPresent,0);}}}signalGooglefcPresent();})();</script>
83</head> 84<body> 85 86<!-- Ambient background --> 87<div class="bg-canvas" aria-hidden="true"> 88 <div class="bg-grid"></div> 89 <canvas class="bg-rain" id="bg-rain"></canvas> 90 <div class="bg-noise"></div> 91 <div class="bg-flash"></div> 92</div> 93 94<!-- -- NAV -------------------------------------------------------- --> 95<div class="nav-shell"> 96 <div class="wrap nav"> 97 <div class="nav-left"> 98 <a href="#top" class="nav-brand"> 99 <img src="favicon.png" alt="StormCast" /> 100 <span>StormCast</span> 101 </a> 102 <div class="nav-status" title="Live system status"> 103 <span class="live-dot"></span> 104 <span>OPERATIONAL · NWS · USGS · NHC</span> 105 </div> 106 </div> 107 <div class="nav-links"> 108 <a href="#features">Features</a> 109 <a href="/river-level-app">River Gauges</a> 110 <a href="/about">About</a> 111 <a href="/blog/">Blog</a> 112 <a href="#install">Install</a> 113 <a href="#faq">FAQ</a> 114 </div> 115 <button class="nav-hamburger" id="nav-hamburger" aria-label="Open menu" aria-expanded="false"> 116 <span></span><span></span><span></span> 117 </button> 118 <a href="https://play.google.com/store/apps/details?id=app.stormcast.android" class="nav-cta"> 119 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> 120 <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/> 121 <polyline points="7 10 12 15 17 10"/> 122 <line x1="12" y1="15" x2="12" y2="3"/> 123 </svg> 124 Get the App 125 </a> 126 </div> 127</div> 128 129<!-- Status ribbon --> 130<div class="ribbon"> 131 <span><strong>LIVE ON GOOGLE PLAY & WINDOWS</strong> · Free to download · No subscription required</span> 132</div> 133 134<!-- -- HERO ------------------------------------------------------- --> 135<section class="hero" id="top"> 136 <div class="wrap hero-inner"> 137 <div class="hero-text"> 138 <div class="hero-coord" id="hero-coord"> 139 <span class="ping"></span> 140 <span id="hero-coord-lat">37.3265°N</span><span class="sep">/</span><span id="hero-coord-lon">-80.7717°W</span> 141 <span class="sep">·</span> 142 <span id="hero-coord-name">YOUR LOCATION</span> 143 </div> 144 145 <h1 class="hero-title"> 146 <span class="word">Know</span> 147 <span class="word">before</span> 148 <span class="word">the</span> 149 <br /> 150 <span class="word accent">storm</span> 151 <span class="word accent">hits.</span> 152 </h1> 153 154 <p class="hero-sub"> 155 Every signal that matters â <strong>NWS warnings</strong>, <strong>river flood stages</strong>, live radar, and your own <strong>scanner feeds</strong> â on one screen. Stop juggling six apps when the sky turns. 156 </p> 157 158 <div class="wx-search" id="wx-search"> 159 <div class="wx-search-label"><span class="dot"></span>LIVE CONDITIONS · RADAR · ALERTS â 29,000+ US CITIES</div> 160 <div class="wx-search-box"> 161 <svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg> 162 <input id="wx-search-input" type="text" placeholder="Search any US city â weather, radar & alertsâ¦" autocomplete="off" spellcheck="false" aria-label="Search US city weather" /> 163 <kbd class="wx-search-kbd">/</kbd> 164 </div> 165 <div class="wx-search-drop" id="wx-search-drop" hidden></div> 166 </div> 167 168 <div class="hero-cta-row"> 169 <a href="https://play.google.com/store/apps/details?id=app.stormcast.android" class="btn btn-primary"> 170 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> 171 <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/> 172 <polyline points="7 10 12 15 17 10"/> 173 <line x1="12" y1="15" x2="12" y2="3"/> 174 </svg> 175 Download on Google Play 176 </a> 177 <a href="/download-windows" class="btn btn-ghost"> 178 <svg viewBox="0 0 24 24" fill="currentColor"><rect x="2" y="2" width="9" height="9"/><rect x="13" y="2" width="9" height="9"/><rect x="2" y="13" width="9" height="9"/><rect x="13" y="13" width="9" height="9"/></svg> 179 Download for Windows 180 </a> 181 <a href="#features" class="btn btn-ghost"> 182 Explore features 183 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 184 </a> 185 </div> 186 187 <div class="hero-meta">
188 <span class="ok">● ANDROID 8.0+</span> 189 <span class="sep"></span> 190 <span>GOOGLE PLAY</span> 191 <span class="sep"></span> 192 <span>WINDOWS 10/11</span> 193 <span class="sep"></span> 194 <span>FREE TO DOWNLOAD</span> 195 <span class="sep"></span> 196 <span class="store-soon-wrap"> 197 <svg class="store-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z"/></svg> 198 <svg class="store-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M3.18 23.76c.39.21.84.22 1.24.03l11.75-6.54-2.76-2.76-10.23 9.27zM.29 1.27C.11 1.6 0 2.01 0 2.52v18.96c0 .51.11.92.29 1.25l.07.06 10.63-10.63v-.25L.36 1.21l-.07.06zM20.94 10.22l-2.37-1.32-2.98 2.98 2.98 2.98 2.38-1.32c.68-.38.68-1.0 0-1.38l-.01.06zM4.42.21L16.17 6.75l-2.76 2.76L3.18.24C3.58.05 4.03.06 4.42.27V.21z"/></svg> 199 AVAILABLE ON GOOGLE PLAY 200 </span> 201 </div> 202 </div> 203 204 <!-- -- Live dashboard preview (mirrors actual app) --- --> 205 <div class="hero-viz"> 206 <!-- Real app UI â same HeroWeatherCard + StatusCard React components as 207 the Android dashboard, compiled to a standalone bundle (see 208 src/landing/). Not a hand-copied lookalike. --> 209 <div id="stormcast-hero-root" class="stormcast-hero-root"> 210 <div class="stormcast-hero-fallback">Loading live conditionsâ¦</div> 211 </div> 212 213 <div class="hero-actions-row"> 214 <a class="hero-download-cta" href="https://play.google.com/store/apps/details?id=app.stormcast.android" target="_blank" rel="noopener"> 215 <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg> 216 Get the app for full features 217 </a> 218 <button class="hero-coord-precise" id="lc-precise" title="Use my precise location" aria-label="Use my precise location"> 219 <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M12 2v3"/><path d="M12 19v3"/><path d="M2 12h3"/><path d="M19 12h3"/></svg> 220 Use precise location 221 </button> 222 </div> 223 224 <div class="livecard livecard-extra"> 225 <div class="lc-spark" hidden> 226 <div class="lc-spark-head"><span>NEXT 24 HRS</span><span id="lc-spark-range">â</span></div> 227 <canvas id="lc-spark-canvas"></canvas> 228 </div> 229 230 <!-- live radar â NOAA NCEP composite reflectivity, centered on the visitor --> 231 <div class="lc-radar" id="lc-radar" hidden> 232 <div class="lc-radar-tiles" id="lc-radar-tiles"></div> 233 <div class="lc-radar-marker" id="lc-radar-marker" hidden></div> 234 <div class="lc-radar-top"> 235 <span class="lc-radar-label"><span class="lc-radar-dot"></span>LIVE RADAR</span> 236 <span class="lc-radar-time mono" id="lc-radar-time">--:--</span> 237 </div> 238 <div class="lc-radar-attr">NOAA NCEP Radar · Esri</div> 239 </div> 240 241 <!-- 7-day forecast strip --> 242 <div class="lc-week" id="lc-week" hidden></div> 243 244 <!-- footer source bar --> 245 <div class="lc-foot"> 246 <span class="lc-foot-l"> 247 <span class="lc-foot-dot"></span> 248 Polled <span id="lc-poll">23s</span> ago · NWS / USGS / NHC 249 </span> 250 <span class="lc-foot-r mono" id="lc-clock">00:00:00</span> 251 </div> 252 </div> 253 <p class="lc-disclaimer" id="lc-disclaimer">Preview only â for reference, not actual current conditions.</p> 254 </div> 255 </div> 256 257 <!-- -- live telemetry strip --- --> 258 <div class="telemetry"> 259 <div class="wrap telemetry-inner"> 260 <div class="telem-cell"> 261 <div class="telem-label"><span class="dot"></span><span id="telem-label-loc">
261YOUR LOCATION · TEMP</span></div> 262 <div class="telem-value"><span id="telem-temp">78</span><span class="unit">°F</span></div> 263 <div class="telem-sub" id="telem-sub-temp">Clear · Feels 75°</div> 264 </div> 265 <div class="telem-cell"> 266 <div class="telem-label"><span class="dot"></span>NEAREST RIVER GAUGE</div> 267 <div class="telem-value"><span id="telem-river">2.9</span><span class="unit">ft</span></div> 268 <div class="telem-sub ok" id="telem-sub-river">NORMAL · Action @ 12ft</div> 269 </div> 270 <div class="telem-cell"> 271 <div class="telem-label"><span class="dot"></span>STREAMFLOW</div> 272 <div class="telem-value"><span id="telem-cfs">1,620</span><span class="unit">cfs</span></div> 273 <div class="telem-sub" id="telem-sub-cfs">USGS Water Data · 17m ago</div> 274 </div> 275 <div class="telem-cell"> 276 <div class="telem-label"><span class="dot"></span>WIND · HUMIDITY</div> 277 <div class="telem-value"><span id="telem-wind">9</span><span class="unit">mph</span> · <span id="telem-humidity">40</span><span class="unit">%</span></div> 278 <div class="telem-sub" id="telem-sub-wind">SW · stable</div> 279 </div> 280 <div class="telem-cell"> 281 <div class="telem-label"><span class="dot"></span>SYSTEM · LOCAL</div> 282 <div class="telem-value mono" id="telem-clock" style="font-size:18px;letter-spacing:0;">00:00:00</div> 283 <div class="telem-sub ok">All feeds nominal</div> 284 </div> 285 </div> 286 </div> 287</section> 288 289<!-- -- SHOWCASE / PHONES ------------------------------------------- --> 290<section class="showcase" data-reveal> 291 <div class="wrap"> 292 <div class="showcase-head"> 293 <span class="eyebrow"><span class="dot"></span>THE APP</span> 294 <h2 class="section-title">Built for real emergencies, not just <span class="accent">forecasts</span>.</h2> 295 <p class="section-sub" style="margin-left:auto;margin-right:auto;">A live ops console for your phone â every feed that matters on one screen, updating in real time.</p> 296 </div> 297 298 <div class="phones-stage"> 299 <div class="phone left"> 300 <div class="phone-pill"></div> 301 <div class="phone-screen"><img src="sc-menu.jpg" alt="Features menu" loading="lazy" /></div> 302 <span class="phone-tag"><span class="dot"></span>FEATURES</span> 303 </div> 304 <div class="phone center"> 305 <div class="phone-pill"></div> 306 <div class="phone-screen"><img src="sc-dashboard.jpg" alt="Dashboard" loading="lazy" /></div> 307 <span class="phone-tag"><span class="dot"></span>DASHBOARD · LIVE</span> 308 </div> 309 <div class="phone right"> 310 <div class="phone-pill"></div> 311 <div class="phone-screen"><img src="sc-rivers.jpg" alt="River gauges" loading="lazy" /></div> 312 <span class="phone-tag"><span class="dot"></span>RIVERS</span> 313 </div> 314 </div> 315 </div> 316</section> 317 318<!-- AdSense: between showcase and consolidation --> 319<div class="wrap" style="padding:1.5rem 0"><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6374991879498911" data-ad-slot="5602539400" data-ad-format="auto" data-full-width-responsive="true"></ins>
319<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
319</div> 320 321<!-- -- ONE APP / CONSOLIDATION ------------------------------------- --> 322<section class="consolidate" data-reveal> 323 <div class="wrap consolidate-inner"> 324 <div class="consolidate-stack" aria-hidden="true"> 325 <div class="cs-app cs-app-1"> 326 <svg viewBox="0 0 24 24" fill="none" stroke="#ef4444" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> 327 <span>NWS Alerts</span> 328 </div> 329 <div class="cs-app cs-app-2"> 330 <svg viewBox="0 0 24 24" fill="none" stroke="#4f8df4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12c1.5-2 3-2 4.5 0s3 2 4.5 0 3-2 4.5 0 3 2 4.5 0"/><path d="M2 17c1.5-2 3-2 4.5 0s3 2 4.5 0 3-2 4.5 0 3 2 4.5 0"/></svg> 331 <span>USGS Gauges</span> 332 </div> 333 <div class="cs-app cs-app-3"> 334 <svg viewBox="0 0 24 24" fill="none" stroke="#a78bfa" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="2" width="6" height="11" rx="3"/><path d="M19 10a7 7 0 0 1-14 0"/><line x1="12" y1="19" x2="12" y2="22"/><line x1="8" y1="22" x2="16" y2="22"/></svg> 335 <span>Scanner Player</span> 336 </div> 337 <div class="cs-app cs-app-4"> 338 <svg viewBox="0 0 24 24" fill="none" stroke="#06b6d4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21"/></svg> 339 <span>Radar Maps</span> 340 </div> 341 <div class="cs-app cs-app-5"> 342 <svg viewBox="0 0 24 24" fill="none" stroke="#facc15" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4"/><line x1="12" y1="2" x2="12" y2="4"/><line x1="12" y1="20" x2="12" y2="22"/><line x1="4.93" y1="4.93" x2="6.34" y2="6.34"/><line x1="17.66" y1="17.66" x2="19.07" y2="19.07"/></svg> 343 <span>Forecasts</span> 344 </div> 345 <div class="cs-app cs-app-6"> 346 <svg viewBox="0 0 24 24" fill="none" stroke="#f97316" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 0 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z"/></svg> 347 <span>Fire Weather</span> 348 </div> 349 <div class="cs-arrow"> 350 <svg viewBox="0 0 48 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"> 351 <line x1="2" y1="8" x2="42" y2="8"/> 352 <polyline points="36 2 42 8 36 14"/> 353 </svg> 354 </div> 355 <div class="cs-result"> 356 <img src="favicon.png" alt="" /> 357 <div class="cs-result-text"> 358 <strong>StormCast</strong> 359 <span>One app</span> 360 </div> 361 </div> 362 </div> 363 364 <div class="consolidate-copy"> 365 <span class="eyebrow"><span class="dot"></span>ONE APP, EVERYTHING</span> 366 <h2 class="section-title">Stop juggling <span class="accent">six different apps</span> during severe weather.</h2> 367 <p class="section-sub">When a storm rolls in, the last thing you need is to open one app for NWS warnings, another for the river gauge, and a browser tab for the radar — plus a separate site to find a working police or fire scanner stream. StormCast pulls every signal that actually matters — severe weather, flood stages, radar, fire weather, AQI — into one console, and lets you paste in your own scanner stream URLs so they live in the same player. Less tab-hopping. Faster decisions. One source of truth on the screen you already carry.</p> 368 </div> 369 </div> 370</section> 371 372<!-- -- COMPARISON TABLE -------------------------------------------- --> 373<section class="compare" data-reveal> 374 <div class="wrap"> 375 <div class="compare-head"> 376 <span class="eyebrow"><span class="dot"></span>SIDE BY SIDE</span> 377 <h2 class="section-title">How it stacks up.</h2> 378 <p class="section-sub" style="margin-left:auto;margin-right:auto;">An honest comparison against the apps you might already have on your phone.</p> 379 </div> 380 381 <div class="compare-card"> 382 <div class="compare-table"> 383 <!-- header row --> 384 <div class="compare-row compare-header"> 385 <div class="compare-feature">Feature</div> 386 <div class="compare-col compare-col-us"> 387 <img src="favicon.png" alt="" />
388 <span>StormCast</span> 389 </div> 390 <div class="compare-col"> 391 <span class="compare-col-icon"> 392 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/></svg> 393 </span> 394 <span>Built-in weather</span> 395 </div> 396 <div class="compare-col"> 397 <span class="compare-col-icon"> 398 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg> 399 </span> 400 <span>Weather Channel</span> 401 </div> 402 </div> 403 404 <!-- feature rows --> 405 <div class="compare-row"> 406 <div class="compare-feature">NWS push notifications</div> 407 <div class="compare-cell yes">Yes</div> 408 <div class="compare-cell partial">Limited</div> 409 <div class="compare-cell yes">Yes</div> 410 </div> 411 412 <div class="compare-row"> 413 <div class="compare-feature">USGS river gauge monitoring</div> 414 <div class="compare-cell yes">Yes</div> 415 <div class="compare-cell no">No</div> 416 <div class="compare-cell no">No</div> 417 </div> 418 419 <div class="compare-row"> 420 <div class="compare-feature">Bring-your-own scanner streams</div> 421 <div class="compare-cell yes">Yes</div> 422 <div class="compare-cell no">No</div> 423 <div class="compare-cell no">No</div> 424 </div> 425 426 <div class="compare-row"> 427 <div class="compare-feature">Custom local alert feeds (RSS)</div> 428 <div class="compare-cell yes">Yes</div> 429 <div class="compare-cell no">No</div> 430 <div class="compare-cell no">No</div> 431 </div> 432 433 <div class="compare-row"> 434 <div class="compare-feature">Multi-location alerts</div> 435 <div class="compare-cell yes">Unlimited</div> 436 <div class="compare-cell partial">2–3 max</div> 437 <div class="compare-cell partial">Premium only</div> 438 </div> 439 440 <div class="compare-row"> 441 <div class="compare-feature">Persistent temperature in status bar</div> 442 <div class="compare-cell yes">Yes</div> 443 <div class="compare-cell partial">Limited</div> 444 <div class="compare-cell no">No</div> 445 </div> 446 447 <div class="compare-row"> 448 <div class="compare-feature">Fire weather & red flag warnings</div> 449 <div class="compare-cell yes">Yes</div> 450 <div class="compare-cell no">No</div> 451 <div class="compare-cell partial">Premium only</div> 452 </div> 453 454 <div class="compare-row"> 455 <div class="compare-feature">Hurricane tracker</div> 456 <div class="compare-cell yes">Yes</div> 457 <div class="compare-cell partial">Basic</div> 458 <div class="compare-cell yes">Yes</div> 459 </div> 460 461 <div class="compare-row"> 462 <div class="compare-feature">Minimal ads</div> 463 <div class="compare-cell yes">Yes</div> 464 <div class="compare-cell partial">Varies</div> 465 <div class="compare-cell no">Heavy</div> 466 </div> 467 468 <div class="compare-row"> 469 <div class="compare-feature">No data sold to third parties</div> 470 <div class="compare-cell yes">Yes</div> 471 <div class="compare-cell partial">Varies</div> 472 <div class="compare-cell no">No</div> 473 </div> 474 475 <div class="compare-row"> 476 <div class="compare-feature">Subscription cost</div> 477 <div class="compare-cell yes">Free</div> 478 <div class="compare-cell yes">Free</div> 479 <div class="compare-cell partial">
479$3+/mo Pro</div> 480 </div> 481 </div> 482 </div> 483 484 <p class="compare-scroll-hint" aria-hidden="true">← swipe to compare →</p> 485 <p class="compare-foot">StormCast is free and supported by minimal, non-intrusive ads. Core severe-weather and emergency alerts will always remain free. See our <a href="/privacy#future">privacy policy</a> for details.<br /><br />Comparison reflects publicly available app features as of June 2026. Built-in weather varies by device manufacturer. StormCast is in active development — some features may behave differently in your environment.</p> 486 </div> 487</section> 488 489<!-- -- FEATURES ---------------------------------------------------- --> 490<section class="features" id="features" data-reveal> 491 <div class="wrap"> 492 <div class="features-head"> 493 <span class="eyebrow"><span class="dot"></span>SYSTEM CAPABILITIES</span> 494 <h2 class="section-title">Everything you need<br />to <span class="accent">stay ahead of the storm</span>.</h2> 495 <p class="section-sub" style="margin-left:auto;margin-right:auto;">Every sensor stream that matters, one app. Built for people who need to know about severe weather <em>before</em> it arrives â not after.</p> 496 </div> 497 498 <div class="features-grid"> 499 <article class="feat"> 500 <div class="feat-icon-bg" style="background:rgba(239,68,68,0.1);border-color:rgba(239,68,68,0.25);"> 501 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#ef4444" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> 502 </div> 503 <h3>Severe Weather Alerts</h3> 504 <p>Push notifications for every NWS warning â tornado, flood, severe thunderstorm, ice, winter. Filtered to your saved locations, delivered the second they're issued.</p> 505 <div class="feat-meta"><span>Source NWS API</span><span>Poll 30 sec</span></div> 506 <a href="/tornado-alerts" class="feat-link">Tornado alerts →</a> 507 </article> 508 509 <article class="feat"> 510 <div class="feat-icon-bg" style="background:rgba(79,141,244,0.1);border-color:rgba(79,141,244,0.25);"> 511 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#4f8df4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z"/></svg> 512 </div> 513 <h3>Temperature at a Glance</h3> 514 <p>Always-on temp and conditions in your notification bar, plus a Quick Settings tile one swipe away. Updates silently in the background â never interrupts you.</p> 515 <div class="feat-meta"><span>Status bar & tile</span><span>Battery-safe</span></div> 516 </article> 517 518 <article class="feat"> 519 <div class="feat-icon-bg" style="background:rgba(34,197,94,0.1);border-color:rgba(34,197,94,0.25);"> 520 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#22c55e" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg> 521 </div> 522 <h3>Multi-Location Alerts</h3> 523 <p>Monitor home, work, family. Get warnings for every saved area â not just where you are right now.</p> 524 <div class="feat-meta"><span>Unlimited locations</span><span>Per-zone rules</span></div> 525 </article> 526 527 <article class="feat"> 528 <div class="feat-icon-bg" style="background:rgba(250,204,21,0.1);border-color:rgba(250,204,21,0.25);"> 529 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#facc15" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12c1.5-2 3-2 4.5 0s3 2 4.5 0 3-2 4.5 0 3 2 4.5 0"/><path d="M2 17c1.5-2 3-2 4.5 0s3 2 4.5 0 3-2 4.5 0 3 2 4.5 0"/><path d="M2 7c1.5-2 3-2 4.5 0s3 2 4.5 0 3-2 4.5 0 3 2 4.5 0"/></svg> 530 </div> 531 <h3>River Gauge Monitoring</h3> 532 <p>USGS river gauges with NWS flood stage thresholds â Action / Flood / Moderate / Major â pushed before water hits critical.</p> 533 <div class="feat-meta"><span>USGS Water Data</span><span>NWS flood stages</span></div> 534 <a href="/flood-alerts" class="feat-link">Flood alerts →</a> 535 </article> 536 537 <article class="feat"> 538 <div class="feat-icon-bg" style="background:rgba(249,115,22,0.1);border-color:rgba(249,115,22,0.25);"> 539 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#f97316" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8"/>
539<path d="M14 12a2 2 0 1 1-4 0 2 2 0 0 1 4 0z"/><path d="M20.5 5.5a10 10 0 0 0-17 0"/><line x1="12" y1="12" x2="12" y2="21"/><line x1="9" y1="21" x2="15" y2="21"/></svg> 540 </div> 541 <h3>Local Alert Feeds</h3> 542 <p>Bring your own â Code Red, Rave RSS, any local emergency URL. Push fires the second something new posts.</p> 543 <div class="feat-meta"><span>RSS / Atom</span><span>Custom URLs</span></div> 544 </article> 545 546 <article class="feat"> 547 <div class="feat-icon-bg" style="background:rgba(168,85,247,0.1);border-color:rgba(168,85,247,0.25);"> 548 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#a78bfa" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 0 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z"/></svg> 549 </div> 550 <h3>Fire Weather & AQI</h3> 551 <p>Red Flag warnings, fire danger levels, AQI and UV index â one place. Know before you head outside.</p> 552 <div class="feat-meta"><span>NWS Fire Wx</span><span>AirNow AQI</span></div> 553 <a href="/air-quality-alerts" class="feat-link">Air quality alerts →</a> 554 </article> 555 556 <article class="feat"> 557 <div class="feat-icon-bg" style="background:rgba(6,182,212,0.1);border-color:rgba(6,182,212,0.25);"> 558 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#06b6d4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17.7 7.7a2.5 2.5 0 1 1 1.8 4.3H2"/><path d="M9.6 4.6A2 2 0 1 1 11 8H2"/><path d="M12.6 19.4A2 2 0 1 0 14 16H2"/></svg> 559 </div> 560 <h3>Hurricane Tracker</h3> 561 <p>Live NHC storm tracks, categories, and forecast cones during hurricane season. Stay ahead of every advisory.</p> 562 <div class="feat-meta"><span>NHC feed</span><span>Cone of uncertainty</span></div> 563 <a href="/hurricane-tracker" class="feat-link">Hurricane tracker →</a> 564 </article> 565 566 <article class="feat"> 567 <div class="feat-icon-bg" style="background:rgba(45,212,191,0.1);border-color:rgba(45,212,191,0.25);"> 568 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#2dd4bf" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21"/><line x1="9" y1="3" x2="9" y2="18"/><line x1="15" y1="6" x2="15" y2="21"/></svg> 569 </div> 570 <h3>Live Radar & Maps</h3> 571 <p>Interactive radar, lightning strikes, storm cell tracking. See exactly what's heading your way and when.</p> 572 <div class="feat-meta"><span>NOAA NCEP radar</span><span>Live lightning</span></div> 573 </article> 574 575 <article class="feat"> 576 <div class="feat-icon-bg" style="background:rgba(99,102,241,0.1);border-color:rgba(99,102,241,0.25);"> 577 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#818cf8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="2" width="6" height="11" rx="3"/><path d="M19 10a7 7 0 0 1-14 0"/><line x1="12" y1="19" x2="12" y2="22"/><line x1="8" y1="22" x2="16" y2="22"/></svg> 578 </div> 579 <h3>Emergency Scanner</h3> 580 <p>Paste your favorite police, fire, EMS, or weather scanner stream URLs and listen to all of them in one player. Works with any public audio stream URL.</p> 581 <div class="feat-meta"><span>Bring your own URLs</span><span>Background audio</span></div> 582 </article> 583 584 <article class="feat"> 585 <div class="feat-icon-bg" style="background:rgba(245,158,11,0.1);border-color:rgba(245,158,11,0.25);"> 586 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/><line x1="12" y1="2" x2="12" y2="4"/></svg> 587 </div> 588 <h3>Custom Alert Tone</h3> 589 <p>Weather alerts fire with a distinctive two-chirp tone â not a generic ding. You'll know it's a real warning before you even look at your phone.</p> 590 <div class="feat-meta"><span>Unique sound signature</span><span>Hard to miss</span></div> 591 </article> 592 593 <article class="feat"> 594 <div class="feat-icon-bg" style="background:rgba(244,63,94,0.1);border-color:rgba(244,63,94,0.25);"> 595 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#f43f5e" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0z"/><circle cx="12" cy="10" r="3"/></svg> 596 </div> 597 <h3>Neighborhood Reports</h3> 598 <p>Trees down, power lines, flooded or icy roads, mudslides, hail, snow depth â dropped by StormCast users near you and confirmed or flagged by the community. Auto-expires so it stays current.</p> 599 <div class="feat-meta"><span>Crowd-sourced</span><span>5 mi to county-wide</span></div> 600 <a href="/neighborhood-reports" class="feat-link">Neighborhood reports →</a> 601 </article> 602 603 <article class="feat"> 604 <div class="feat-icon-bg" style="background:rgba(168,85,247,0.1);border-color:rgba(168,85,247,0.25);"> 605 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#a78bfa" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3l1.9 5.8L20 10l-6.1 1.2L12 17l-1.9-5.8L4 10l6.1-1.2z"/><path d="M19 17l.7 2.1L22 20l-2.3.9L19 23l-.7-2.1L16 20l2.3-.9z"/></svg> 606 </div> 607 <h3>Space Weather & Aurora</h3> 608 <p>Tonight's Northern Lights chances for your exact location, your sky conditions, NOAA storm watches, live aurora maps and a beginner'
608s guide. Optional aurora alerts when a storm is strong enough to see from where you are.</p> 609 <div class="feat-meta"><span>NOAA SWPC</span><span>Optional alerts</span></div> 610 <a href="/aurora-alerts" class="feat-link">Aurora alerts →</a> 611 </article> 612 613 <article class="feat"> 614 <div class="feat-icon-bg" style="background:rgba(250,204,21,0.1);border-color:rgba(250,204,21,0.25);"> 615 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#facc15" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg> 616 </div> 617 <h3>Lightning Alerts</h3> 618 <p>A push when lightning strikes near you, so you can get off the field, out of the water or call the kids in before the storm arrives.</p> 619 <div class="feat-meta"><span>Live strike data</span><span>Near you</span></div> 620 <a href="/lightning-alerts" class="feat-link">Lightning alerts →</a> 621 </article> 622 623 <article class="feat"> 624 <div class="feat-icon-bg" style="background:rgba(234,88,12,0.1);border-color:rgba(234,88,12,0.25);"> 625 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#fb923c" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12h4l3-8 4 16 3-8h6"/></svg> 626 </div> 627 <h3>Earthquake Alerts</h3> 628 <p>Notifications for USGS-reported earthquakes near you, with the magnitude, location and how far away it was. Bigger quakes alert from farther away.</p> 629 <div class="feat-meta"><span>USGS</span><span>Magnitude-scaled</span></div> 630 <a href="/earthquake-alerts" class="feat-link">Earthquake alerts →</a> 631 </article> 632 633 <article class="feat"> 634 <div class="feat-icon-bg" style="background:rgba(59,130,246,0.1);border-color:rgba(59,130,246,0.25);"> 635 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#60a5fa" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="4" width="20" height="13" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg> 636 </div> 637 <h3>Windows App</h3> 638 <p>StormCast on your PC with the same dashboard, radar, river gauges and space weather page, plus desktop notifications. Starts with Windows and updates itself.</p> 639 <div class="feat-meta"><span>Windows 10/11</span><span>Free</span></div> 640 <a href="/download-windows" class="feat-link">Download for Windows →</a> 641 </article> 642 </div> 643 644 <div class="features-status-bar"> 645 <span class="features-status-dot"></span> 646 <span>All data feeds monitored 24/7</span> 647 <a href="/status" class="features-status-link">View live system status →</a> 648 </div> 649 </div> 650</section> 651 652<!-- AdSense: between features and limits --> 653<div class="wrap" style="padding:1.5rem 0"><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6374991879498911" data-ad-slot="5602539400" data-ad-format="auto" data-full-width-responsive="true"></ins>
653<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
653</div> 654 655<!-- -- WHAT THIS APP WON'T DO -------------------------------------- --> 656<section class="limits" data-reveal> 657 <div class="wrap"> 658 <div class="limits-head"> 659 <span class="eyebrow"><span class="dot"></span>WHAT THIS APP WON'T DO</span> 660 <h2 class="section-title">We're upfront about the limits.</h2> 661 <p class="section-sub" style="margin-left:auto;margin-right:auto;">A safety tool is only useful if you know what it is and what it isn't. Four things we want to be clear about.</p> 662 </div> 663 664 <div class="limits-grid"> 665 <article class="limit-card"> 666 <div class="limit-icon" aria-hidden="true"> 667 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 668 <path d="M2 8.5C5.5 8.5 8 6 8 6s2.5 2.5 6 2.5 6-2.5 6-2.5"/> 669 <path d="M2 14C5.5 14 8 11.5 8 11.5s2.5 2.5 6 2.5 6-2.5 6-2.5"/> 670 <path d="M2 19.5C5.5 19.5 8 17 8 17s2.5 2.5 6 2.5 6-2.5 6-2.5"/> 671 </svg> 672 <span class="limit-x">Ã</span> 673 </div> 674 <h3>It doesn't replace NOAA Weather Radio.</h3> 675 <p>When the cell network is down or the power's out, a battery-powered NOAA Weather Radio is still the most reliable line. StormCast complements that — it doesn't replace it.</p> 676 </article> 677 678 <article class="limit-card"> 679 <div class="limit-icon" aria-hidden="true"> 680 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 681 <circle cx="12" cy="12" r="10"/> 682 <polyline points="12 6 12 12 16 14"/> 683 </svg> 684 <span class="limit-x">Ã</span> 685 </div> 686 <h3>It doesn't predict the weather.</h3> 687 <p>Every alert, watch, and forecast comes straight from the National Weather Service and its partner agencies. We don't run our own models or claim to know anything the NWS doesn't.</p> 688 </article> 689 690 <article class="limit-card"> 691 <div class="limit-icon" aria-hidden="true"> 692 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 693 <path d="M12 1v22"/> 694 <path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/> 695 </svg> 696 <span class="limit-x">Ã</span> 697 </div> 698 <h3>It won't sell your data.</h3> 699 <p>No third-party tracking, no behavioral analytics, no marketing lists. Your email and saved locations exist only to deliver the alerts you signed up for. Any advertising shown will never use your personal data for targeting.</p> 700 </article> 701 702 <article class="limit-card"> 703 <div class="limit-icon" aria-hidden="true"> 704 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 705 <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/> 706 </svg> 707 <span class="limit-x">Ã</span> 708 </div> 709 <h3>It can't guarantee delivery.</h3> 710 <p>Push notifications depend on your phone, your carrier, OS battery settings, and Google's Firebase service. In a real emergency, never rely on any single source — not us, not anyone. Always have a backup.</p> 711 </article> 712 </div> 713 714 <div class="limits-foot"> 715 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> 716 <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/> 717 </svg> 718 <span>If we ever can't deliver on these, you'll hear about it from us first — not from a screenshot on social media.</span> 719 </div> 720 </div> 721</section> 722 723<!-- -- ARCHITECTURE / PIPELINE ------------------------------------- --> 724<section class="architecture" id="architecture" data-reveal> 725 <div class="wrap"> 726 <div class="arch-card"> 727 <div class="arch-head">
728 <span class="eyebrow"><span class="dot"></span>HOW IT WORKS</span> 729 <h2 class="section-title" style="margin-top:14px;">Server-side intelligence.<br />Zero battery impact on your phone.</h2> 730 <p class="section-sub">StormCast does the monitoring so your phone doesn't have to. All data is checked and filtered on our servers â your device is only contacted when something relevant happens.</p> 731 </div> 732 733 <div class="arch-pipeline"> 734 <div class="arch-node"> 735 <div class="arch-node-label">STEP 1</div> 736 <div class="arch-node-title">Continuous source monitoring</div> 737 <div class="arch-node-sub">NWS checked every 30 sec · other feeds every few minutes · 24/7</div> 738 <div class="src-list"> 739 <div class="src">National Weather Service warnings</div> 740 <div class="src">USGS river gauge readings</div> 741 <div class="src">National Hurricane Center tracks</div> 742 <div class="src">Air quality & fire weather conditions</div> 743 </div> 744 </div> 745 746 <div class="arch-arrow"><div class="line"><div class="pkt"></div></div></div> 747 748 <div class="arch-node middle"> 749 <div class="arch-node-label">STEP 2</div> 750 <div class="arch-node-title">Intelligent filtering</div> 751 <div class="arch-node-sub">Relevant alerts only · no noise</div> 752 <div class="src-list"> 753 <div class="src">Matched against your saved locations</div> 754 <div class="src">River thresholds checked per gauge</div> 755 <div class="src">Duplicate alerts suppressed automatically</div> 756 <div class="src">Only new, relevant events trigger a push</div> 757 </div> 758 </div> 759 760 <div class="arch-arrow"><div class="line"><div class="pkt"></div></div></div> 761 762 <div class="arch-node"> 763 <div class="arch-node-label">STEP 3</div> 764 <div class="arch-node-title">Instant delivery to your device</div> 765 <div class="arch-node-sub">Push notification · app stays closed</div> 766 <div class="src-list"> 767 <div class="src">Pushed the moment it's found</div> 768 <div class="src">Custom tone distinguishes weather alerts</div> 769 <div class="src">Live conditions visible in status bar</div> 770 <div class="src">No background data use between alerts</div> 771 </div> 772 </div> 773 </div> 774 775 <div class="arch-stats"> 776 <div class="arch-stat"> 777 <div class="v">30<span class="unit">sec</span></div> 778 <div class="l">Check interval</div> 779 </div> 780 <div class="arch-stat"> 781 <div class="v">24/7</div> 782 <div class="l">Monitoring</div> 783 </div> 784 <div class="arch-stat"> 785 <div class="v">6</div> 786 <div class="l">Federal sources</div> 787 </div> 788 <div class="arch-stat"> 789 <div class="v">100<span class="unit">%</span></div> 790 <div class="l">Google Play</div> 791 </div> 792 </div> 793 </div> 794 </div> 795</section> 796 797<!-- AdSense: between architecture and install --> 798<div class="wrap" style="padding:1.5rem 0"><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6374991879498911" data-ad-slot="5602539400" data-ad-format="auto" data-full-width-responsive="true"></ins>
798<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
798</div> 799 800<!-- -- INSTALL ----------------------------------------------------- --> 801<section class="install" id="install" data-reveal> 802 <div class="wrap install-grid"> 803 <div class="install-left"> 804 <span class="eyebrow"><span class="dot"></span>AVAILABLE NOW</span> 805 <h2 class="section-title">Get it on<br /><span class="accent">Google Play.</span></h2> 806 <p class="section-sub">StormCast is available for free on Google Play. Download it now and get severe weather alerts, live radar, river flood monitoring, and more â right on your phone.</p> 807 808 <div class="install-steps"> 809 <div class="install-step"> 810 <div class="install-step-num">01</div> 811 <div class="install-step-text"> 812 <strong>Download from Google Play</strong> 813 <span>Tap the button below or search "StormCast" on the Play Store. It's free, no subscription required.</span> 814 </div> 815 </div> 816 <div class="install-step"> 817 <div class="install-step-num">02</div> 818 <div class="install-step-text"> 819 <strong>Grant permissions</strong> 820 <span>Allow location and notifications when asked â location matches alerts to your area, never shared. Notifications deliver severe weather warnings in real time.</span> 821 </div> 822 </div> 823 <div class="install-step"> 824 <div class="install-step-num">03</div> 825 <div class="install-step-text"> 826 <strong>Stay prepared</strong> 827 <span>Your dashboard shows current conditions, alerts, radar, and forecasts at a glance. Enable Travel Alerts for real-time tracking while driving.</span> 828 </div> 829 </div> 830 </div> 831 </div> 832 833 <div class="dl-card"> 834 <div class="dl-card-head"> 835 <div class="dl-pkg"> 836 <img src="favicon.png" alt="StormCast" loading="lazy" /> 837 <div class="dl-pkg-meta"> 838 <strong>StormCast</strong> 839 app.stormcast.android 840 </div> 841 </div> 842 <div class="dl-version">Available · Google Play</div> 843 </div> 844 845 <div class="unlocked-banner" style="background:rgba(34,197,94,0.12);border-color:rgba(34,197,94,0.3);color:#86efac;"> 846 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg> 847 AVAILABLE NOW ON GOOGLE PLAY 848 </div> 849 850 <div class="dl-stats"> 851 <div class="dl-stat"><div class="l">Platform</div><div class="v">Android 8.0+</div></div> 852 <div class="dl-stat"><div class="l">Price</div><div class="v">Free</div></div> 853 <div class="dl-stat"><div class="l">Ads</div><div class="v">Ad-supported</div></div> 854 <div class="dl-stat"><div class="l">Subscription</div><div class="v">None</div></div> 855 </div> 856 857 <a href="https://play.google.com/store/apps/details?id=app.stormcast.android" target="_blank" rel="noopener" class="dl-cta" style="text-decoration:none;text-align:center;display:flex;align-items:center;justify-content:center;gap:0.5rem;"> 858 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M3.609 1.814L13.792 12 3.61 22.186a.996.996 0 01-.61-.92V2.734a1 1 0 01.609-.92zm10.89 10.893l2.302 2.302-10.937 6.333 8.635-8.635zm3.199-3.199l2.302 2.302L4.864 3.477 13.5 9.81l3.199-3.302zM14.5 12l-2.302-2.302L4.864 3.365l10.937 6.333L14.5 12z"/></svg> 859 Get it on Google Play 860 </a> 861 862 <div class="dl-stores-coming"> 863 <div class="dl-stores-label">Also available on</div> 864 <div class="dl-stores-row"> 865 <div class="dl-store-badge"> 866 <svg width="20" height="20" viewBox="0 0 24 24" fill="white"><path d="M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z"/></svg> 867 <div class="dl-store-info">
868 <span class="dl-store-name">App Store</span> 869 <span class="dl-store-sub">iOS · Coming soon</span> 870 </div> 871 </div> 872 <div class="dl-store-badge"> 873 <svg width="20" height="20" viewBox="0 0 24 24" fill="white"><path d="M3.18 23.76c.39.21.84.22 1.24.03l11.75-6.54-2.76-2.76-10.23 9.27zM.29 1.27C.11 1.6 0 2.01 0 2.52v18.96c0 .51.11.92.29 1.25l.07.06 10.63-10.63v-.25L.36 1.21l-.07.06zM20.94 10.22l-2.37-1.32-2.98 2.98 2.98 2.98 2.38-1.32c.68-.38.68-1.0 0-1.38l-.01.06zM4.42.21L16.17 6.75l-2.76 2.76L3.18.24C3.58.05 4.03.06 4.42.27V.21z"/></svg> 874 <div class="dl-store-info"> 875 <span class="dl-store-name">Google Play</span> 876 <span class="dl-store-sub">Android · Available Now</span> 877 </div> 878 </div> 879 </div> 880 </div> 881 882 <!-- iOS waitlist â gauges real demand before committing to an iOS build --> 883 <div class="ios-wait"> 884 <div class="ios-wait-head"> 885 <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z"/></svg> 886 <span class="ios-wait-title">Want StormCast on iPhone?</span> 887 </div> 888 <p class="ios-wait-sub">An iOS version is on the roadmap. Leave your email and we'll let you know the moment it's available.</p> 889 890 <form class="ios-wait-form" id="ios-wait-form" novalidate> 891 <label class="ios-wait-hp" aria-hidden="true"> 892 Leave this field empty 893 <input type="text" name="website" tabindex="-1" autocomplete="off" /> 894 </label> 895 <label for="ios-wait-email" class="sr-only" style="position:absolute;left:-9999px;">Email address</label> 896 <input type="email" id="ios-wait-email" name="email" placeholder="[email protected]" autocomplete="email" required /> 897 <button type="submit" id="ios-wait-btn">Notify me</button> 898 </form> 899 <p class="ios-wait-msg" id="ios-wait-msg" role="status" aria-live="polite"></p> 900 <p class="ios-wait-note">Email only. No spam, no sharing — one message if iOS launches.</p> 901 </div> 902 903 <div class="dl-fineprint"> 904 <strong style="color:var(--mute);display:block;margin-bottom:6px;">⚠ DISCLAIMER</strong> 905 StormCast is a supplemental awareness tool. It is <strong style="color:var(--mute);">not</strong> a substitute for official emergency communications and should <strong style="color:var(--mute);">never</strong> be relied upon for life-safety decisions. Alert data may be delayed or incomplete. Always confirm severe weather, flooding, and emergency information directly with the <a href="https://www.weather.gov" target="_blank">National Weather Service</a>, your local emergency management agency, or other official government sources. The developers assume no liability for missed, delayed, or incorrect alerts. 906 </div> 907 </div> 908 </div> 909</section> 910 911<!-- -- FAQ --------------------------------------------------------- --> 912<section class="faq" id="faq" data-reveal> 913 <div class="wrap"> 914 <div class="faq-head"> 915 <span class="eyebrow"><span class="dot"></span>FAQ</span> 916 <h2 class="section-title">Common questions</h2> 917 </div> 918 919 <div class="faq-list"> 920 <details class="faq-item"> 921 <summary>Do I need a Google account or Play Store to install StormCast?<span class="faq-icon"></span></summary> 922 <div class="faq-body">On Android, yes â StormCast is distributed through Google Play, so a Google account is required, and updates happen automatically through the Play Store. On a Windows PC, no â <a href="/download-windows">download the Windows app</a> directly from this site; it updates itself.</div> 923 </details> 924 <details class="faq-item"> 925 <summary>Will StormCast drain my battery?<span class="faq-icon"></span></summary> 926 <div class="faq-body">StormCast is designed to be battery-friendly. All polling runs on our backend â severe weather alerts are checked as often as every 30 seconds, other feeds every few minutes â and your device only wakes when there's a payload to deliver. No background polling, no GPS thrash, no constant network chatter. For best results, go to <strong>Android Settings → Apps → StormCast → Battery</strong> and set it to <strong>Unrestricted</strong>
926 so Android doesn't delay incoming alerts.</div> 927 </details> 928 <details class="faq-item"> 929 <summary>Will I get alerts even when my phone is locked or the app is closed?<span class="faq-icon"></span></summary> 930 <div class="faq-body">Yes. StormCast uses Google's Firebase push notification service to deliver alerts in the background â the same technology used by Gmail and other major apps. As long as your phone has an internet connection, you'll receive severe weather alerts, river flood stage notifications, and emergency feed updates even when the app is completely closed.</div> 931 </details> 932 <details class="faq-item"> 933 <summary>How is StormCast different from the built-in weather app?<span class="faq-icon"></span></summary> 934 <div class="faq-body">Most built-in weather apps only show forecasts. StormCast adds real-time NWS severe weather alerts with push notifications, USGS river gauge monitoring with flood stage warnings, your own emergency radio streams (police, fire, EMS scanners you add yourself), hurricane tracking, fire weather alerts, and your own local emergency alert feeds â all in one app built for areas where severe weather and flooding are serious concerns.</div> 935 </details> 936 <details class="faq-item"> 937 <summary>How accurate are the weather alerts and river gauge readings?<span class="faq-icon"></span></summary> 938 <div class="faq-body">Alert data comes directly from the <a href="https://www.weather.gov" target="_blank">National Weather Service</a> and river readings come from <a href="https://waterdata.usgs.gov" target="_blank">USGS Water Resources</a> â both official federal sources. StormCast does not modify or interpret this data; it delivers it to you as quickly as possible. That said, StormCast is a supplemental tool only and should never be relied on for life-safety decisions. Always confirm with official sources during emergencies.</div> 939 </details> 940 <details class="faq-item"> 941 <summary>Is StormCast free? Are there ads or subscriptions?<span class="faq-icon"></span></summary> 942 <div class="faq-body">StormCast is free to download. The app may include ads and optional subscription features to support ongoing development. The <strong>core severe-weather and emergency alerts will always remain accessible</strong> â those are safety features, not premium features.</div> 943 </details> 944 <details class="faq-item"> 945 <summary>Is there an iOS version?<span class="faq-icon"></span></summary> 946 <div class="faq-body">Not yet. StormCast launched on Android first because persistent background services are significantly more flexible on Android. An iOS version is on the roadmap.</div> 947 </details> 948 <details class="faq-item"> 949 <summary>What Android version do I need?<span class="faq-icon"></span></summary> 950 <div class="faq-body">StormCast requires Android 8.0 (Oreo) or newer, released in 2017. If your phone was made in the last 6–7 years it will almost certainly be compatible. The app is tested primarily on Android 12–16.</div> 951 </details> 952 </div> 953 </div> 954</section> 955 956<!-- -- ALERT TYPES -------------------------------------------------- --> 957<section class="alert-types-strip" data-reveal> 958 <div class="wrap"> 959 <p class="alert-types-label">Explore alert types</p> 960 <div class="alert-types-links"> 961 <a href="/alerts">Live Alert Map</a> 962 <a href="/tornado-alerts">Tornado Alerts</a> 963 <a href="/flood-alerts">River Flood Alerts</a> 964 <a href="/weather-alerts-app">Weather Alerts by City</a> 965 <a href="/earthquake-alerts">Earthquake Alerts</a> 966 <a href="/air-quality-alerts">Air Quality Alerts</a> 967 </div> 968 </div> 969</section> 970 971<!-- -- POPULAR CITIES ------------------------------------------------ --> 972<section class="alert-types-strip" data-reveal> 973 <div class="wrap"> 974 <p class="alert-types-label">Popular city weather pages</p> 975 <div class="alert-types-links"> 976 <a href="/weather/new-york/county/new-york">New York, NY</a> 977 <a href="/weather/california/county/los-angeles">Los Angeles, CA</a> 978 <a href="/weather/illinois/county/cook">Chicago, IL</a> 979 <a href="/weather/texas/county/fort-bend">Houston, TX</a> 980 <a href="/weather/arizona/county/maricopa">Phoenix, AZ</a> 981 <a href="/weather/pennsylvania/county/delaware">Philadelphia, PA</a> 982 <a href="/weather/texas/county/bexar">San Antonio, TX</a> 983 <a href="/weather/california/county/san-diego">San Diego, CA</a> 984 <a href="/weather/texas/county/collin">Dallas, TX</a> 985 <a href="/weather/florida/county/miami-dade">Miami, FL</a> 986 <a href="/weather/georgia/county/dekalb">Atlanta, GA</a> 987 <a href="/weather/washington/county/king">Seattle, WA</a> 988 <a href="/weather/colorado/county/adams">Denver, CO</a> 989 <a href="/weather/massachusetts/county/suffolk">Boston, MA</a> 990 <a href="/weather/michigan/county/wayne">Detroit, MI</a> 991 <a href="/weather/louisiana/county/jefferson">New Orleans, LA</a> 992 <a href="/weather/nevada/county/clark">Las Vegas, NV</a> 993 </div> 994 </div> 995</section> 996 997<!-- -- FOOTER ------------------------------------------------------- --> 998<footer> 999 <div class="wrap"> 1000 <div class="footer-grid"> 1001 <div class="footer-brand"> 1002 <img src="favicon.png" alt="StormCast" loading="lazy" /> 1003 <p>Real-time severe weather alerts, river monitoring, and emergency scanner streams â anywhere in the United States. Built independently, available on Google Play.</p> 1004 </div> 1005 <div class="footer-col"> 1006 <h4>Product</h4> 1007 <a href="#features">Features</a> 1008 <a href="#architecture">Architecture</a> 1009 <a href="#install">Install</a> 1010 <a href="#faq">FAQ</a> 1011 <a href="/about">About</a> 1012 <a href="/blog/">Blog</a> 1013 <a href="/status">System Status</a> 1014 <a href="/contact">Contact & Support</a> 1015 <a href="/download-windows">Download for Windows</a> 1016 </div> 1017 <div class="footer-col"> 1018 <h4>Alert Types</h4> 1019 <a href="/alerts">Live Alert Map</a> 1020 <a href="/tornado-alerts">Tornado Alerts</a> 1021 <a href="/flood-alerts">Flood Alerts</a> 1022 <a href="/lightning-alerts">Lightning Alerts</a> 1023 <a href="/earthquake-alerts">Earthquake Alerts</a> 1024 <a href="/hurricane-tracker">Hurricane Tracker</a> 1025 <a href="/fire-weather-alerts">Fire Weather</a> 1026 <a href="/frost-alerts">Frost & Freeze</a> 1027 <a href="/air-quality-alerts">
1027Air Quality</a> 1028 <a href="/aurora-alerts">Aurora & Space Weather</a> 1029 <a href="/rain-nowcast">Rain Nowcast</a> 1030 <a href="/river-level-app">River Levels</a> 1031 <a href="/weather-alerts-app">Weather Alerts by City</a> 1032 <a href="/scanner-radio">Scanner Radio</a> 1033 <a href="/neighborhood-reports">Neighborhood Reports</a> 1034 <a href="/weather-widget">Weather Widget</a> 1035 1036 </div> 1037 <div class="footer-col"> 1038 <h4>River Gauges</h4> 1039 <a href="/river/texas/">Texas</a> 1040 <a href="/river/florida/">Florida</a> 1041 <a href="/river/north-carolina/">North Carolina</a> 1042 <a href="/river/virginia/">Virginia</a> 1043 <a href="/river/georgia/">Georgia</a> 1044 <a href="/river/pennsylvania/">Pennsylvania</a> 1045 <a href="/river/ohio/">Ohio</a> 1046 <a href="/river/missouri/">Missouri</a> 1047 <a href="/river-level-app">All States â</a> 1048 </div> 1049 <div class="footer-col"> 1050 <h4>Weather Alerts</h4> 1051 <a href="/weather/texas/">Texas</a> 1052 <a href="/weather/california/">California</a> 1053 <a href="/weather/pennsylvania/">Pennsylvania</a> 1054 <a href="/weather/new-york/">New York</a> 1055 <a href="/weather/virginia/">Virginia</a> 1056 <a href="/weather/florida/">Florida</a> 1057 <a href="/weather/ohio/">Ohio</a> 1058 <a href="/weather/illinois/">Illinois</a> 1059 <a href="/weather-alerts-app">All States â</a> 1060 </div> 1061 <div class="footer-col"> 1062 <h4>Data Sources</h4> 1063 <a href="https://www.weather.gov" target="_blank">National Weather Service</a> 1064 <a href="https://waterdata.usgs.gov" target="_blank">USGS Water Resources</a> 1065 <a href="https://www.nhc.noaa.gov" target="_blank">National Hurricane Center</a> 1066 <a href="https://www.airnow.gov" target="_blank">AirNow AQI</a> 1067 </div> 1068 <div class="footer-col"> 1069 <h4>Legal</h4> 1070 <a href="/privacy">Privacy Policy</a> 1071 <a href="/terms">Terms of Service</a> 1072 <a href="/delete-account">Delete Account</a> 1073 <a href="#" onclick="window.googlefc&&window.googlefc.showRevocationMessage();return false;">Privacy Choices</a> 1074 </div> 1075 </div> 1076 <div class="footer-bottom"> 1077 <span>© 2026 StormCast · Android 8.0+ · iOS coming soon</span> 1078 <span class="coord">NWS · USGS · NHC · AIRNOW â US nationwide coverage</span> 1079 </div> 1080 </div> 1081</footer> 1082 1083<!-- -- MOBILE MENU ---------------------------------------------------- --> 1084<div class="mobile-menu" id="mobile-menu" role="dialog" aria-modal="true" aria-label="Navigation"> 1085 <div class="mobile-menu-backdrop" id="mobile-menu-backdrop"></div> 1086 <div class="mobile-menu-panel"> 1087 <button class="mobile-menu-close" id="mobile-menu-close" aria-label="Close menu">✕</button> 1088 <a href="#features" class="menu-link">Features</a> 1089 <a href="/river-level-app" class="menu-link">River Gauges</a> 1090 <a href="/weather-alerts-app" class="menu-link">Weather Alerts</a> 1091 <a href="/scanner-radio" class="menu-link">Scanner Radio</a> 1092 <a href="#architecture" class="menu-link">Architecture</a> 1093 <a href="#install" class="menu-link">Install</a> 1094 <a href="#faq" class="menu-link">FAQ</a> 1095 <a href="/about" class="menu-link">About</a> 1096 <a href="/blog/" class="menu-link">Blog</a> 1097 <a href="/contact" class="menu-link">Contact & Support</a> 1098 <a href="https://play.google.com/store/apps/details?id=app.stormcast.android" class="menu-cta">Get the App</a> 1099 </div> 1100</div> 1101
1102<script> 1103(function() { 1104 var btn = document.getElementById('nav-hamburger'); 1105 var menu = document.getElementById('mobile-menu'); 1106 var close = document.getElementById('mobile-menu-close'); 1107 var bkdrop = document.getElementById('mobile-menu-backdrop'); 1108 1109 function openMenu() { 1110 menu.classList.add('open'); 1111 btn.classList.add('open'); 1112 btn.setAttribute('aria-expanded', 'true'); 1113 document.body.style.overflow = 'hidden'; 1114 } 1115 function closeMenu() { 1116 menu.classList.remove('open'); 1117 btn.classList.remove('open'); 1118 btn.setAttribute('aria-expanded', 'false'); 1119 document.body.style.overflow = ''; 1120 } 1121 1122 btn.addEventListener('click', openMenu); 1123 close.addEventListener('click', closeMenu); 1124 bkdrop.addEventListener('click', closeMenu); 1125 1126 // close on any menu link tap 1127 menu.querySelectorAll('a').forEach(function(a) { 1128 a.addEventListener('click', closeMenu); 1129 }); 1130 1131 // close on Escape 1132 document.addEventListener('keydown', function(e) { 1133 if (e.key === 'Escape') closeMenu(); 1134 }); 1135})(); 1136</script>
1136 1137
1138<script> 1139// iOS waitlist â POST /api/register-email (Netlify function, upserts to Supabase) 1140(function() { 1141 var form = document.getElementById('ios-wait-form'); 1142 if (!form) return; 1143 1144 var input = document.getElementById('ios-wait-email'); 1145 var btn = document.getElementById('ios-wait-btn'); 1146 var msg = document.getElementById('ios-wait-msg'); 1147 var sent = false; 1148 1149 function say(text, kind) { 1150 msg.textContent = text; 1151 msg.className = 'ios-wait-msg' + (kind ? ' ' + kind : ''); 1152 } 1153 1154 form.addEventListener('submit', function(e) { 1155 e.preventDefault(); 1156 if (sent) return; 1157 1158 var email = (input.value || '').trim(); 1159 // Same shape the server validates against â fail fast without a round trip 1160 if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { 1161 say('Please enter a valid email address.', 'err'); 1162 input.focus(); 1163 return; 1164 } 1165 1166 btn.disabled = true; 1167 btn.textContent = 'Sendingâ¦'; 1168 say(''); 1169 1170 fetch('/api/register-email', { 1171 method: 'POST', 1172 headers: { 'Content-Type': 'application/json' }, 1173 body: JSON.stringify({ 1174 email: email, 1175 source: 'landing', 1176 tags: ['ios-waitlist'], 1177 website: form.website ? form.website.value : '' // honeypot 1178 }) 1179 }) 1180 // Parse defensively â a down function or CDN error page returns HTML, and 1181 // letting r.json() throw would surface a raw "Unexpected token '<'" to the user. 1182 .then(function(r) { 1183 return r.text().then(function(t) { 1184 var j = null; 1185 try { j = JSON.parse(t); } catch (_) { /* not JSON â handled below */ } 1186 return { ok: r.ok, body: j }; 1187 }); 1188 }) 1189 .then(function(res) { 1190 if (!res.ok || !res.body) { 1191 throw new Error((res.body && res.body.error) || 'REQUEST_FAILED'); 1192 } 1193 sent = true; 1194 btn.textContent = 'Added'; 1195 input.disabled = true; 1196 say(res.body.deduped 1197 ? "You're already on the list â we'll be in touch if iOS ships." 1198 : "You're on the list. We'll email you if an iOS version launches.", 'ok'); 1199 }) 1200 .catch(function(err) { 1201 btn.disabled = false; 1202 btn.textContent = 'Notify me'; 1203 say(err.message === 'Invalid email address' 1204 ? 'Please enter a valid email address.' 1205 : "Couldn't save that just now â please try again in a moment.", 'err'); 1206 }); 1207 }); 1208})(); 1209</script>
1209 1210
1211<script src="ambient.js"></script>
vendor: 1 bytes, line 1211
1211
1212<script src="tweaks.js"></script>
vendor: 1 bytes, line 1212
1212
1213<script src="hero-widget/hero-widget.js" defer></script>
vendor: 1 bytes, line 1213
1213
1214<script src="live-hero.js" defer></script>
vendor: 1 bytes, line 1214
1214
1215<script src="city-search.js" defer></script>
1215 1216
1217<script type="application/ld+json"> 1218{ 1219 "@context": "https://schema.org", 1220 "@type": "FAQPage", 1221 "mainEntity": [ 1222 { 1223 "@type": "Question", 1224 "name": "Do I need a Google account to install StormCast?", 1225 "acceptedAnswer": { 1226 "@type": "Answer", 1227 "text": "On Android, yes â StormCast is distributed through Google Play, so a Google account is required and updates happen automatically through the Play Store. The Windows app downloads directly from stormcastapp.com and updates itself." 1228 } 1229 }, 1230 { 1231 "@type": "Question", 1232 "name": "Will StormCast drain my battery?", 1233 "acceptedAnswer": { 1234 "@type": "Answer", 1235 "text": "StormCast is designed to be battery-friendly. All polling runs on our backend â severe weather alerts are checked as often as every 30 seconds, other feeds every few minutes â and your device only wakes when there's a payload to deliver. No background polling, no GPS thrash, no constant network chatter. For best results, set StormCast to Unrestricted battery in Android Settings so Android doesn't delay incoming alerts." 1236 } 1237 }, 1238 { 1239 "@type": "Question", 1240 "name": "Will I get alerts even when my phone is locked or the app is closed?", 1241 "acceptedAnswer": { 1242 "@type": "Answer", 1243 "text": "Yes. StormCast uses Google's Firebase push notification service to deliver alerts in the background. As long as your phone has an internet connection, you'll receive severe weather alerts, river flood stage notifications, and emergency feed updates even when the app is completely closed." 1244 } 1245 }, 1246 { 1247 "@type": "Question", 1248 "name": "How is StormCast different from the built-in weather app?", 1249 "acceptedAnswer": { 1250 "@type": "Answer", 1251 "text": "Most built-in weather apps only show forecasts. StormCast adds real-time NWS severe weather alerts with push notifications, USGS river gauge monitoring with flood stage warnings, your own emergency radio scanner streams, hurricane tracking, fire weather alerts, and custom local emergency alert feeds â all in one app." 1252 } 1253 }, 1254 { 1255 "@type": "Question", 1256 "name": "How accurate are the weather alerts and river gauge readings?", 1257 "acceptedAnswer": { 1258 "@type": "Answer", 1259 "text": "Alert data comes directly from the National Weather Service and river readings come from USGS Water Resources â both official federal sources. StormCast does not modify or interpret this data; it delivers it as quickly as possible. StormCast is a supplemental tool and should never be relied on for life-safety decisions." 1260 } 1261 }, 1262 { 1263 "@type": "Question", 1264 "name": "Is StormCast free? Are there ads or subscriptions?", 1265 "acceptedAnswer": { 1266 "@type": "Answer", 1267 "text": "StormCast is free to download. The app may include ads and optional subscription features. Core severe-weather and emergency alerts will always remain accessible." 1268 } 1269 }, 1270 { 1271 "@type": "Question", 1272 "name": "Is there an iOS version?", 1273 "acceptedAnswer": { 1274 "@type": "Answer", 1275 "text": "Not yet. StormCast launched on Android first. An iOS version is on the roadmap." 1276 } 1277 }, 1278 { 1279 "@type": "Question", 1280 "name": "What Android version do I need?", 1281 "acceptedAnswer": { 1282 "@type": "Answer", 1283 "text": "StormCast requires Android 8.0 (Oreo) or newer. If your phone was made in the last 6–7 years it will almost certainly be compatible. The app is tested primarily on Android 12–16." 1284 } 1285 } 1286 ] 1287} 1288</script>
vendor: 1 bytes, line 1288
1288
1289<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"14acf6e7358d4aafa68ae61476110de1","r":1,"spa":2}' crossorigin="anonymous"></script>
1289 1290</body> 1291</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.