Rob's Gardens

Landscaping website with AI-powered geo availability, postcode scheduling, and GHL voice/chat booking.

Updated 2026-04-12
In This Guide
🌱

Overview

What is Rob's Gardens?

Rob's Gardens is a landscaping business website for greater Sydney. The core feature is a geo availability system that maps 2000+ Australian postcodes to a rotating 2-week service schedule. Customers can check if their area is serviced and when, either through the GHL AI chatbot (Tom) or the public schedule page. Admins manage service zones through an interactive map interface.

How It All Connects
1
Customer asks
"Do you service 2101?"
2
GHL AI calls API
/api/check-availability
3
API checks schedule
Vercel Blob Storage
4
Returns result
Day, area, next date
5
AI responds
"We service Mondays!"
📍

Geo Availability System

The core engine behind service area lookups

The geo system is the backbone of the site. It connects customer postcodes to service zones, calculates which week of the rotating schedule we're in, and returns human-friendly messages that the GHL AI bot can relay directly to customers.

Postcode Database

2000+ Australian postcodes mapped to suburb names. Supports both postcode-to-suburb and suburb-to-postcode lookups with fuzzy matching.

2000+ Entries

Service Zones

5 geographic zones, one per weekday (Mon–Fri). Each zone covers a cluster of suburbs/postcodes in greater Sydney.

5 Zones

Rotating Schedule

2-week rotation anchored to a start date. Week 1 and Week 2 can have different zone assignments, enabling fortnightly service patterns.

2-Week Cycle

Next Date Calculation

Automatically calculates the next service date for a given postcode based on today's date and the rotating schedule. Accounts for week parity.

Auto-Calculated

Human-Friendly Messages

Every API response includes a message field written for the AI bot to relay directly. No parsing needed — just forward to the customer.

AI-Ready

Graceful Fallback

If Vercel Blob Storage is unavailable, the API falls back to the static data/zones.json file. Service never goes down.

Always On
🔍

Postcode Lookup

How "Do you service my area?" works

The postcode lookup is the most-used feature. A customer provides their postcode (e.g. 2101), and the system tells them whether that area is serviced, which day, and the next available date.

How to Check a Postcode
Customer Journey
1
Customer provides postcode
Via chat, voice, or directly
2
API scans all zones
Both Week 1 and Week 2
3
Match found?
Postcode in zone's list
4
Calculate next date
Based on today + week parity
Example: Postcode Is Serviced
// Request GET /api/check-availability?postcode=2101 // Response { "available": true, "day": "Monday", "area": "Elanora Heights", "week": 1, "next_date": "Monday 17 March 2026", "message": "Great! We service Elanora Heights (postcode 2101). We're available on Mondays (Week 1), with our next service scheduled for Monday 17 March 2026. Would you like to book?", "matches": [ { "week": 1, "day": "Monday", "area": "Elanora Heights", "label": "Northern Beaches Central", "nextDate": "Monday 17 March 2026" } ] }
Example: Postcode Not Serviced
// Request GET /api/check-availability?postcode=2000 // Response { "available": false, "message": "We don't currently service postcode 2000. We primarily cover the Northern Beaches and greater Sydney area. Please enter a different postcode or call +61 468 170 318." }
The API accepts both GET (query param ?postcode=2101) and POST (JSON body {"postcode":"2101"}). CORS is enabled so the GHL AI can call it from anywhere.
A postcode can appear in multiple weeks. The matches array returns all matching zone/week combinations, and the top-level fields use the soonest next date.
📅

Areas by Day

How "What areas do you cover on Monday?" works

The second endpoint answers day-based queries. When a customer asks "What areas do you service on Tuesday?", the API returns every suburb and postcode for that day's zone.

Example Response
// Request GET /api/areas-by-day?day=Monday // Response { "available": true, "week": 1, "day": "Monday", "label": "Northern Beaches Central", "areas": [ { "name": "Elanora Heights", "postcode": "2101" }, { "name": "Narrabeen", "postcode": "2101" }, { "name": "North Narrabeen", "postcode": "2102" } ], "postcodes": ["2101", "2102"], "message": "On Mondays, we service the following areas: Elanora Heights (2101), Narrabeen (2101), North Narrabeen (2102)." }
The day parameter is case-insensitive. monday, Monday, and MONDAY all work. The current week number is auto-detected from today's date.
🔄

2-Week Rotating Schedule

How the fortnightly cycle works

The schedule operates on a 2-week rotation anchored to a fixed start date. The system calculates whether today is in Week 1 or Week 2, and returns results accordingly. This allows different suburbs to be serviced on alternate weeks.

Current Default Schedule (Week 1)
DayZone LabelPostcodesSuburbs
MondayNorthern Beaches Central2101, 2102Elanora Heights, Narrabeen, North Narrabeen
TuesdayUpper North Shore2070, 2071, 2073Lindfield, Killara, Pymble
WednesdayNorthern Beaches North2103, 2104, 2105Mona Vale, Bayview, Newport
ThursdayLower North Shore2067, 2068, 2069Chatswood, Castlecrag, Roseville
FridayPalm Beach / Peninsula2106, 2107, 2108Bilgola, Avalon, Palm Beach
How Week Parity Works
Week Calculation
1
Anchor date set
e.g. 2026-03-30 = Week 1 start
2
Count days elapsed
From anchor to today
3
Divide by 14
Even cycle = Week 1, Odd = Week 2
4
Return correct zones
Week 1 or Week 2 schedule
Anchor date matters. If the anchor date is changed in the schedule settings, it shifts which week is "Week 1." This affects all next-date calculations. Only change this if you understand the impact.
🛠

