Skip to content

About GardenWise Academy

Climate-ready gardening education, built to work anywhere.

We design practical learning paths for home growing—focused on resilient methods, measurable impact, and clear decision-making. Our approach stays regional-neutral so gardeners can adapt ideas to local climates, regulations, and seasons.

At a glance

  • Regional neutrality: methods and frameworks designed for adaptation, not one-size-fits-all rules.
  • Impact-first: practical choices that can reduce water use and food miles when applied locally.
  • Text-only team: we keep this page lightweight and accessible across bandwidths and devices.

Quick contact

+1 (415) 837-2096

[email protected]

Tip: there’s a keyboard Easter egg. Type grow anywhere on this page.

Our story

GardenWise Academy started with a simple observation: most gardening advice is either too generic to trust or too localized to transfer. We built a learning system that teaches how to think—how to plan, observe, record, and iterate—so your garden can improve season after season.

We focus on climate-ready practices: soil health, sensible water strategy, integrated pest management, seed-starting workflows, and harvest planning that respects your time. Everything is designed for adaptation. Our lessons avoid hard-coded regional assumptions and encourage you to apply local context responsibly.

Mission

Help more people grow meaningful food at home with methods that are resilient, measurable, and accessible—regardless of country.

Promise

No hype, no guilt, no brittle “perfect garden” standards—just clear frameworks and small wins you can repeat.

Regional neutrality (what it means)

  • We explain principles first, then offer options to fit varying climates, soils, and space constraints.
  • We avoid region-specific legal or safety claims; you validate local regulations for water use, composting, and structures.
  • We emphasize observation logs and simple measurement so your garden becomes your most reliable source.

Values

  • Clarity over complexity

    We prioritize repeatable steps and decision trees rather than jargon.

  • Evidence and iteration

    We encourage simple experiments, tracking, and seasonal review to refine outcomes.

  • Respect for constraints

    Small spaces, limited budgets, changing weather—our methods adapt without shame.

  • Local responsibility

    We teach frameworks; you apply local knowledge for safe, appropriate choices.

Team (text-only)

We’re a small team of course designers, horticulture educators, and product builders. Our work blends applied gardening practice, climate-resilience planning, and usability-focused learning design.

  • Curriculum Design
  • Horticulture Education
  • Learning Experience
  • Product Engineering
  • Community Support
  • Quality & Research

Want more? Use the Impact Calculator to estimate practical outcomes from home growing, then refine using your local conditions.

Make impact measurable

Use a quick estimate to understand how small, realistic home-growing habits can reduce water use and food miles. This is an approximation meant for planning—results depend on crop choice, climate, irrigation method, and local supply chains.

Impact Calculator

Estimate annual water saved and food miles reduced by growing at home. Adjust values to match your context.

Approx. cultivated area.

Weeks you water/maintain actively.

Impacts water efficiency.

Mulch/ground cover reduces evaporation.

Estimated edible harvest (all crops combined).

Typical: 10–80 kg
kg

Average distance your produce travels when not home-grown.

Note: These figures are planning estimates. Real-world results vary by crop type, yields, irrigation system, and local distribution.

Your estimated annual impact

Water saved

L

Estimated vs. a baseline “sprinkler + bare soil” reference.

Food miles reduced

km

Based on harvest weight and your supply distance estimate.

Confidence band

(varies by climate, crop mix, and watering discipline)

Small next steps

  • Log watering for 2 weeks; adjust frequency before changing equipment.
  • Mulch for stability; it improves water retention in many climates.
  • Prioritize high-value crops you actually eat, then scale.

Keyboard: Press Esc to close. Easter egg: type grow to open the mission modal.

Our mission, in one page

Build confident home growers with adaptable frameworks—so people can make better decisions in changing climates.

What we teach

  • Planning systems: crop calendars, bed maps, rotation logic.
  • Soil-first gardening: structure, biology, and gentle improvement.
  • Water strategy: efficiency, observation, and seasonal tuning.
  • Pest resilience: prevention, scouting, and balanced responses.

How we teach

  • Short lessons with clear actions you can do this week.
  • Checklists, templates, and measurement prompts.
  • Regional-neutral principles, adapted using local context.
  • Progress that respects time and space constraints.

Easter egg unlocked

You found the keyboard shortcut. When learning feels overwhelming, remember: grow one habit, then grow one bed, then grow your confidence.

