1<!-- Copyright © 2026 Teddy Mutterperl / SoilIQ, LLC. All rights reserved. --> 2<!DOCTYPE html> 3<html lang="en"> 4<head> 5 <meta charset="UTF-8" /> 6 <link rel="icon" type="image/png" href="/favicon.png" sizes="1024x1024" /> 7 <link rel="apple-touch-icon" href="/apple-touch-icon.png" /> 8 <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" /> 9 <!-- Google tag (gtag.js) -->
vendor: 66 bytes, lines 9-10
9 10 <script async src="https://www.googletagmanager.com/gtag/js?id=
10G-PL0VWV5M5W
vendor: 14 bytes, lines 10-11
10"></script> 11
11<script> 12
vendor: 139 bytes, lines 12-15
12window.dataLayer = window.dataLayer || []; 13 function gtag(){dataLayer.push(arguments);} 14 gtag('js', new Date()); 15 gtag('config', '
15G-PL0VWV5M5W
vendor: 6 bytes, lines 15-16
15'); 16
16</script>
16 17 <title>The Field Guide â Soil Science & Planting Intelligence | SoilIQ</title> 18 <meta name="description" content="Soil temperature guides, planting timing science, and growing know-how for farmers, homesteaders, and serious gardeners. Backed by real data, not calendar averages." /> 19 <meta property="og:title" content="The Field Guide â Soil Science & Planting Intelligence" /> 20 <meta property="og:description" content="Planting timing science and soil temperature guides for growers who want certainty, not guesses." /> 21 <meta property="og:type" content="website" /> 22 <meta property="og:url" content="https://soiliq.app/blog/" /> 23 <meta property="og:site_name" content="SoilIQ" /> 24 <meta property="og:image" content="https://soiliq.app/og-image.png?v=2" /> 25 <meta property="og:image:width" content="1200" /> 26 <meta property="og:image:height" content="630" /> 27 <meta property="og:image:alt" content="The Field Guide â Soil Science & Planting Intelligence | SoilIQ" /> 28 <meta name="twitter:card" content="summary_large_image" /> 29 <meta name="twitter:title" content="The Field Guide â Soil Science & Planting Intelligence" /> 30 <meta name="twitter:description" content="Planting timing science and soil temperature guides for growers who want certainty, not guesses." /> 31 <meta name="twitter:image" content="https://soiliq.app/og-image.png?v=2" /> 32 <link rel="canonical" href="https://soiliq.app/blog/" /> <link rel="preconnect" href="https://fonts.googleapis.com" /> 33 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 34 <link href="https://fonts.googleapis.com/css2?family=Syne:wght@400;600;700;800&family=DM+Sans:wght@300;400;500;600&display=swap" rel="stylesheet" /> 35 <style> 36 *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } 37 a { text-decoration: none; } 38 39 :root { 40 --bg: #030c07; 41 --bg2: #06100a; 42 --bg3: #0a1a0f; 43 --green: #6ecf8a; 44 --green-dim: rgba(110,207,138,.55); 45 --green-faint: rgba(110,207,138,.08); 46 --border: rgba(80,160,100,.18); 47 --border-md: rgba(80,160,100,.3); 48 --text: #e8f5ec; 49 --text-mid: rgba(200,230,210,.7); 50 --text-dim: rgba(200,230,210,.4); 51 --orange: #f5a623; 52 } 53 54 html { scroll-behavior: smooth; } 55 section[id] { scroll-margin-top: 80px; } 56 57 body { 58 background: var(--bg); 59 color: var(--text); 60 font-family: 'DM Sans', sans-serif; 61 -webkit-font-smoothing: antialiased; 62 overflow-x: hidden; 63 } 64 65 /* NAV */ 66 nav { 67 position: fixed; top: 0; left: 0; right: 0; z-index: 100; 68 display: flex; align-items: center; justify-content: space-between; 69 padding: 0 40px; height: 64px; 70 background: rgba(3,12,7,.85); 71 backdrop-filter: blur(20px); 72 border-bottom: 1px solid var(--border); 73 } 74 .nav-logo { 75 display: flex; align-items: center; gap: 10px; 76 font-family: 'Syne', sans-serif; font-weight: 800; font-size: 20px; 77 color: var(--text); text-decoration: none; 78 } 79 .nav-logo-icon { 80 width: 32px; height: 32px; border-radius: 8px; 81 background: linear-gradient(135deg,#2a7a45,#1a4a2e); 82 border: 1px solid rgba(110,207,138,.3); 83 display: flex; align-items: center; justify-content: center; 84 font-size: 18px; 85 } 86 .nav-links { display: flex; align-items: center; gap: 32px; } 87 .nav-links a { 88 font-size: 14px; font-weight: 500; color: var(--text-mid); 89 text-decoration: none; transition: color .2s; 90 } 91 .nav-links a:hover, .nav-links a.active { color: var(--green); } 92 .btn-nav { 93 background: var(--green); color: #030c07; 94 font-family: 'Syne', sans-serif; font-weight: 700; font-size: 13px; 95 padding: 8px 18px; border-radius: 20px; border: none; 96 cursor: pointer; text-decoration: none; transition: opacity .2s; 97 display: inline-flex; align-items: center; gap: 6px; 98 } 99 .btn-nav:hover { opacity: .88; } 100 .nav-check-soil{display:flex !important;align-items:center;gap:6px;color:var(--green) !important;font-weight:600 !important} 101 .nav-check-dot{width:7px;height:7px;border-radius:50%;background:var(--green);flex-shrink:0;animation:stNavPulse 2.2s ease-in-out infinite}
102 @keyframes stNavPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.3;transform:scale(.72)}} 103 104 /* HERO */ 105 .blog-hero { 106 padding: 140px 40px 32px; 107 text-align: center; 108 position: relative; overflow: hidden; 109 } 110 .blog-hero-bg { 111 position: absolute; inset: 0; pointer-events: none; 112 background: radial-gradient(ellipse 60% 50% at 50% 30%, rgba(42,122,69,.15) 0%, transparent 70%); 113 } 114 .blog-hero-inner { max-width: 760px; margin: 0 auto; position: relative; z-index: 1; } 115 .blog-eyebrow { 116 display: inline-flex; align-items: center; gap: 8px; 117 background: rgba(110,207,138,.08); border: 1px solid rgba(110,207,138,.2); 118 border-radius: 20px; padding: 5px 14px; margin-bottom: 24px; 119 font-size: 12px; font-weight: 600; color: var(--green); 120 letter-spacing: .8px; text-transform: uppercase; 121 } 122 .blog-hero h1 { 123 font-family: 'Syne', sans-serif; font-weight: 800; 124 font-size: clamp(36px, 5vw, 58px); line-height: 1.08; 125 letter-spacing: -1px; color: var(--text); margin-bottom: 20px; 126 } 127 .blog-hero h1 span { color: var(--green); } 128 .blog-hero p { 129 font-size: 18px; line-height: 1.65; color: var(--text-mid); 130 } 131 132 /* ARTICLE GRID */ 133 .blog-main { 134 max-width: 1100px; margin: 0 auto; 135 padding: 28px 40px 100px; 136 } 137 .blog-section-label { 138 font-size: 11px; font-weight: 600; color: var(--green); 139 letter-spacing: 1.5px; text-transform: uppercase; 140 margin-bottom: 28px; padding-bottom: 12px; 141 border-bottom: 1px solid var(--border); 142 } 143 .blog-grid { 144 display: grid; grid-template-columns: repeat(2, 1fr); 145 gap: 24px; margin-bottom: 80px; 146 } 147 .blog-card { 148 background: var(--bg2); border: 1px solid var(--border); 149 border-radius: 18px; padding: 32px; 150 display: flex; flex-direction: column; gap: 14px; 151 text-decoration: none; 152 transition: border-color .2s, transform .2s; 153 } 154 .blog-card:hover { border-color: var(--green-dim); transform: translateY(-2px); } 155 .blog-card.featured { 156 grid-column: 1 / -1; 157 display: grid; grid-template-columns: 1fr 1fr; 158 gap: 40px; padding: 40px; 159 background: var(--bg3); 160 } 161 .blog-card.featured .blog-card-body { 162 display: flex; flex-direction: column; justify-content: center; gap: 14px; 163 } 164 .blog-card.featured .blog-card-visual { 165 background: linear-gradient(135deg, rgba(42,122,69,.2), rgba(110,207,138,.06)); 166 border: 1px solid var(--border); border-radius: 12px; 167 display: flex; align-items: center; justify-content: center; 168 min-height: 180px; font-size: 48px; 169 } 170 .blog-tag { 171 display: inline-flex; align-items: center; 172 background: rgba(110,207,138,.08); border: 1px solid rgba(110,207,138,.18); 173 border-radius: 20px; padding: 3px 10px; 174 font-size: 11px; font-weight: 600; color: var(--green); 175 letter-spacing: .8px; text-transform: uppercase; 176 width: fit-content; 177 } 178 .trending-badge { 179 display: inline-flex; align-items: center; gap: 4px; 180 background: rgba(245,166,35,.1); border: 1px solid rgba(245,166,35,.3); 181 border-radius: 20px; padding: 3px 10px; 182 font-size: 11px; font-weight: 600; color: var(--orange); 183 letter-spacing: .6px; width: fit-content; 184 } 185 .blog-card-title { 186 font-family: 'Syne', sans-serif; font-weight: 700; 187 font-size: 20px; line-height: 1.25; color: var(--text); 188 letter-spacing: -.3px; 189 } 190 .blog-card.featured .blog-card-title { 191 font-size: 26px; 192 } 193 .blog-card-excerpt { 194 font-size: 14px; line-height: 1.65; color: var(--text-mid); 195 flex: 1; 196 } 197 .blog-card-meta { 198 display: flex; align-items: center; justify-content: space-between; 199 font-size: 12px; color: var(--text-dim); 200 padding-top: 14px; border-top: 1px solid var(--border); 201 } 202 .blog-card-read { 203 font-size: 13px; font-weight: 600; color: var(--green); 204 display: flex; align-items: center; gap: 4px; 205 } 206 .read-badge { 207 font-size: 11px; font-weight: 600; color: var(--green); 208 opacity: .55; letter-spacing: .3px; 209 } 210 /* MOST READ STRIP */ 211 .most-read-grid { 212 display: grid; grid-template-columns: repeat(3, 1fr); 213 gap: 16px; margin-bottom: 52px; 214 } 215 .most-read-card { 216 background: var(--bg2); border: 1px solid var(--border); 217 border-radius: 14px; padding: 22px 20px; 218 display: flex; flex-direction: column; gap: 8px; 219 text-decoration: none; 220 transition: border-color .2s, transform .2s; 221 } 222 .most-read-card:hover { border-color: var(--green-dim); transform: translateY(-2px); } 223 .most-read-rank { 224 font-size: 10px; font-weight: 700; color: var(--orange); 225 letter-spacing: 1px; text-transform: uppercase; 226 } 227 .most-read-emoji { font-size: 28px; line-height: 1; margin: 4px 0; } 228 .most-read-title { 229 font-family: 'Syne', sans-serif; font-weight: 700; 230 font-size: 14px; line-height: 1.35; color: var(--text); 231 flex: 1; 232 } 233 .most-read-meta { font-size: 11px; color: var(--text-dim); margin-top: 4px; } 234 /* FILTER BAR */ 235 .filter-bar { 236 display: flex; align-items: center; gap: 8px; 237 flex-wrap: wrap; margin-bottom: 12px; 238 } 239 .filter-btn { 240 display: inline-flex; align-items: center; gap: 5px; 241 background: var(--bg2); border: 1px solid var(--border); 242 border-radius: 20px; padding: 7px 16px; 243 font-size: 12px; font-weight: 600; color: var(--text-dim); 244 cursor: pointer; transition: border-color .2s, color .2s, background .2s; 245 white-space: nowrap; font-family: inherit; line-height: 1; 246 } 247 .filter-btn:hover { border-color: var(--green-dim); color: var(--text); } 248 .filter-btn.active { 249 background: rgba(110,207,138,.1); border-color: var(--green); color: var(--green); 250 } 251 .filter-count { font-size: 10px; font-weight: 700; opacity: .55; } 252 #section-label-wrap { display: flex; align-items: baseline; gap: 12px; } 253 #article-count { font-size: 11px; color: var(--text-dim); font-weight: 500; } 254 @media (max-width: 600px) { 255 .filter-bar { gap: 6px; } 256 .filter-btn { font-size: 11px; padding: 6px 12px; } 257 } 258 @media (max-width: 900px) { 259 .most-read-grid { grid-template-columns: 1fr; } 260 } 261 262 /* CTA STRIP */ 263 .blog-cta-strip { 264 background: var(--bg3); border: 1px solid var(--border); 265 border-radius: 20px; padding: 48px 40px; 266 display: flex; align-items: center; justify-content: space-between; 267 gap: 32px; flex-wrap: wrap; 268 } 269 .blog-cta-strip h3 { 270 font-family: 'Syne', sans-serif; font-weight: 800; 271 font-size: 24px; color: var(--text); margin-bottom: 8px; 272 } 273 .blog-cta-strip p { font-size: 15px; color: var(--text-mid); } 274 .btn-cta { 275 display: inline-flex; align-items: center; gap: 10px; 276 background: var(--green); color: #030c07; 277 font-family: 'Syne', sans-serif; font-weight: 700; font-size: 15px; 278 padding: 14px 26px; border-radius: 14px; text-decoration: none; 279 white-space: nowrap; transition: opacity .2s, transform .15s; 280 } 281 .btn-cta:hover { opacity: .88; transform: scale(1.02); } 282 283 /* FOOTER */ 284 footer { 285 background: var(--bg2); border-top: 1px solid var(--border); 286 padding: 48px 40px; text-align: center; 287 } 288 .footer-logo { 289 font-family: 'Syne', sans-serif; font-weight: 800; font-size: 18px; 290 color: var(--text); text-decoration: none; 291 display: inline-flex; align-items: center; gap: 8px; 292 margin-bottom: 20px; 293 } 294 .footer-links-row { 295 display: flex; justify-content: center; gap: 28px; flex-wrap: wrap; 296 margin-bottom: 24px; 297 } 298 .footer-links-row a { 299 font-size: 13px; color: var(--text-dim); text-decoration: none; 300 transition: color .2s; 301 } 302 .footer-links-row a:hover { color: var(--green); } 303 .footer-copy { font-size: 12px; color: var(--text-dim); } 304 305 /* RESPONSIVE */ 306 @media (max-width: 900px) { 307 nav { padding: 0 20px; } 308 .nav-links { display: none; } 309 .btn-nav { display: none; } 310 .blog-hero { padding: 120px 20px 60px; } 311 .blog-main { padding: 40px 20px 80px; } 312 .blog-grid { grid-template-columns: 1fr; } 313 .blog-card.featured { grid-column: auto; grid-template-columns: 1fr; } 314 .blog-card.featured .blog-card-visual { display: none; } 315 .blog-cta-strip { flex-direction: column; text-align: center; } 316 } 317 @media (max-width: 600px) { 318 footer { padding: 36px 20px; } 319 } 320 /* âââ HAMBURGER NAV âââ */ 321 .nav-right{display:flex;align-items:center;gap:10px;flex-shrink:0} 322 .nav-hamburger{display:none;flex-direction:column;justify-content:center;align-items:center;gap:5.5px;width:44px;height:44px;background:none;border:none;border-radius:10px;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .2s;flex-shrink:0} 323 .nav-hamburger:active{background:rgba(255,255,255,.07)} 324 .nhb{display:block;width:22px;height:2px;background:#e8f5ec;border-radius:2px;transform-origin:center;transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .22s,width .3s} 325 .nav-mobile-open .nhb:nth-child(1){transform:translateY(7px) rotate(45deg)} 326 .nav-mobile-open .nhb:nth-child(2){opacity:0;width:0} 327 .nav-mobile-open .nhb:nth-child(3){transform:translateY(-7px) rotate(-45deg)} 328 .nav-mobile-menu{position:fixed;top:64px;left:0;right:0;bottom:0;z-index:999;background:rgba(3,10,5,.97);backdrop-filter:blur(28px);-webkit-backdrop-filter:blur(28px);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:12px 32px 40px;overflow-y:auto;max-height:calc(100dvh - 64px);opacity:0;pointer-events:none;transform:translateY(-10px);transition:opacity .28s cubic-bezier(.4,0,.2,1),transform .28s cubic-bezier(.4,0,.2,1)} 329 nav.nav-mobile-open+.nav-mobile-menu{opacity:1;pointer-events:auto;transform:translateY(0)} 330 .nav-mobile-menu a{font-family:'Syne',sans-serif;font-size:18px;font-weight:700;color:rgba(255,255,255,.82);text-decoration:none;padding:11px 0;width:100%;text-align:center;border-bottom:1px solid rgba(255,255,255,.06);transition:color .18s} 331 .nav-mobile-menu a:last-of-type{border-bottom:none} 332 .nav-mobile-menu a:hover,.nav-mobile-menu a:active{color:var(--green)} 333 .nav-mobile-menu .nav-check-soil{color:var(--green)} 334 .btn-nav-mobile{display:inline-flex !important;align-items:center;gap:8px;background:var(--green);color:#030c07 !important;font-family:'Syne',sans-serif;font-weight:700;font-size:15px !important;padding:13px 32px;border-radius:28px;margin-top:20px;width:auto !important;
334border-bottom:none !important;transition:opacity .2s !important} 335 @media(max-width:900px){.nav-hamburger{display:flex}} 336 337 /* INTENT CARDS */ 338 .intent-section { margin-bottom: 60px; } 339 .intent-grid { 340 display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; 341 } 342 .intent-card { 343 background: var(--bg2); border: 1px solid var(--border); 344 border-radius: 18px; padding: 26px 20px 22px; 345 display: flex; flex-direction: column; gap: 10px; 346 text-decoration: none; 347 transition: border-color .2s, background .2s, transform .15s; 348 } 349 .intent-card:hover { border-color: var(--green-dim); background: var(--bg3); transform: translateY(-2px); } 350 .intent-card-emoji { font-size: 30px; line-height: 1; } 351 .intent-card-title { 352 font-family: 'Syne', sans-serif; font-weight: 700; font-size: 15px; 353 color: var(--text); line-height: 1.2; 354 } 355 .intent-card-desc { font-size: 12px; line-height: 1.55; color: var(--text-dim); flex: 1; } 356 .intent-card-link { font-size: 12px; font-weight: 600; color: var(--green); margin-top: 4px; } 357 @media (max-width: 1000px) { .intent-grid { grid-template-columns: repeat(3, 1fr); } } 358 @media (max-width: 680px) { .intent-grid { grid-template-columns: repeat(2, 1fr); } } 359 @media (max-width: 420px) { .intent-grid { grid-template-columns: 1fr; } } 360 361 /* CATEGORY TILES */ 362 .cat-tiles { margin-bottom: 52px; } 363 .cat-tiles-grid { 364 display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; 365 } 366 .cat-tile { 367 background: var(--bg2); border: 1px solid var(--border); 368 border-radius: 16px; padding: 22px 18px; 369 display: flex; align-items: flex-start; gap: 14px; 370 cursor: pointer; text-align: left; font-family: inherit; 371 transition: border-color .2s, background .2s, transform .15s; 372 width: 100%; 373 } 374 .cat-tile:hover { border-color: var(--green-dim); background: var(--bg3); transform: translateY(-2px); } 375 .cat-tile.active { border-color: var(--green); background: rgba(110,207,138,.06); } 376 .cat-tile-emoji { font-size: 26px; line-height: 1; flex-shrink: 0; margin-top: 2px; } 377 .cat-tile-body { flex: 1; min-width: 0; } 378 .cat-tile-title { font-family: 'Syne', sans-serif; font-weight: 700; font-size: 14px; color: var(--text); margin-bottom: 5px; } 379 .cat-tile-desc { font-size: 12px; line-height: 1.5; color: var(--text-dim); } 380 .cat-tile-arrow { font-size: 14px; color: var(--green); opacity: .55; flex-shrink: 0; align-self: center; } 381 @media (max-width: 900px) { .cat-tiles-grid { grid-template-columns: repeat(2, 1fr); } } 382 @media (max-width: 500px) { .cat-tiles-grid { grid-template-columns: 1fr; } } 383 .tm { font-family: 'DM Sans', sans-serif; font-size: 0.62em; vertical-align: super; line-height: 0; font-weight: 700; letter-spacing: 0; text-decoration: none; display: inline; } 384 @supports (padding: max(0px)) { 385 nav { padding-left: max(40px, env(safe-area-inset-left)); padding-right: max(40px, env(safe-area-inset-right)); } 386 @media (max-width: 900px) { nav { padding-left: max(20px, env(safe-area-inset-left)); padding-right: max(20px, env(safe-area-inset-right)); } } 387 .nav-mobile-menu { padding-left: max(32px, env(safe-area-inset-left)); padding-right: max(32px, env(safe-area-inset-right)); padding-bottom: max(48px, env(safe-area-inset-bottom)); } 388 } 389</style> <!-- Meta Pixel Code --> 390
390<script>
vendor: 435 bytes, lines 390-399
390 391 !function(f,b,e,v,n,t,s) 392 {if(f.fbq)return;n=f.fbq=function(){n.callMethod? 393 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 394 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 395 n.queue=[];t=b.createElement(e);t.async=!0; 396 t.src=v;s=b.getElementsByTagName(e)[0]; 397 s.parentNode.insertBefore(t,s)}(window, document,'script', 398 'https://connect.facebook.net/en_US/fbevents.js'); 399 fbq('init', '
3991702389357561373
vendor: 38 bytes, lines 399-401
399'); 400 fbq('track', 'PageView'); 401
401document.addEventListener('click', function(e) { 402 var a = e.target.closest ? e.target.closest('a[href*="apps.apple.com"]') : null; 403 if (a) fbq('trackCustom', 'AppStoreClick', {page: location.pathname, label: (a.textContent||'').trim().slice(0, 60)}); 404 }); 405 </script>
405 406 <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1702389357561373&ev=PageView&noscript=1"/></noscript> 407 <!-- End Meta Pixel Code --> 408</head> 409<body> 410 411 <nav> 412 <a class="nav-logo" href="/"> 413 <div class="nav-logo-icon">ð±</div> 414 <span>Soil<span style="color:#007AFF;">IQ</span></span> 415 </a> 416 <div class="nav-links"> 417 <a href='/lawniq'>LawnIQ</a> 418 <a href="/#features">Features</a> 419 <a href="/blog/" class="active">Field Guide</a> 420 <a href="/partners">Partners</a> 421 <a href="/#pro">Pro</a> 422 <a href='/support'>Support</a> 423 </div> 424 <div class="nav-right"> 425 <a class="btn-nav" href="https://apps.apple.com/us/app/soiliq-soil-intelligence/id6761371888" target="_blank" rel="noopener" onclick="trackAppStoreClick('Download SoilIQ Free', 'blog_article_top')"> 426 <svg width="14" height="14" 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> 427 Download SoilIQ Free 428 </a> 429 <button class="nav-hamburger" aria-label="Open menu" aria-expanded="false"> 430 <span class="nhb"></span> 431 <span class="nhb"></span> 432 <span class="nhb"></span> 433 </button> 434 </div> 435 </nav> 436 <div class="nav-mobile-menu" role="dialog" aria-label="Navigation menu"> 437 <a href='/lawniq'>LawnIQ</a> 438 <a href="/#features">Features</a> 439 <a href="/blog/">Field Guide</a> 440 <a href="/partners">Partners</a> 441 <a href="/#pro">Pro</a> 442 <a href='/support'>Support</a> 443 <a class="btn-nav-mobile" href="https://apps.apple.com/us/app/soiliq-soil-intelligence/id6761371888" target="_blank" rel="noopener" onclick="trackAppStoreClick('Download SoilIQ Free', 'blog_article_top')">Download SoilIQ Free</a> 444 </div> 445 446 <div class="blog-hero"> 447 <div class="blog-hero-bg"></div> 448 <div class="blog-hero-inner"> 449 <div class="blog-eyebrow">ð The Field Guide</div> 450 <h1>Grow Smarter,<br /><span>Not Later</span></h1> 451 <p>Soil science, planting timing, and growing know-how â written for real growers, not agronomists. Every article is built around one principle: <strong>soil temperature trumps the calendar.</strong></p> 452 </div> 453 </div> 454 455 <main class="blog-main"> 456 457 <!-- INTENT CARDS â "What are you trying to time?" --> 458 <div class="intent-section"> 459 <div class="blog-section-label" style="margin-top:0">What are you trying to time?</div> 460 <div class="intent-grid"> 461 462 <a class='intent-card' href='/blog/fall-lawn-overseeding-soil-temperature'> 463 <div class="intent-card-emoji">ð±</div> 464 <div class="intent-card-title">Grass Seed & Overseeding</div> 465 <div class="intent-card-desc">Know when your lawn is ready before you waste another bag of seed.</div> 466 <div class="intent-card-link">Read the guide â</div> 467 </a> 468 469 <a class='intent-card' href='/blog/cool-season-lawn-care-soil-temperature'> 470 <div class="intent-card-emoji">â ï¸</div> 471 <div class="intent-card-title">Pre-Emergent & Crabgrass</div> 472 <div class="intent-card-desc">Track soil temperature before the crabgrass window closes on you.</div> 473 <div class="intent-card-link">Read the guide â</div> 474 </a> 475 476 <a class='intent-card' href='/blog/when-to-plant-tomatoes-soil-temperature'> 477 <div class="intent-card-emoji">ð </div> 478 <div class="intent-card-title">Tomatoes & Warm-Season Crops</div> 479 <div class="intent-card-desc">Don't transplant just because the air feels warm.</div> 480 <div class="intent-card-link">Read the guide â</div> 481 </a> 482 483 <a class='intent-card' href='/blog/best-soil-temperature-app'> 484 <div class="intent-card-emoji">ð¥¶</div> 485 <div class="intent-card-title">Frost Risk</div> 486 <div class="intent-card-desc">Protect new plants before one cold night sets them back weeks.</div> 487 <div class="intent-card-link">Read the guide â</div> 488 </a> 489 490 <a class='intent-card' href='/blog/soiliq-app-soil-temperature'> 491 <div class="intent-card-emoji">ð§</div> 492 <div class="intent-card-title">Watering & Soil Moisture</div> 493 <div class="intent-card-desc">Water based on real soil conditions â not a schedule or guesswork.</div> 494 <div class="intent-card-link">Read the guide â</div> 495 </a> 496 497 </div> 498 </div> 499 500 <!-- CATEGORY TILES --> 501 <div class="cat-tiles"> 502 <div class="blog-section-label" style="margin-top:0">Browse by Category</div> 503 <div class="cat-tiles-grid"> 504 505 <button class="cat-tile" data-cat="Lawn Care"> 506 <div class="cat-tile-emoji">ð¿</div> 507 <div class="cat-tile-body"> 508 <div class="cat-tile-title">Lawn Care</div> 509 <div class="cat-tile-desc">Bermuda, fescue, overseeding & pre-emergent timing</div> 510 </div> 511 <div class="cat-tile-arrow">â</div> 512 </button> 513 514 <button class="cat-tile" data-cat="Planting Guides"> 515 <div class="cat-tile-emoji">ð </div> 516 <div class="cat-tile-body"> 517 <div class="cat-tile-title">Vegetable Planting</div> 518 <div class="cat-tile-desc">Tomatoes, peppers, corn & every crop's ideal window</div> 519 </div> 520 <div class="cat-tile-arrow">â</div> 521 </button> 522 523 <button class="cat-tile" data-cat="Reference"> 524 <div class="cat-tile-emoji">ð</div> 525 <div class="cat-tile-body"> 526 <div class="cat-tile-title">Soil Temperature Charts</div> 527 <div class="cat-tile-desc">Germination tables for every crop, grass & herb</div> 528 </div> 529 <div class="cat-tile-arrow">â</div> 530 </button> 531 532 <button class="cat-tile" data-cat="grass-seed"> 533 <div class="cat-tile-emoji">ðºï¸</div> 534 <div class="cat-tile-body"> 535 <div class="cat-tile-title">Regional Grass Seed Guides</div> 536 <div class="cat-tile-desc">NJ, Texas, Florida & Georgia â state-specific timing</div> 537 </div> 538 <div class="cat-tile-arrow">â</div> 539 </button> 540 541 <button class="cat-tile" data-cat="crop-guides"> 542 <div class="cat-tile-emoji">ð±</div> 543 <div class="cat-tile-body"> 544 <div class="cat-tile-title">Crop Guides</div> 545 <div class="cat-tile-desc">Garlic, beans, squash & deep dives into every crop</div> 546 </div> 547 <div class="cat-tile-arrow">â</div> 548 </button> 549 550 <button class="cat-tile" data-cat="App Deep Dive"> 551 <div class="cat-tile-emoji">ð±</div> 552 <div class="cat-tile-body"> 553 <div class="cat-tile-title">App Deep Dives</div> 554 <div class="cat-tile-desc">How SoilIQ works â features, updates & breakdowns</div> 555 </div> 556 <div class="cat-tile-arrow">â</div> 557 </button> 558 559 </div> 560 </div> 561 562 <div id="most-read-strip" style="display:none"> 563 <div class="blog-section-label" style="margin-top:0">Featured Field Guides</div> 564 <div id="most-read-cards" class="most-read-grid"></div> 565 </div> 566 567 <div id="filter-bar" class="filter-bar"></div> 568 <div id="section-label-wrap"> 569 <div class="blog-section-label" id="section-label">All Articles</div>
570 <span id="article-count"></span> 571 </div> 572 <div class="blog-grid"> 573 574 <!-- LawnIQ Launch Article --> 575 <a class='blog-card featured' href='/blog/lawniq'> 576 <div class="blog-card-body"> 577 <div class="blog-tag">App Deep Dive</div> 578 <div class="blog-card-title">SoilIQ 2.2.0 Introduces LawnIQ: Your Lawn Advisor Has Entered the Chat</div> 579 <div class="blog-card-excerpt">LawnIQ brings soil-grounded lawn guidance into SoilIQ â mowing windows, watering timing, seeding windows, heat stress alerts, and more. Every recommendation tied to your actual soil temperature and 14-day forecast, not generic lawn advice.</div> 580 <div class="blog-card-meta"> 581 <span>10 min read · App Deep Dive</span> 582 <span class="blog-card-read">Read Article â</span> 583 </div> 584 </div> 585 <div class="blog-card-visual">ð¿</div> 586 </a> 587 588 <!-- Article 1: NJ Grass Seed --> 589 <a class='blog-card featured' href='/blog/when-to-plant-grass-seed-new-jersey'> 590 <div class="blog-card-body"> 591 <div class="blog-tag">Planting Guides</div> 592 <div class="blog-card-title">When to Plant Grass Seed in New Jersey â The Soil Temperature Method</div> 593 <div class="blog-card-excerpt">Air temperature will lie to you. New Jersey's spring swings between 72°F days and 38°F nights, and the calendar tells you nothing useful about what's happening six inches down where germination actually begins. Here's the soil-temperature approach that actually works.</div> 594 <div class="blog-card-meta"> 595 <span>8 min read · Planting Guides</span> 596 <span class="blog-card-read">Read Article â</span> 597 </div> 598 </div> 599 <div class="blog-card-visual">ð±</div> 600 </a> 601 602 <!-- Article 2: Homesteader Guide --> 603 <a class='blog-card featured' href='/blog/homesteaders-guide-soil-temperature'> 604 <div class="blog-card-body"> 605 <div class="blog-tag">Homesteading</div> 606 <div class="blog-card-title">The Homesteader's Guide to Soil Temperature: Timing Every Crop Without Guessing</div> 607 <div class="blog-card-excerpt">Most planting calendars are built around air temperature averages and regional frost dates. They're a starting point â not a planting plan. Here's how to use real soil temperature data to know exactly when each crop in your garden is truly ready for seeds.</div> 608 <div class="blog-card-meta"> 609 <span>12 min read · Homesteading</span> 610 <span class="blog-card-read">Read Article â</span> 611 </div> 612 </div> 613 <div class="blog-card-visual">ð¡</div> 614 </a> 615 616 <!-- Article 3: Tomatoes --> 617 <a class='blog-card featured' href='/blog/when-to-plant-tomatoes-soil-temperature'> 618 <div class="blog-card-body"> 619 <div class="blog-tag">Planting Guides</div> 620 <div class="blog-card-title">When to Plant Tomatoes: A Soil Temperature Guide for Every Region</div> 621 <div class="blog-card-excerpt">Tomatoes are the most planted vegetable in America â and the most commonly ruined by planting them too early. The problem isn't your soil or your seed. It's that you're watching the air, not the ground. Regional planting windows for every US region, with exact soil temperature thresholds.</div> 622 <div class="blog-card-meta"> 623 <span>14 min read · Planting Guides</span> 624 <span class="blog-card-read">Read Article â</span> 625 </div> 626 </div> 627 <div class="blog-card-visual">ð </div> 628 </a> 629 630 <!-- Article 4: Fall Overseeding --> 631 <a class='blog-card featured' href='/blog/fall-lawn-overseeding-soil-temperature'> 632 <div class="blog-card-body"> 633 <div class="blog-tag">Lawn Care</div> 634 <div class="blog-card-title">Fall Lawn Overseeding: The Complete Soil Temperature Playbook</div> 635 <div class="blog-card-excerpt">Get fall overseeding right and your grass comes back in spring thicker, deeper-rooted, and more drought-resistant than ever. Overseed when soil hits 50â65°F â not when fall feels like fall. Regional windows for every US regi
635on with a step-by-step guide.</div> 636 <div class="blog-card-meta"> 637 <span>15 min read · Lawn Care</span> 638 <span class="blog-card-read">Read Article â</span> 639 </div> 640 </div> 641 <div class="blog-card-visual">ð¿</div> 642 </a> 643 644 <!-- Article 5: Best Soil Temperature App --> 645 <a class='blog-card featured' href='/blog/best-soil-temperature-app'> 646 <div class="blog-card-body"> 647 <div class="blog-tag">App Deep Dive</div> 648 <div class="blog-card-title">The Best Soil Temperature App for Gardeners in 2026</div> 649 <div class="blog-card-excerpt">Most soil temperature tools show one depth, right now, with no context. Here's what separates a real soil intelligence tool from a weather widget â and a full breakdown of what SoilIQ gives you free vs. Pro.</div> 650 <div class="blog-card-meta"> 651 <span>12 min read · App Deep Dive</span> 652 <span class="blog-card-read">Read Article â</span> 653 </div> 654 </div> 655 <div class="blog-card-visual">ð±</div> 656 </a> 657 658 <!-- Article 6: SoilIQ App Deep Dive --> 659 <a class='blog-card featured' href='/blog/soiliq-app-soil-temperature'> 660 <div class="blog-card-body"> 661 <div class="blog-tag">App Deep Dive</div> 662 <div class="blog-card-title">What Is SoilIQ? The Soil Temperature App Built for Growers Who Watch the Ground</div> 663 <div class="blog-card-excerpt">Real-time soil temperature at four depths, Soil Health Score, widgets, and Watch app â free. Pro unlocks PlantAI for 130+ crops, 14-day forecast, Field Journal, and more. Complete breakdown of every feature and who it's built for.</div> 664 <div class="blog-card-meta"> 665 <span>18 min read · App Deep Dive</span> 666 <span class="blog-card-read">Read Article â</span> 667 </div> 668 </div> 669 <div class="blog-card-visual">ð±</div> 670 </a> 671 672 <!-- Article 6: When to Plant Peppers --> 673 <a class='blog-card' href='/blog/when-to-plant-peppers-soil-temperature'> 674 <div class="blog-card-body"> 675 <div class="blog-tag">Planting Guides</div> 676 <div class="blog-card-title">When to Plant Peppers: The Soil Temperature Guide Every Grower Needs</div> 677 <div class="blog-card-excerpt">Peppers need 65°F soil at 4-inch depth before transplanting â warmer than tomatoes and far less forgiving of cold. Soil temp thresholds by variety (bell to Carolina Reaper), regional planting windows, and what cold soil actually does to your pepper plants.</div> 678 <div class="blog-card-meta"> 679 <span>13 min read · Planting Guides</span> 680 <span class="blog-card-read">Read Article â</span> 681 </div> 682 </div> 683 <div class="blog-card-visual">ð¶ï¸</div> 684 </a> 685 686 <!-- Article 7: Germination Temperature Guide --> 687 <a class='blog-card' href='/blog/soil-temperature-germination-guide'> 688 <div class="blog-card-body"> 689 <div class="blog-tag">Reference</div> 690 <div class="blog-card-title">Soil Temperature Germination Guide: Every Crop, Every Grass, Every Herb</div> 691 <div class="blog-card-excerpt">The authoritative germination temperature reference for serious growers. Seven data tables covering 50+ crops â vegetables, herbs, grasses, flowers, and cover crops â with minimum, optimal, and maximum soil temperatures for each.</div> 692 <div class="blog-card-meta"> 693 <span>18 min read · Reference</span> 694 <span class="blog-card-read">Read Article â</span> 695 </div> 696 </div> 697 <div class="blog-card-visual">ð±</div> 698 </a> 699 700 <!-- Article 8: When to Plant Grass Seed in Texas --> 701 <a class='blog-card' href='/blog/when-to-plant-grass-seed-texas'> 702 <div class="blog-card-body"> 703 <div class="blog-tag">Lawn Care</div> 704 <div class="blog-card-title">When to Plant Grass Seed in Texas: The Complete Soil Temperature Guide</div> 705 <div class="blog-card-excerpt">Texas spans four climate zones and 800 miles. Bermuda needs 65°F soil, St. Augustine needs 70°F, and tall fescue in North Texas goes in fall at 55â70°F. Complete regional timing guide covering DFW, Austin, Houston, the Hill Country, Rio Grande Valley, and West Texas.</div> 706 <div class="blog-card-meta">
707 <span>16 min read · Lawn Care</span> 708 <span class="blog-card-read">Read Article â</span> 709 </div> 710 </div> 711 <div class="blog-card-visual">ð¤ </div> 712 </a> 713 714 <!-- Article 9: When to Plant Grass Seed in Florida --> 715 <a class='blog-card' href='/blog/when-to-plant-grass-seed-florida'> 716 <div class="blog-card-body"> 717 <div class="blog-tag">Lawn Care</div> 718 <div class="blog-card-title">When to Plant Grass Seed in Florida: The Complete Soil Temperature Guide</div> 719 <div class="blog-card-excerpt">St. Augustine dominates Florida but can't be seeded â ever. Bahiagrass and bermuda can. The timing depends on your region: year-round in Miami, AprilâMay in Jacksonville, late April in Pensacola. Complete guide covering all grass types and all four Florida climate zones.</div> 720 <div class="blog-card-meta"> 721 <span>15 min read · Lawn Care</span> 722 <span class="blog-card-read">Read Article â</span> 723 </div> 724 </div> 725 <div class="blog-card-visual">ð´</div> 726 </a> 727 728 <!-- Article 10: When to Plant Cucumbers --> 729 <a class='blog-card' href='/blog/when-to-plant-cucumbers-soil-temperature'> 730 <div class="blog-card-body"> 731 <div class="blog-tag">Planting Guides</div> 732 <div class="blog-card-title">When to Plant Cucumbers: The Soil Temperature Guide for Every Region</div> 733 <div class="blog-card-excerpt">Cucumbers need 60°F soil minimum â but 70°F is where they explode. Cold soil at planting time doesn't just slow germination: it causes the bitter cucumbers that ruin a whole season's harvest. Regional planting windows, variety guide, and succession planting strategy.</div> 734 <div class="blog-card-meta"> 735 <span>12 min read · Planting Guides</span> 736 <span class="blog-card-read">Read Article â</span> 737 </div> 738 </div> 739 <div class="blog-card-visual">ð¥</div> 740 </a> 741 742 <!-- Article 11: When to Plant Squash and Zucchini --> 743 <a class='blog-card' href='/blog/when-to-plant-squash-soil-temperature'> 744 <div class="blog-card-body"> 745 <div class="blog-tag">Planting Guides</div> 746 <div class="blog-card-title">When to Plant Squash and Zucchini: The Soil Temperature Guide</div> 747 <div class="blog-card-excerpt">Summer squash matures in 50 days; butternut needs 100. Both need 60°F soil minimum. Get the timing right for every type â zucchini, yellow squash, acorn, butternut, spaghetti squash â plus the squash vine borer strategy that saves your whole crop.</div> 748 <div class="blog-card-meta"> 749 <span>13 min read · Planting Guides</span> 750 <span class="blog-card-read">Read Article â</span> 751 </div> 752 </div> 753 <div class="blog-card-visual">ð¥¬</div> 754 </a> 755 756 <!-- Article 12: When to Plant Grass Seed in Georgia --> 757 <a class='blog-card' href='/blog/when-to-plant-grass-seed-georgia'> 758 <div class="blog-card-body"> 759 <div class="blog-tag">Lawn Care</div> 760 <div class="blog-card-title">When to Plant Grass Seed in Georgia: The Complete Soil Temperature Guide</div> 761 <div class="blog-card-excerpt">Georgia spans mountains to coast â three climate zones with different planting windows. Bermuda needs 65°F soil, centipede needs 70°F, and tall fescue in North Georgia goes in fall. Complete guide for every region and every grass type, including the beloved centipede.</div> 762 <div class="blog-card-meta"> 763 <span>15 min read · Lawn Care</span> 764 <span class="blog-card-read">Read Article â</span> 765 </div> 766 </div> 767 <div class="blog-card-visual">ð</div> 768 </a> 769 770 <!-- Article 13: When to Plant Corn --> 771 <a class='blog-card' href='/blog/when-to-plant-corn-soil-temperature'> 772 <div class="blog-card-body"> 773 <div class="blog-tag">Planting Guides</div> 774 <div class="blog-card-title">When to Plant Corn: The Soil Temperature Guide for Every Growing Region</div> 775 <div class="blog-card-excerpt">Corn planted in 50°F soil takes 3 weeks to emerge. Corn planted in 65°F soil emerges in 5 days. That extra two weeks in cold soil means rot, disease, and a poor stand. Regional planting windows, GDD accumulation, supersweet variety tips, and succession planting strategy.</div> 776 <div class="blog-card-meta">
777 <span>14 min read · Planting Guides</span> 778 <span class="blog-card-read">Read Article â</span> 779 </div> 780 </div> 781 <div class="blog-card-visual">ð½</div> 782 </a> 783 784 <!-- Article 17: Zoysia Grass Spring Green-Up --> 785 <a class='blog-card' href='/blog/zoysia-grass-spring-green-up-soil-temperature'> 786 <div class="blog-card-body"> 787 <div class="blog-tag">Lawn Care</div> 788 <div class="blog-card-title">When Does Zoysia Wake Up? The Spring Green-Up Soil Temperature Guide</div> 789 <div class="blog-card-excerpt">Zoysia lags Bermuda by 2â4 weeks every spring â and that's by design. Pre-emergent at 50°F, scalp at 60â65°F, fertilize at 65°F+. The complete spring care timeline, plus why your brown lawn is almost certainly not dead, and the Bermuda vs. Zoysia comparison every switcher needs to read.</div> 790 <div class="blog-card-meta"> 791 <span>17 min read · Lawn Care</span> 792 <span class="blog-card-read">Read Article â</span> 793 </div> 794 </div> 795 <div class="blog-card-visual">ð¿</div> 796 </a> 797 798 <!-- Article 16: Bermuda Grass Spring Green-Up --> 799 <a class='blog-card' href='/blog/bermuda-grass-spring-green-up-soil-temperature'> 800 <div class="blog-card-body"> 801 <div class="blog-tag">Lawn Care</div> 802 <div class="blog-card-title">When Does Bermuda Grass Wake Up? The Spring Green-Up Soil Temperature Guide</div> 803 <div class="blog-card-excerpt">Bermuda breaks dormancy at 65°F soil â not when spring feels like spring. Pre-emergent at 50°F, scalp at 60â65°F, main fertilizer at 65°F+. The complete step-by-step spring care timeline, plus how to tell if your brown lawn is dormant or actually dead.</div> 804 <div class="blog-card-meta"> 805 <span>16 min read · Lawn Care</span> 806 <span class="blog-card-read">Read Article â</span> 807 </div> 808 </div> 809 <div class="blog-card-visual">ð¾</div> 810 </a> 811 812 <!-- Article 15: Cool-Season Lawn Care Playbook --> 813 <a class='blog-card' href='/blog/cool-season-lawn-care-soil-temperature'> 814 <div class="blog-card-body"> 815 <div class="blog-tag">Lawn Care</div> 816 <div class="blog-card-title">The Cool-Season Lawn Care Playbook: A Soil Temperature Guide to Every Decision You'll Make This Year</div> 817 <div class="blog-card-excerpt">Pre-emergent at 51°F. Main feeding at 60°F. Stop fertilizing above 75°F. Aerate and overseed when soil drops below 75°F cooling. The complete annual playbook for fescue, bluegrass, and ryegrass â every decision keyed to the one number that actually matters.</div> 818 <div class="blog-card-meta"> 819 <span>18 min read · Lawn Care</span> 820 <span class="blog-card-read">Read Article â</span> 821 </div> 822 </div> 823 <div class="blog-card-visual">ð¿</div> 824 </a> 825 826 <!-- Article 14: When to Plant Beans --> 827 <a class='blog-card' href='/blog/when-to-plant-beans-soil-temperature'> 828 <div class="blog-card-body"> 829 <div class="blog-tag">Planting Guides</div> 830 <div class="blog-card-title">When to Plant Beans: The Soil Temperature Guide for Every Variety</div> 831 <div class="blog-card-excerpt">Bush beans need 60°F soil, lima beans need 65°F, and fava beans prefer cold soil that would kill the others. The complete guide to planting every bean type â snap, pole, lima, runner, fava â with regional windows and succession planting strategy for continuous harvest.</div> 832 <div class="blog-card-meta"> 833 <span>13 min read · Planting Guides</span> 834 <span class="blog-card-read">Read Article â</span> 835 </div> 836 </div> 837 <div class="blog-card-visual">ð«</div> 838 </a> 839 840 <!-- Article 19: Complete Soil Temperature Chart --> 841 <a class='blog-card' href='/blog/soil-temperature-chart-every-vegetable'> 842 <div class="blog-card-body"> 843 <div class="blog-tag">Reference</div> 844 <div class="blog-card-title">
844The Complete Soil Temperature Chart for Every Vegetable</div> 845 <div class="blog-card-excerpt">Minimum, ideal, and maximum soil temperature thresholds for 35+ vegetables â spinach to watermelon, peas to okra â plus regional planting windows, direct-sow vs. transplant guidance, pre-warming techniques, and the biology behind why these numbers matter.</div> 846 <div class="blog-card-meta"> 847 <span>18 min read · Reference</span> 848 <span class="blog-card-read">Read Article â</span> 849 </div> 850 </div> 851 <div class="blog-card-visual">ð</div> 852 </a> 853 854 <!-- Article 18: When to Plant Garlic --> 855 <a class='blog-card' href='/blog/when-to-plant-garlic-soil-temperature'> 856 <div class="blog-card-body"> 857 <div class="blog-tag">Planting Guides</div> 858 <div class="blog-card-title">When to Plant Garlic (And Why Most People Get It Wrong)</div> 859 <div class="blog-card-excerpt">Garlic goes in fall, not spring â and the cold winter that follows is what triggers bulb formation. Plant when soil hits 50°F cooling. Hardneck vs. softneck by climate zone, regional windows from the Northeast to California, and the grocery store garlic myth explained.</div> 860 <div class="blog-card-meta"> 861 <span>17 min read · Planting Guides</span> 862 <span class="blog-card-read">Read Article â</span> 863 </div> 864 </div> 865 <div class="blog-card-visual">ð§</div> 866 </a> 867 868 <!-- Article 19: SoilIQ 2.0 Launch --> 869 <a class='blog-card' href='/blog/soiliq-2-0-launch'> 870 <div class="blog-card-body"> 871 <div class="blog-tag">App Updates</div> 872 <div class="blog-card-title">SoilIQ 2.0 Is Here: A Complete Native Rebuild for Real Growers</div> 873 <div class="blog-card-excerpt">SoilIQ 2.0 is a ground-up native SwiftUI rebuild. New in this release: PlantAI with 130+ crops, a 14-day soil forecast, three-tier frost alerts, an Apple Watch app, Live Activity, home screen widgets, iPad layout, a soil journal, and probe calibration.</div> 874 <div class="blog-card-meta"> 875 <span>8 min read · App Updates</span> 876 <span class="blog-card-read">Read Article â</span> 877 </div> 878 </div> 879 <div class="blog-card-visual">ð</div> 880 </a> 881 882 </div> 883 884 <!-- CTA --> 885 <div class="blog-cta-strip"> 886 <div> 887 <h3>Stop guessing. Plant by soil.</h3> 888 <p>Check soil temperature, frost risk, planting windows, and 14-day forecasts before you seed, plant, or water.</p> 889 </div> 890 <a class="btn-cta" href="https://apps.apple.com/us/app/soiliq-soil-intelligence/id6761371888" target="_blank" rel="noopener" onclick="trackAppStoreClick('Download SoilIQ Free', 'footer')"> 891 <svg width="16" height="16" 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> 892 Download SoilIQ Free 893 </a> 894 </div> 895 896 </main> 897 898 <footer> 899 <a class="footer-logo" href="/">ð± SoilIQ</a> 900 <div class="footer-links-row"> 901 <a href="/">Home</a> 902 <a href="/blog/">Field Guide</a> 903 <a href='/methodology'>About the Data</a> 904 <a href='/support'>Support</a> 905 <a href='/privacy'>Privacy</a> 906 <a href='/terms'>Terms</a> 907 </div> 908 <div class="footer-copy">© 2026 SoilIQ. All rights reserved.</div> 909 </footer> 910 911
911<script> 912 function trackAppStoreClick(ctaText, ctaLocation) { 913 if (typeof gtag !== 'undefined') { 914 gtag('event', 'app_store_click', { 915 'page_url': window.location.href, 916 'cta_text': ctaText, 917 'cta_location': ctaLocation, 918 'referrer': document.referrer, 919 'article_category': '' 920 }); 921 } 922 } 923 (function(){ 924 var SURL='https://segwbzgsxdpxtkvkcnfa.supabase.co'; 925 var SKEY='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InNlZ3diemdzeGRweHRrdmtjbmZhIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzY3NzY1MzMsImV4cCI6MjA5MjM1MjUzM30.tjM0FNNxwwnCFl0KwAwlTAgoKmgSfic7SP3NLiT3Pyk'; 926 927 // â Read badges from localStorage â no network needed 928 document.querySelectorAll('.blog-card').forEach(function(card){ 929 var slug=(card.getAttribute('href')||'').replace('/blog/','').replace('.html',''); 930 if(!slug)return; 931 try{ 932 if(localStorage.getItem('soiliq-read-'+slug)){ 933 var meta=card.querySelector('.blog-card-meta'); 934 if(meta&&!meta.querySelector('.read-badge')){ 935 var rb=document.createElement('span');rb.className='read-badge';rb.textContent='â Read'; 936 meta.appendChild(rb); 937 } 938 } 939 }catch(e){} 940 }); 941 942 var s=document.createElement('script'); 943 s.src='https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2/dist/umd/supabase.min.js'; 944 s.onload=function(){ 945 var sb=window.supabase.createClient(SURL,SKEY); 946 sb.from('article_views').select('slug,views').order('views',{ascending:false}).then(function(res){ 947 if(res.error||!res.data||!res.data.length)return; 948 var allRows=res.data.slice(0,8); 949 var top3set=new Set(allRows.slice(0,3).map(function(r){return r.slug;})); 950 var vm={};res.data.forEach(function(r){vm[r.slug]=r.views;}); 951 952 // Build Featured Field Guides strip (top 3 articles that have a matching card) 953 var strip=document.getElementById('most-read-strip'); 954 var grid=document.getElementById('most-read-cards'); 955 if(strip&&grid){ 956 var rendered=0; 957 allRows.forEach(function(row){ 958 if(rendered>=3)return; 959 var srcCard=null; 960 document.querySelectorAll('.blog-card').forEach(function(c){ 961 if((c.getAttribute('href')||'').replace('/blog/','').replace('.html','')=== row.slug) srcCard=c; 962 }); 963 if(!srcCard)return; 964 var titleEl=srcCard.querySelector('.blog-card-title'); 965 var visualEl=srcCard.querySelector('.blog-card-visual'); 966 var metaEl=srcCard.querySelector('.blog-card-meta span:first-child'); 967 var readTime=metaEl?metaEl.textContent.split('·')[0].trim():''; 968 var a=document.createElement('a'); 969 a.className='most-read-card'; 970 a.href='/blog/'+row.slug+'.html'; 971 a.innerHTML= 972 (visualEl?'<div class="most-read-emoji">'+visualEl.textContent+'</div>':'')+ 973 '<div class="most-read-title">'+(titleEl?titleEl.textContent:'')+'</div>'+ 974 '<div class="most-read-meta">'+readTime+' · '+fmtV(row.views)+(row.views===1?' read':' reads')+'</div>'; 975 grid.appendChild(a); 976 rendered++; 977 }); 978 if(grid.children.length>0){strip.style.display='block';strip.dataset.loaded='1';} 979 } 980 981 // Trending badges + view counts on all cards 982 document.querySelectorAll('.blog-card').forEach(function(card){ 983 var href=card.getAttribute('href')||''; 984 var slug=href.replace('/blog/','').replace('.html',''); 985 var v=vm[slug];if(!v)return; 986 var sp=card.querySelector('.blog-card-meta span:first-child'); 987 if(sp&&!sp.dataset.v){sp.dataset.v='1';sp.textContent+=' · '+fmtV(v)+(v===1?' read':' reads');} 988 if(top3set.has(slug)&&!card.querySelector('.trending-badge')){ 989 var b=document.createElement('span');b.className='trending-badge';b.textContent='ð¥ Trending'; 990 var t=card.querySelector('.blog-tag');if(t)t.after(b); 991 } 992 }); 993 }); 994 }; 995 document.head.appendChild(s); 996 function fmtV(n){return n>=1000?(n/1000).toFixed(1).replace('.0','')+'k':String(n);} 997 998 // Category tile filtering 999 document.querySelectorAll('.cat-tile').forEach(function(tile){ 1000 tile.addEventListener('click', function(){ 1001 var cat = tile.dataset.cat; 1002 var allCards = Array.from(document.querySelectorAll('.blog-card')); 1003 var strip = document.getElementById('most-read-strip'); 1004 var sLabel = document.getElementById('section-label'); 1005 var aCount = document.getElementById('article-count'); 1006 var total = 0; 1007 1008 // Deactivate all tiles; activate clicked 1009 document.querySelectorAll('.cat-tile').forEach(function(t){ t.classList.remove('active'); }); 1010 tile.classList.add('active'); 1011 // Deactivate filter buttons 1012 document.querySelectorAll('.filter-btn').forEach(function(b){ b.classList.remove('active'); }); 1013 1014 if(cat === 'grass-seed') { 1015 allCards.forEach(function(card){ 1016 var href = card.getAttribute('href') || ''; 1017 var match = href.indexOf('grass-seed') !== -1; 1018 card.style.display = match ? '' : 'none'; 1019 if(match) total++; 1020 }); 1021 if(sLabel) sLabel.textContent = 'Regional Grass Seed Guides'; 1022 if(aCount) aCount.textContent = total + ' article' + (total===1?'':'s'); 1023 if(strip) strip.style.display = 'none'; 1024 } else if(cat === 'crop-guides') { 1025 // Crop guides = Planting Guides articles excluding regional grass-seed 1026 allCards.forEach(function(card){ 1027 var href = card.getAttribute('href') || ''; 1028 var tagEl = card.querySelector('.blog-tag'); 1029 var tag = tagEl ? tagEl.textContent.trim() : ''; 1030 var match = tag === 'Planting Guides' && href.indexOf('grass-seed') === -1; 1031 card.style.display = match ? '' : 'none'; 1032 if(match) total++; 1033 }); 1034 if(sLabel) sLabel.textContent = 'Crop Guides'; 1035 if(aCount) aCount.textContent = total + ' article' + (total===1?'':'s'); 1036 if(strip) strip.style.display = 'none'; 1037 } else { 1038 // Match by tag text â delegate to filter button if it exists 1039 var filterBtn = null; 1040 document.querySelectorAll('.filter-btn').forEach(function(b){
1041 if(b.dataset.filter === cat){ filterBtn = b; } 1042 }); 1043 if(filterBtn){ 1044 filterBtn.classList.add('active'); 1045 filterBtn.click(); 1046 // Re-activate the tile (click handler clears it) 1047 document.querySelectorAll('.cat-tile').forEach(function(t){ t.classList.remove('active'); }); 1048 tile.classList.add('active'); 1049 return; 1050 } 1051 // Fallback: manual filter 1052 allCards.forEach(function(card){ 1053 var tagEl = card.querySelector('.blog-tag'); 1054 var match = tagEl && tagEl.textContent.trim() === cat; 1055 card.style.display = match ? '' : 'none'; 1056 if(match) total++; 1057 }); 1058 if(sLabel) sLabel.textContent = cat; 1059 if(aCount) aCount.textContent = total + ' article' + (total===1?'':'s'); 1060 if(strip) strip.style.display = 'none'; 1061 } 1062 // Scroll to the article list 1063 var filterBar = document.getElementById('filter-bar'); 1064 if(filterBar) filterBar.scrollIntoView({ behavior:'smooth', block:'start' }); 1065 }); 1066 }); 1067 1068 // Clear cat-tile active state when filter bar "All" is clicked 1069 document.addEventListener('click', function(e){ 1070 if(e.target && e.target.classList.contains('filter-btn') && e.target.dataset.filter === 'All'){ 1071 document.querySelectorAll('.cat-tile').forEach(function(t){ t.classList.remove('active'); }); 1072 } 1073 }); 1074 1075 // Filter bar â built from card tags, runs synchronously 1076 (function(){ 1077 var allCards=Array.from(document.querySelectorAll('.blog-card')); 1078 var tagCounts={}; 1079 allCards.forEach(function(c){ 1080 var t=c.querySelector('.blog-tag'); 1081 if(t){var k=t.textContent.trim();tagCounts[k]=(tagCounts[k]||0)+1;} 1082 }); 1083 var bar=document.getElementById('filter-bar'); 1084 var sLabel=document.getElementById('section-label'); 1085 var aCount=document.getElementById('article-count'); 1086 if(!bar)return; 1087 // Sort tags by count desc 1088 var tags=['All'].concat(Object.keys(tagCounts).sort(function(a,b){return tagCounts[b]-tagCounts[a];}));
1089 tags.forEach(function(tag){ 1090 var btn=document.createElement('button'); 1091 btn.className='filter-btn'+(tag==='All'?' active':''); 1092 btn.dataset.filter=tag; 1093 btn.innerHTML=tag+(tag!=='All'?' <span class="filter-count">('+tagCounts[tag]+')</span>':''); 1094 btn.addEventListener('click',function(){ 1095 document.querySelectorAll('.filter-btn').forEach(function(b){b.classList.remove('active');}); 1096 btn.classList.add('active'); 1097 var strip=document.getElementById('most-read-strip'); 1098 var total=0; 1099 allCards.forEach(function(card){ 1100 if(tag==='All'){card.style.display='';total++;} 1101 else{ 1102 var ct=card.querySelector('.blog-tag'); 1103 var match=ct&&ct.textContent.trim()===tag; 1104 card.style.display=match?'':' none'; 1105 if(match)total++; 1106 } 1107 }); 1108 if(sLabel)sLabel.textContent=tag==='All'?'All Articles':tag; 1109 if(aCount)aCount.textContent=tag==='All'?'':total+' article'+(total===1?'':'s'); 1110 if(strip)strip.style.display=(tag==='All'&&strip.dataset.loaded)?'block':'none'; 1111 }); 1112 bar.appendChild(btn); 1113 }); 1114 if(aCount)aCount.textContent=''; 1115 })(); 1116 })(); 1117 </script>
1117 1118
1118<script> 1119 (function() { 1120 var btn = document.querySelector('.nav-hamburger'); 1121 var navEl = document.querySelector('nav'); 1122 if (!btn || !navEl) return; 1123 function toggleMenu(force) { 1124 var open = typeof force === 'boolean' ? force : !navEl.classList.contains('nav-mobile-open'); 1125 navEl.classList.toggle('nav-mobile-open', open); 1126 btn.setAttribute('aria-expanded', open); 1127 document.body.style.overflow = open ? 'hidden' : ''; 1128 } 1129 btn.addEventListener('click', function() { toggleMenu(); }); 1130 document.querySelectorAll('.nav-mobile-menu a').forEach(function(a) { 1131 a.addEventListener('click', function() { toggleMenu(false); }); 1132 }); 1133 document.addEventListener('keydown', function(e) { if (e.key === 'Escape') toggleMenu(false); }); 1134 })(); 1135 </script>
1135 1136
1137<script async id="netlify-rum-container" src="/.netlify/scripts/rum" data-netlify-rum-site-id="b5c95b58-e68d-40a0-a54e-e886b4f16bc4" data-netlify-deploy-branch="" data-netlify-deploy-context="production" data-netlify-cwv-token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaXRlX2lkIjoiYjVjOTViNTgtZTY4ZC00MGEwLWE1NGUtZTg4NmI0ZjE2YmM0IiwiYWNjb3VudF9pZCI6IjY5ZDQxMTliNmZmZjdhZmU4ZjgwYzQ5ZiIsImRlcGxveV9pZCI6IjZhMGQwZTI2ZjA4NzIzN2RlMzRmOWE0NyIsImlzc3VlciI6Im5mc2VydmVyIn0.XExJLN6fvJ5WLg2DjZDn9iT7kFLHYqI10YcdIVEUXgo"></script>
1137 1138<!-- Meta Pixel Code -->
1139<script>
vendor: 399 bytes, lines 1139-1148
1139 1140!function(f,b,e,v,n,t,s) 1141{if(f.fbq)return;n=f.fbq=function(){n.callMethod? 1142n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 1143if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 1144n.queue=[];t=b.createElement(e);t.async=!0; 1145t.src=v;s=b.getElementsByTagName(e)[0]; 1146s.parentNode.insertBefore(t,s)}(window, document,'script', 1147'https://connect.facebook.net/en_US/fbevents.js'); 1148fbq('init', '
11481702389357561373
vendor: 30 bytes, lines 1148-1149
1148'); 1149fbq('track', 'PageView');
1150</script>
1150 1151<noscript><img height="1" width="1" style="display:none" 1152src="https://www.facebook.com/tr?id=1702389357561373&ev=PageView&noscript=1" 1153/></noscript> 1154<!-- End Meta Pixel Code --></body> 1155</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.