PageSourceSearch

https://soiliq.app/blog/

html soiliq.app collected 2026-10-02 15:59:15 UTC 60,700 bytes, 1,155 lines download raw bytes

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 &amp; Planting Intelligence | SoilIQ" />
28  <meta name="twitter:card" content="summary_large_image" />
29  <meta name="twitter:title" content="The Field Guide — Soil Science &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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.