Cookie preferences

Essential storage is used for theme and consent. Optional analytics is disabled unless you opt in.

Essential

Required for basic functionality: theme selection and remembering your cookie choices.

Always on

Analytics (optional)

Helps us understand which pages are useful. Disabled by default.

Preferences are stored locally in your browser and not sent anywhere by this page.

`; } }; const w2c9e = { open(dlg) { if (!dlg) return; if (typeof dlg.showModal === 'function') { try { dlg.showModal(); } catch(e) {} } else { dlg.setAttribute('open',''); } w2c9e.trapFocus(dlg); }, close(dlg) { if (!dlg) return; if (typeof dlg.close === 'function') { try { dlg.close(); } catch(e) {} } else { dlg.removeAttribute('open'); } w2c9e.releaseFocus(); }, trapFocus(dlg) { w2c9e.releaseFocus(); const focusables = () => p2aql('a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])', dlg) .filter(el => el.offsetParent !== null || el instanceof HTMLInputElement || el instanceof HTMLSelectElement); const prev = document.activeElement; w2c9e._state = { dlg, prev }; const first = focusables()[0]; if (first) setTimeout(() => first.focus(), 0); const onKey = (e) => { if (e.key === 'Tab') { const items = focusables(); if (!items.length) return; const i = items.indexOf(document.activeElement); if (e.shiftKey) { if (i <= 0) { e.preventDefault(); items[items.length-1].focus(); } } else { if (i === items.length - 1) { e.preventDefault(); items[0].focus(); } } } }; dlg.addEventListener('keydown', onKey); w2c9e._state.onKey = onKey; }, releaseFocus() { const st = w2c9e._state; if (!st || !st.dlg) return; try { st.dlg.removeEventListener('keydown', st.onKey); } catch(e) {} try { st.prev && st.prev.focus && st.prev.focus(); } catch(e) {} w2c9e._state = null; }, _state: null }; const s1e8k = { buffer: '', max: 12, handleKey(e) { if (e.ctrlKey || e.metaKey || e.altKey) return; const k = e.key; if (!k || k.length !== 1) return; s1e8k.buffer = (s1e8k.buffer + k.toLowerCase()).slice(-s1e8k.max); if (s1e8k.buffer.endsWith('grow')) { const mission = xk9h7('#missionDlg'); w2c9e.open(mission); r7v1q.show('Easter egg: mission opened.'); } } }; function g9t4f() { const impactDlg = xk9h7('#impactDlg'); const missionDlg = xk9h7('#missionDlg'); const cookieDlg = xk9h7('#cookieDlg'); const openImpactBtns = ['#openImpact', '#openImpact2', '#openImpactFromMission'].map(id => xk9h7(id)).filter(Boolean); openImpactBtns.forEach(btn => btn.addEventListener('click', () => w2c9e.open(impactDlg))); xk9h7('#closeImpact')?.addEventListener('click', () => w2c9e.close(impactDlg)); xk9h7('#openMission')?.addEventListener('click', () => w2c9e.open(missionDlg)); xk9h7('#closeMission')?.addEventListener('click', () => w2c9e.close(missionDlg)); xk9h7('#closeMission2')?.addEventListener('click', () => w2c9e.close(missionDlg)); xk9h7('#toastClose')?.addEventListener('click', () => r7v1q.hide()); const cookiePrefsBtns = ['#openCookiePrefs', '#footerCookiePrefs'].map(id => xk9h7(id)).filter(Boolean); cookiePrefsBtns.forEach(btn => btn.addEventListener('click', () => w2c9e.open(cookieDlg))); xk9h7('#cookieDlgClose')?.addEventListener('click', () => w2c9e.close(cookieDlg)); xk9h7('#cookieCancel')?.addEventListener('click', () => w2c9e.close(cookieDlg)); xk9h7('#cookieManage')?.addEventListener('click', () => w2c9e.open(cookieDlg)); xk9h7('#cookieClose')?.addEventListener('click', () => xk9h7('#cookieBanner')?.classList.add('hidden')); xk9h7('#cookieAcceptAll')?.addEventListener('click', () => { v8n0s.setConsent({ analytics: true }); xk9h7('#cookieBanner')?.classList.add('hidden'); const cb = xk9h7('#cookieAnalytics'); if (cb) cb.checked = true; r7v1q.show('Cookie preferences saved: all accepted.'); }); xk9h7('#cookieReject')?.addEventListener('click', () => { v8n0s.setConsent({ analytics: false }); xk9h7('#cookieBanner')?.classList.add('hidden'); const cb = xk9h7('#cookieAnalytics'); if (cb) cb.checked = false; r7v1q.show('Cookie preferences saved: optional rejected.'); }); xk9h7('#cookieSave')?.addEventListener('click', () => { const enabled = !!xk9h7('#cookieAnalytics')?.checked; v8n0s.setConsent({ analytics: enabled }); xk9h7('#cookieBanner')?.classList.add('hidden'); w2c9e.close(cookieDlg); r7v1q.show('Cookie preferences saved.'); }); const consent = v8n0s.getConsent(); if (xk9h7('#cookieAnalytics')) xk9h7('#cookieAnalytics').checked = consent ? !!consent.analytics : false; const onBackdrop = (dlg) => { dlg.addEventListener('click', (e) => { const r = dlg.getBoundingClientRect(); const inDialog = (e.clientX >= r.left && e.clientX <= r.right && e.clientY >= r.top && e.clientY <= r.bottom); if (!inDialog) w2c9e.close(dlg); }); }; [impactDlg, missionDlg, cookieDlg].filter(Boolean).forEach(onBackdrop); xk9h7('#impactForm')?.addEventListener('submit', (e) => { e.preventDefault(); const v = q0m2b.validateImpact(); if (!v.ok) { r7v1q.show('Please fix the highlighted fields.'); return; } const res = q0m2b.computeImpact(v); q0m2b.renderImpact(res); r7v1q.show('Impact updated.'); }); xk9h7('#resetBtn')?.addEventListener('click', () => { xk9h7('#icArea').value = '12'; xk9h7('#icAreaUnit').value = 'm2'; xk9h7('#icWeeks').value = '26'; xk9h7('#icIrrigation').value = 'drip'; xk9h7('#icMulch').value = 'yes'; xk9h7('#icKg').value = '25'; xk9h7('#icSupplyMiles').value = '120'; xk9h7('#icDistUnit').value = 'km'; ['#errArea','#errWeeks','#errKg','#errMiles'].forEach(id => xk9h7(id)?.classList.add('hidden')); xk9h7('#outWater').textContent = '—'; xk9h7('#outMiles').textContent = '—'; xk9h7('#outBand').textContent = '—'; xk9h7('#outMilesUnit').textContent = 'km'; r7v1q.show('Defaults restored.'); }); xk9h7('#copyImpact')?.addEventListener('click', async () => { const water = xk9h7('#outWater')?.textContent?.trim() || '—'; const miles = xk9h7('#outMiles')?.textContent?.trim() || '—'; const unit = xk9h7('#outMilesUnit')?.textContent?.trim() || 'km'; const band = xk9h7('#outBand')?.textContent?.trim() || '—'; const text = `GardenWise Impact Estimate: Water saved ${water} L/year; Food miles reduced ${miles} ${unit}/year; Confidence: ${band}.`; try { await navigator.clipboard.writeText(text); r7v1q.show('Summary copied to clipboard.'); } catch(e) { r7v1q.show('Copy failed. Your browser may block clipboard access.'); } }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { if (impactDlg?.open) w2c9e.close(impactDlg); if (missionDlg?.open) w2c9e.close(missionDlg); if (cookieDlg?.open) w2c9e.close(cookieDlg); } }); document.addEventListener('keydown', s1e8k.handleKey); const themeBtn = xk9h7('#themeBtn'); if (themeBtn) themeBtn.addEventListener('click', () => k3u6z.toggleTheme()); } async function b8j2u() { await m4p7d.loadFragment('#hwrap', './header.html', m4p7d.fallbackHeader()); await m4p7d.loadFragment('#fwrap', './footer.html', m4p7d.fallbackFooter()); const themeBtn = xk9h7('#themeBtn'); if (themeBtn) themeBtn.addEventListener('click', () => k3u6z.toggleTheme()); const footerPrefs = xk9h7('#footerCookiePrefs'); if (footerPrefs) footerPrefs.addEventListener('click', () => w2c9e.open(xk9h7('#cookieDlg'))); const current = k3u6z.currentTheme(); k3u6z.applyTheme(current); v8n0s.showBannerIfNeeded(); g9t4f(); } b8j2u(); })();