Managing the Schedule

Admin interface at /manage-schedule

The /manage-schedule page is where admins add, remove, and reorganise service zones. Changes save to Vercel Blob Storage and take effect immediately for all API lookups.

Step-by-Step: Adding a New Postcode
Add a Suburb to a Day
1
Go to /manage-schedule
Opens the admin editor
2
Select Week 1 or Week 2
Toggle at top of page
3
Find the day's zone
e.g. Monday's zone
4
Type suburb or postcode
Autocomplete suggests matches
5
Click Save All Changes
Persists to Vercel Blob
Test after saving. After adding new postcodes, verify them by calling /api/check-availability?postcode=XXXX in your browser or asking Tom in the chat widget.
The /manage-schedule page is currently publicly accessible (no authentication). Anyone with the URL can edit the schedule. Consider bookmarking it but not sharing the link publicly.
🌏

Service Zones

Geographic coverage by day

Service zones group suburbs and postcodes into daily routes. Each weekday covers a different geographic cluster to minimise travel time between jobs.

Monday: Northern Beaches Central

Elanora Heights, Narrabeen, North Narrabeen
Postcodes: 2101, 2102

Zone 1

Tuesday: Upper North Shore

Lindfield, Killara, Pymble
Postcodes: 2070, 2071, 2073

Zone 2

Wednesday: Northern Beaches North

Mona Vale, Bayview, Newport
Postcodes: 2103, 2104, 2105

Zone 3

Thursday: Lower North Shore

Chatswood, Castlecrag, Roseville
Postcodes: 2067, 2068, 2069

Zone 4

Friday: Palm Beach / Peninsula

Bilgola, Avalon, Palm Beach
Postcodes: 2106, 2107, 2108

Zone 5
These are the default Week 1 zones. Week 2 can be configured differently via /manage-schedule for fortnightly rotation. The extended coverage area includes Eastern Suburbs, Greater Western Sydney, and Central Coast.
🤖

GHL AI Integration

Tom, the virtual assistant

The site embeds GHL's Conversation AI widget as a floating chat orb. The AI assistant ("Tom") handles voice calls, text chat, postcode lookups, and booking. Tom calls the geo API endpoints behind the scenes to answer availability questions.

What Tom Can Do
How Tom Uses the API
Voice Call Example
1
Customer calls
+61 468 170 318
2
Says "I'm in 2101"
GHL extracts postcode
3
API returns match
Monday, Elanora Heights
4
Tom responds
"We service your area Mondays!"
5
Offers to book
Opens GHL calendar
🌿

Services & Pricing

What Rob's Gardens offers
ServiceDescription
Lawn Care & MowingProfessional mowing, edging, and lawn maintenance
Hedge TrimmingPrecise hedge shaping and boundary maintenance
Pruning & WeedingExpert plant care and year-round garden health
Seasonal Garden CareMulching, spring prep, and seasonal maintenance
Green Waste & ClearingGarden cleanup and eco-friendly waste disposal
Hard Surface CleaningWaterblasting patios, paths, and driveways
Garden MakeoversComplete transformations, planting, and repairs
Pricing Tiers
TierRateDetails
Regular Maintenance$150/hour2-person team, all standard services
Pre-Sale Makeover$2K – $4KTypical 3–4 day property transformation
Ride-On Mower Service$175Per service with operator
Ride-On Mower Dry Hire$200/dayMon–Thu, self-operated
Ride-On Mower Weekend$300 – $400Fri–Sun hire
📅

Booking Flow

How customers book a service

All bookings are handled through GHL's system. The website provides multiple entry points.

AI Chat (Tom)

Click the floating orb or "Chat with Tom" button. Voice and text supported 24/7. Tom checks availability and connects to the booking calendar.

24/7

Phone Call

Call +61 468 170 318. Tom answers via GHL voice AI. Can check postcodes, discuss services, and schedule appointments.

Voice AI

Contact Form

Fill in name, email, phone, and message at the bottom of the page. Submits to GHL CRM as a lead. Team follows up within 24 hours.

Lead Gen
🗒

Pages & Navigation

Site structure
PageURLAccessPurpose
Landing Page/PublicHero, services, pricing, testimonials, contact, chat widget
Public Schedule/schedulePublicView the current 2-week service schedule in table format
Manage Schedule/manage-scheduleAdminEdit zones, postcodes, and areas with interactive map
🔌

API Reference

All three endpoints at a glance
EndpointMethodParametersPurpose
/api/check-availabilityGET / POSTpostcode (string)Check if a postcode is in a service zone and get next date
/api/areas-by-dayGET / POSTday (string, e.g. "Monday")List all suburbs and postcodes for a given day
/api/save-schedulePOSTschedule (JSON object)Save updated schedule to Vercel Blob Storage (admin)
Data Storage
📞

Contact & Support

How to reach Rob's Gardens
ChannelDetails
Phone+61 468 170 318 (AI answers 24/7, team Mon–Sat 7am–5pm)
Emailinfo@robgardens.com.au
SMS+61 468 170 318
AI ChatFloating orb on the website (voice & text)
Web FormContact section at bottom of landing page
Service AreaGreater Sydney: Northern Beaches, North Shore, Eastern Suburbs, Western Sydney, Central Coast