chore: baseline of the live help4bis.com docroot as of 2026-10-23 (cockpit #168)

Excludes analytics/data, vendor, support, .env, ACME tokens.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-23 06:45:34 +10:00
co-authored by Claude Sonnet 5.5
parent 84c1a01338
commit 9e6a41fc5d
86 changed files with 20852 additions and 0 deletions
+493
View File
@@ -0,0 +1,493 @@
<!DOCTYPE html>
<!-- Version: 1.2.0 | Created: 2026-05-05 | Updated: 2026-08-16 -->
<html lang="en-AU">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GardenBuddy.au Case Study | HELP4BIS</title>
<meta name="description" content="How I built GardenBuddy.au: a national vegetable garden management platform with climate zones by postcode, live pest pressure, harvest tracking, ROI reports against supermarket prices, and a weekly Gardener Digest email.">
<meta name="author" content="HELP4BIS">
<meta name="publisher" content="Dutch Digital Dynamics Pty Ltd">
<meta name="language" content="en-AU">
<meta name="geo.region" content="AU-QLD">
<link rel="canonical" href="https://help4bis.com/work/gardenbuddy-au.html">
<meta name="robots" content="index, follow">
<meta property="og:type" content="website">
<meta property="og:url" content="https://help4bis.com/work/gardenbuddy-au.html">
<meta property="og:site_name" content="HELP4BIS">
<meta property="og:title" content="GardenBuddy.au Case Study | HELP4BIS">
<meta property="og:description" content="A full vegetable garden management platform: climate zones by postcode, live pest pressure, harvest logging, ROI vs Coles and Woolworths prices, and a weekly Gardener Digest. Built on WordPress with our own plugins.">
<meta property="og:image" content="https://help4bis.com/assets/images/port-gardenbuddy.jpg">
<meta property="og:locale" content="en_AU">
<link rel="icon" type="image/jpeg" href="../assets/images/logo-favicon.jpg"> <link rel="stylesheet" href="../assets/css/style.css">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"@id": "https://help4bis.com/work/gardenbuddy-au.html#webpage",
"url": "https://help4bis.com/work/gardenbuddy-au.html",
"name": "GardenBuddy.au Case Study | HELP4BIS",
"description": "A national vegetable garden management platform built on WordPress with custom plugins for climate zone detection, garden bed tracking, harvest logging, live pest pressure, and ROI reports against supermarket prices.",
"isPartOf": {"@id": "https://help4bis.com/#website"},
"breadcrumb": {
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://help4bis.com/"},
{"@type": "ListItem", "position": 2, "name": "Our Work", "item": "https://help4bis.com/#portfolio"},
{"@type": "ListItem", "position": 3, "name": "GardenBuddy.au", "item": "https://help4bis.com/work/gardenbuddy-au.html"}
]
}
}
</script>
<style>
.cs-hero {
background: linear-gradient(160deg, var(--ink) 0%, #0d1f0d 50%, #142014 100%);
padding: var(--sp-16) 0 var(--sp-12);
position: relative;
overflow: hidden;
}
.cs-hero::before {
content: '';
position: absolute;
top: -30%;
right: -15%;
width: 60%;
height: 200%;
background: radial-gradient(circle, rgba(34,197,94,.07) 0%, transparent 65%);
pointer-events: none;
}
.cs-breadcrumb {
font-size: 13px;
color: rgba(255,255,255,.45);
margin-bottom: var(--sp-5);
display: flex;
align-items: center;
gap: 8px;
}
.cs-breadcrumb a { color: rgba(255,255,255,.45); }
.cs-breadcrumb a:hover { color: var(--white); }
.cs-breadcrumb span { color: rgba(255,255,255,.25); }
.cs-hero h1 { color: var(--white); max-width: 820px; margin-bottom: var(--sp-4); }
.cs-hero-sub {
font-size: clamp(16px, 2vw, 20px);
color: rgba(255,255,255,.65);
max-width: 680px;
line-height: 1.65;
margin-bottom: var(--sp-6);
}
.cs-hero-actions { display: flex; gap: 12px; flex-wrap: wrap; }
.btn-green {
background: linear-gradient(135deg, #22C55E, #16a34a);
color: var(--white);
border-color: transparent;
box-shadow: 0 4px 14px rgba(34,197,94,.30);
}
.btn-green:hover { background: linear-gradient(135deg, #16a34a, #15803d); color: var(--white); transform: translateY(-2px); }
.cs-kpis {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
margin-top: var(--sp-8);
padding-top: var(--sp-8);
border-top: 1px solid rgba(255,255,255,.08);
}
@media (min-width: 640px) { .cs-kpis { grid-template-columns: repeat(4, 1fr); } }
.cs-kpi { text-align: center; }
.cs-kpi-value {
font-family: var(--font-head);
font-size: clamp(32px, 4vw, 52px);
font-weight: 900;
color: var(--green);
line-height: 1;
letter-spacing: -0.04em;
}
.cs-kpi-label { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .12em; color: rgba(255,255,255,.45); margin-top: 6px; }
.cs-feature-grid {
display: grid;
grid-template-columns: 1fr;
gap: 24px;
margin-top: var(--sp-6);
}
@media (min-width: 640px) { .cs-feature-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 900px) { .cs-feature-grid { grid-template-columns: repeat(3, 1fr); } }
.cs-feature-card {
background: var(--white);
border: 1px solid var(--grey-100);
border-radius: var(--r-lg);
padding: 24px;
box-shadow: var(--shadow-card);
}
.cs-feature-card h4 { font-size: 15px; margin-bottom: 8px; color: var(--ink); }
.cs-feature-card p { font-size: 14px; color: var(--grey-600); line-height: 1.6; margin: 0; }
.cs-feature-icon { width: 36px; height: 36px; background: var(--grey-50); border-radius: var(--r-md); display: flex; align-items: center; justify-content: center; margin-bottom: 14px; font-size: 18px; }
.cs-stack { display: flex; flex-wrap: wrap; gap: 8px; margin-top: var(--sp-4); }
.cs-stack-tag { background: var(--grey-50); border: 1px solid var(--grey-100); border-radius: var(--r-full); padding: 6px 14px; font-size: 13px; font-weight: 500; color: var(--grey-600); }
.cs-two-col { display: grid; grid-template-columns: 1fr; gap: var(--sp-8); align-items: start; }
@media (min-width: 768px) { .cs-two-col { grid-template-columns: 1fr 1fr; } .cs-two-col--wide { grid-template-columns: 3fr 2fr; } }
.cs-quote { border-left: 3px solid var(--green); padding: var(--sp-4) var(--sp-5); background: rgba(34,197,94,.04); border-radius: 0 var(--r-md) var(--r-md) 0; margin: var(--sp-5) 0; }
.cs-quote p { font-size: 17px; line-height: 1.7; color: var(--grey-800); font-style: italic; margin: 0; }
.cs-honest { background: var(--grey-50); border: 1px solid var(--grey-100); border-radius: var(--r-lg); padding: var(--sp-4) var(--sp-5); margin: var(--sp-5) 0; }
.cs-honest-label { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .12em; color: var(--grey-400); margin-bottom: 8px; }
.cs-honest p { font-size: 14px; color: var(--grey-600); line-height: 1.65; margin: 0; }
.cs-divider { height: 1px; background: var(--grey-100); margin: var(--sp-8) 0; }
.cs-flow {
display: flex;
flex-direction: column;
gap: 0;
margin-top: var(--sp-5);
}
.cs-flow-step {
display: flex;
gap: 16px;
align-items: flex-start;
padding: 16px 0;
border-bottom: 1px solid var(--grey-100);
}
.cs-flow-step:last-child { border-bottom: none; }
.cs-flow-num {
flex-shrink: 0;
width: 28px;
height: 28px;
background: var(--green);
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
font-weight: 800;
margin-top: 2px;
}
.cs-flow-title { font-family: var(--font-head); font-size: 14px; font-weight: 700; color: var(--ink); margin-bottom: 4px; }
.cs-flow-desc { font-size: 13px; color: var(--grey-600); line-height: 1.5; }
.cs-cta { background: linear-gradient(135deg, var(--ink-mid), var(--ink)); border-radius: var(--r-2xl); padding: var(--sp-10) var(--sp-8); text-align: center; }
.cs-cta h2 { color: var(--white); margin-bottom: var(--sp-4); }
.cs-cta p { color: rgba(255,255,255,.65); max-width: 560px; margin: 0 auto var(--sp-6); font-size: 17px; line-height: 1.7; }
</style>
</head>
<body>
<nav class="nav" role="navigation" aria-label="Main navigation">
<div class="nav__inner">
<a class="nav__logo" href="../index.html" aria-label="HELP4BIS home">
<img src="../assets/images/logo-cropped.jpg" alt="HELP4BIS" width="140" height="38">
</a>
<ul class="nav__links" id="nav-links" role="list">
<li class="nav__dropdown">
<button class="nav__trigger" aria-haspopup="true" aria-expanded="false">Services <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg></button>
<ul class="nav__dropdown-menu" role="menu">
<li class="nav__menu-group">WordPress</li>
<li><a href="../managed-wordpress.html" role="menuitem">Tailored Website Management</a></li>
<li><a href="../care-plans.html" role="menuitem">WP Care Plans <span class="menu-price">from $49/mo</span></a></li>
<li><a href="../sos-fix.html" role="menuitem">WP SOS Fix <span class="menu-price">$97 flat</span></a></li>
<li><a href="../ai-integration.html" role="menuitem">AI Integration</a></li>
<li><a href="../plugin-development.html" role="menuitem">Custom Plugin Development</a></li> </ul>
</li>
<li><a href="../about.html">About</a></li>
<li><a href="../index.html#portfolio">Our Work</a></li>
<li><a href="../index.html#pricing">Pricing</a></li>
<li><a href="../blog/index.html">Blog</a></li>
<li><a href="../your-first-week-with-ai.html">AI Guide</a></li>
<li><a href="../contact.html">Contact</a></li>
<li class="nav__cta-mobile" aria-hidden="true">
<a href="../contact.html" class="btn btn-primary">Get Started</a>
<a href="../sos-fix.html" class="btn btn-secondary">SOS Fix, $97</a>
</li>
</ul>
<div class="nav__cta">
<a href="../sos-fix.html" class="btn btn-secondary btn-sm">SOS Fix, $97</a>
<a href="../contact.html" class="btn btn-primary btn-sm">Get Started</a>
</div>
<button class="nav__burger" id="nav-burger" aria-label="Open menu" aria-expanded="false" aria-controls="nav-links">
<span></span><span></span><span></span>
</button>
</div>
</nav>
<!-- HERO -->
<section class="cs-hero" aria-labelledby="cs-heading">
<div class="container">
<div class="cs-breadcrumb">
<a href="../index.html">Home</a><span>›</span>
<a href="../index.html#portfolio">Our Work</a><span>›</span>
<span style="color:rgba(255,255,255,.7);">GardenBuddy.au</span>
</div>
<p class="eyebrow" style="color:rgba(34,197,94,.9);">Case Study: National Garden Platform</p>
<h1 id="cs-heading">GardenBuddy.au.<br>A garden management<br>app built on WordPress.</h1>
<p class="cs-hero-sub">Not a calculator page. A full vegetable garden management platform I built as a custom WordPress plugin: climate zones by postcode covering all of Australia, live pest pressure from my weather data, harvest logging, ROI reports against Coles and Woolworths prices, and a weekly Gardener Digest email.</p>
<div class="cs-hero-actions">
<a href="https://gardenbuddy.au" target="_blank" rel="noopener" class="btn btn-green">Visit gardenbuddy.au →</a>
<a href="../contact.html" class="btn btn-secondary">Build something similar</a>
</div>
<div class="cs-kpis">
<div class="cs-kpi"><div class="cs-kpi-value">AU</div><div class="cs-kpi-label">National Coverage</div></div>
<div class="cs-kpi"><div class="cs-kpi-value">6</div><div class="cs-kpi-label">Custom Plugins</div></div>
<div class="cs-kpi"><div class="cs-kpi-value">4</div><div class="cs-kpi-label">Live Data Sources</div></div>
<div class="cs-kpi"><div class="cs-kpi-value">v2.0</div><div class="cs-kpi-label">Plugin Version</div></div>
</div>
</div>
</section>
<!-- OVERVIEW -->
<section class="section" aria-labelledby="overview-heading">
<div class="container">
<div class="cs-two-col cs-two-col--wide">
<div>
<p class="eyebrow">Overview</p>
<h2 id="overview-heading">From calculators to a garden management app</h2>
<p class="large">The first version of GardenBuddy was a set of gardening calculators I ran on the dayboro.au domain. Useful, but limited to one postcode and one set of conditions. So I rebuilt it as a standalone national platform. A gardener anywhere in Australia enters their postcode and gets advice calibrated to their actual climate zone and what's happening locally right now.</p>
<p>The core plugin, "Buddy the Sprout", handles everything a member does: climate zone detection from postcode, garden bed setup, plant tracking from seed to harvest, pest monitoring, watering records, harvest logging, ROI calculations, and automated email recommendations. It pulls live weather data from my weather API and supermarket price data from a separate scraper I wrote that tracks Coles, Woolworths, Aldi, and IGA prices.</p>
<div class="cs-quote">
<p>"The question I built it to answer: is it cheaper to grow this myself, given my local conditions, than to buy it at Coles? The answer changes depending on where you live, what you grow, and what the shops are charging this week."</p>
</div>
<div class="cs-stack">
<span class="cs-stack-tag">WordPress</span>
<span class="cs-stack-tag">Custom Plugin</span>
<span class="cs-stack-tag">PMPro Membership</span>
<span class="cs-stack-tag">our weather API</span>
<span class="cs-stack-tag">Price Scraper</span>
<span class="cs-stack-tag">Email Reports</span>
<span class="cs-stack-tag">Climate Zone DB</span>
</div>
</div>
<div>
<img src="../assets/images/port-gardenbuddy.jpg" alt="GardenBuddy.au garden management platform" style="width:100%;border-radius:var(--r-xl);box-shadow:var(--shadow-lg);" loading="lazy">
</div>
</div>
</div>
</section>
<!-- HOW IT WORKS -->
<section class="section section--alt" aria-labelledby="how-heading">
<div class="container">
<p class="eyebrow">How It Works</p>
<h2 id="how-heading">From postcode to planting advice in three steps</h2>
<div class="cs-two-col">
<div>
<div class="cs-flow">
<div class="cs-flow-step">
<div class="cs-flow-num">1</div>
<div>
<div class="cs-flow-title">Enter your postcode</div>
<div class="cs-flow-desc">The platform looks up the climate zone for that postcode from a national database. Australia has eight climate zones. Subtropical SE Queensland is zone 2, temperate Melbourne is zone 6, and so on. Every piece of planting advice, every pest risk threshold, and every growing guide is then filtered to match your zone.</div>
</div>
</div>
<div class="cs-flow-step">
<div class="cs-flow-num">2</div>
<div>
<div class="cs-flow-title">Set up your garden beds</div>
<div class="cs-flow-desc">Add one or more garden beds with dimensions, soil type, and sun exposure. Then add plants to each bed: the variety, planting date, and how many seeds or seedlings went in. From that point, the platform tracks growth stages automatically from growing degree day data it pulls off the weather API. You don't update anything by hand.</div>
</div>
</div>
<div class="cs-flow-step">
<div class="cs-flow-num">3</div>
<div>
<div class="cs-flow-title">Get live recommendations</div>
<div class="cs-flow-desc">Current temperature and humidity from my weather API feed the pest pressure model. If conditions favour aphids or fungal disease for your zone, you get an alert. The "Plant Now" panel shows what's in season for your postcode this month. The weekly Gardener Digest email summarises conditions, upcoming plant tasks, and current supermarket prices for what you are growing.</div>
</div>
</div>
<div class="cs-flow-step">
<div class="cs-flow-num">4</div>
<div>
<div class="cs-flow-title">Log your harvests</div>
<div class="cs-flow-desc">Every harvest gets logged: the vegetable, the weight in kilos, and the date. The platform calculates your ROI: what you grew versus what you'd have paid at the supermarket for the same quantity. The price comparison uses the live scraped price data, not a fixed number.</div>
</div>
</div>
</div>
</div>
<div>
<div style="background:var(--ink-mid);border-radius:var(--r-xl);padding:var(--sp-6);color:var(--white);">
<p class="eyebrow" style="color:rgba(34,197,94,.9);">What the platform tracks</p>
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:14px;">
<li style="display:flex;gap:12px;align-items:flex-start;">
<span style="color:var(--green);font-size:18px;flex-shrink:0;">🌱</span>
<div><strong style="color:var(--white);font-size:14px;">Garden beds and plants</strong><p style="font-size:13px;color:rgba(255,255,255,.55);margin:4px 0 0;line-height:1.5;">Add beds, add plants per bed, track planting dates, growth stages, expected harvest windows.</p></div>
</li>
<li style="display:flex;gap:12px;align-items:flex-start;">
<span style="color:var(--green);font-size:18px;flex-shrink:0;">🌿</span>
<div><strong style="color:var(--white);font-size:14px;">Pest and treatment records</strong><p style="font-size:13px;color:rgba(255,255,255,.55);margin:4px 0 0;line-height:1.5;">Log pest sightings and treatments applied. Checked against live pest pressure alerts.</p></div>
</li>
<li style="display:flex;gap:12px;align-items:flex-start;">
<span style="color:var(--green);font-size:18px;flex-shrink:0;">💧</span>
<div><strong style="color:var(--white);font-size:14px;">Watering, fertilising, mulching</strong><p style="font-size:13px;color:rgba(255,255,255,.55);margin:4px 0 0;line-height:1.5;">Record maintenance events per bed. The platform tracks when each bed was last watered and flags overdue tasks.</p></div>
</li>
<li style="display:flex;gap:12px;align-items:flex-start;">
<span style="color:var(--green);font-size:18px;flex-shrink:0;">⚖️</span>
<div><strong style="color:var(--white);font-size:14px;">Harvest history and ROI</strong><p style="font-size:13px;color:rgba(255,255,255,.55);margin:4px 0 0;line-height:1.5;">Every kilo logged. ROI calculated monthly against current Coles/Woolworths/Aldi/IGA average prices.</p></div>
</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- LIVE DATA SOURCES -->
<section class="section" aria-labelledby="data-heading">
<div class="container">
<p class="eyebrow">Live Data</p>
<h2 id="data-heading">Four live data sources, all integrated</h2>
<p style="max-width:640px;color:var(--grey-600);font-size:17px;line-height:1.7;">Static gardening advice is what most apps give you. I connected GardenBuddy to live data so the advice reflects what's happening now: current weather, current pest conditions, current supermarket prices.</p>
<div class="cs-feature-grid">
<div class="cs-feature-card">
<div class="cs-feature-icon">🌦️</div>
<h4>Weather data from our weather API</h4>
<p>Current temperature, humidity, rainfall, and evapotranspiration from my Lyndhurst Hill weather station. The pest pressure model and the watering schedule calculator read from this API in real time. Members outside Dayboro get BOM sourced conditions for their postcode through the same API layer.</p>
</div>
<div class="cs-feature-card">
<div class="cs-feature-icon">🛒</div>
<h4>Supermarket price scraper</h4>
<p>A separate gardenbuddy-prices plugin I wrote scrapes current vegetable prices from Coles, Woolworths, Aldi, and IGA at regular intervals. The ROI calculator uses these live prices, not fixed averages. If zucchini drops to $1.50/kg at Coles, the ROI on growing it drops with it.</p>
</div>
<div class="cs-feature-card">
<div class="cs-feature-icon">🐛</div>
<h4>Pest pressure model</h4>
<p>The gardenbuddy-pests plugin maintains a model of pest activity thresholds by climate zone. Current temperature and humidity from the weather API feed into the model. If conditions are in the danger range for aphids, fungal disease, or caterpillar activity in zone 2, members in that zone get an alert.</p>
</div>
<div class="cs-feature-card">
<div class="cs-feature-icon">🗓️</div>
<h4>Planting calendar by postcode</h4>
<p>The growzone-landing-pages plugin generates planting guides per climate zone. Enter a postcode, get a "what to plant this month" recommendation calibrated to the eight Australian climate zones, not just my own subtropical corner of SE Queensland.</p>
</div>
<div class="cs-feature-card">
<div class="cs-feature-icon">📧</div>
<h4>Weekly Gardener Digest</h4>
<p>Built on the same dayboro-email-reports plugin engine I use on dayboro.au. The weekly digest covers current pest pressure, plant tasks due this week, upcoming weather, and supermarket prices for the vegetables the member is growing. It's personalised per member from their garden bed contents.</p>
</div>
<div class="cs-feature-card">
<div class="cs-feature-icon">🧑‍🌾</div>
<h4>Demo garden</h4>
<p>A fully populated example garden showing every feature: beds, plants at different growth stages, past harvest records, pest alerts, and an ROI report. New users can explore the demo garden without signing up, so they see exactly what the platform does before they commit.</p>
</div>
</div>
<div class="cs-honest">
<div class="cs-honest-label">Version 2: what changed</div>
<p>Version 1 was a set of static calculators using weather data files from dayboro.au. It worked for Dayboro but not for anyone on a different postcode. Version 2 was a full (re)-build: a national climate zone database, a weather API layer that can serve conditions for any Australian postcode, and a proper user account system with garden bed management. The plugin version number (v2.0.6) reflects this. It isn't an incremental update, it's a different product.</p>
</div>
</div>
</section>
<!-- TECH STACK -->
<section class="section section--alt" aria-labelledby="stack-heading">
<div class="container">
<p class="eyebrow">Under the Hood</p>
<h2 id="stack-heading">Six custom plugins, one platform</h2>
<p style="max-width:640px;color:var(--grey-600);font-size:17px;line-height:1.7;">I built the platform entirely on WordPress with custom plugins. No SaaS garden service behind it, no app framework from someone else. Every piece of it is code I wrote and own. There's no licence fee sitting under it that isn't mine.</p>
<div class="cs-feature-grid" style="margin-top:var(--sp-6);">
<div class="cs-feature-card">
<h4>garden-buddy (core)</h4>
<p>The main plugin, "Buddy the Sprout" v2.0.6. Garden bed management, plant tracking, growth stage calculation, harvest logging, ROI reports, the My Garden dashboard, and everything members see and click. 20+ shortcodes covering the whole platform.</p>
</div>
<div class="cs-feature-card">
<h4>gardenbuddy-pests</h4>
<p>Pest pressure model by climate zone. Temperature and humidity thresholds for 12 common garden pests. It reads the weather API to flag active risk conditions. Alerts appear in the My Garden dashboard and the weekly email.</p>
</div>
<div class="cs-feature-card">
<h4>gardenbuddy-prices</h4>
<p>Supermarket price scraper. Tracks current retail prices for 40+ vegetables across Coles, Woolworths, Aldi, and IGA. Feeds the ROI calculator and the monthly price report section of the Gardener Digest.</p>
</div>
<div class="cs-feature-card">
<h4>gardenbuddy-buddy-check</h4>
<p>A health check plugin that monitors the platform's data pipelines (weather API connectivity, price scraper freshness, cron job execution) and surfaces any failures in the WordPress admin before members notice them.</p>
</div>
<div class="cs-feature-card">
<h4>growzone-landing-pages</h4>
<p>Generates landing pages for each of the eight Australian climate zones and for specific postcodes, tuned for organic search. "What to grow in zone 6 this month" style pages that bring gardeners to the platform.</p>
</div>
<div class="cs-feature-card">
<h4>dayboro-email-reports (shared)</h4>
<p>The same email reports engine I run across dayboro.au. Queued sending, personalised content per subscriber, open tracking. On GardenBuddy it generates the weekly Gardener Digest with each member's own garden data.</p>
</div>
</div>
<div class="cs-divider"></div>
<h3 style="margin-bottom:var(--sp-3);">Full technology list</h3>
<div class="cs-stack">
<span class="cs-stack-tag">WordPress 6.x</span>
<span class="cs-stack-tag">PHP 8.4</span>
<span class="cs-stack-tag">MariaDB</span>
<span class="cs-stack-tag">PMPro Membership</span>
<span class="cs-stack-tag">Elementor Pro</span>
<span class="cs-stack-tag">our weather API</span>
<span class="cs-stack-tag">Redis cache</span>
<span class="cs-stack-tag">Custom price scraper</span>
<span class="cs-stack-tag">Australian climate zone DB</span>
<span class="cs-stack-tag">Custom email queue</span>
<span class="cs-stack-tag">BOM weather data</span>
<span class="cs-stack-tag">DirectAdmin</span>
<span class="cs-stack-tag">Google Site Kit</span>
</div>
</div>
</section>
<!-- CTA -->
<section class="section section--dark" aria-labelledby="cta-heading">
<div class="container">
<div class="cs-cta">
<p class="eyebrow" style="color:rgba(34,197,94,.9);justify-content:center;">What we can build for you</p>
<h2 id="cta-heading">A membership platform with live data baked in.</h2>
<p>The GardenBuddy architecture (custom plugin, live data API, personalised email, content by postcode, PMPro membership) is a pattern I've now built twice, whilst the code stays mine to reuse on the next project. If your product involves connecting a member to live local data and giving them a personalised dashboard, this is the stack I'd use.</p>
<div style="display:flex;gap:12px;justify-content:center;flex-wrap:wrap;">
<a href="../contact.html" class="btn btn-primary">Talk to us about your project</a>
<a href="../plugin-development.html" class="btn btn-secondary">Custom plugin development</a>
</div>
</div>
</div>
</section>
<footer class="footer" aria-label="Site footer">
<div class="container">
<div class="footer__grid">
<div class="footer__brand">
<img src="../assets/images/logo-cropped.jpg" alt="HELP4BIS" width="140" height="38">
<p>Managed WordPress hosting and maintenance for Australian small businesses. Brisbane based, personal service, WordPress specialist, Brisbane.</p>
<p style="font-size:13px; color:rgba(255,255,255,.4);">Dutch Digital Dynamics Pty Ltd · ABN 86 081 237 087</p>
</div>
<div class="footer__col">
<h4>Services</h4>
<ul class="footer__links">
<li><a href="../managed-wordpress.html">Tailored Website Management</a></li>
<li><a href="../care-plans.html">WP Care Plans</a></li>
<li><a href="../sos-fix.html">WP SOS Fix</a></li>
<li><a href="../ai-integration.html">AI Integration</a></li>
<li><a href="../plugin-development.html">Plugin Development</a></li> </ul>
</div>
<div class="footer__col">
<h4>Company</h4>
<ul class="footer__links">
<li><a href="../about.html">About Us</a></li>
<li><a href="../index.html#portfolio">Our Work</a></li>
<li><a href="../index.html#testimonials">Client Feedback</a></li>
<li><a href="../blog/index.html">Blog</a></li>
<li><a href="../contact.html">Contact</a></li>
</ul>
</div>
<div class="footer__col">
<h4>Contact</h4>
<ul class="footer__links">
<li><a href="mailto:project@help4bis.com">project@help4bis.com</a></li>
<li><a href="../contact.html">Submit a Brief</a></li>
<li><a href="../sos-fix.html">Emergency Fix</a></li>
</ul>
<p style="margin-top:1rem; font-size:13px; color:rgba(255,255,255,.4);">Brisbane, Queensland<br>Response within 24 business hours</p>
</div>
</div>
<div class="footer__bottom">
<span>© 2026 HELP4BIS, a trading name of Dutch Digital Dynamics Pty Ltd · ABN 86 081 237 087</span>
<span><a href="../privacy.html">Privacy Policy</a> · <a href="../terms.html">Terms</a></span>
</div>
</div>
</footer>
<button id="back-to-top" aria-label="Back to top" style="position:fixed;bottom:24px;right:24px;width:44px;height:44px;background:var(--red);border:none;border-radius:50%;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .3s ease;box-shadow:var(--shadow-md);">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="18 15 12 9 6 15"/></svg>
</button>
<script src="../assets/js/main.js"></script>
<script src="../analytics/tracker.js" defer></script>
</body>
</html>