URTH Landscaping
Everything a person or an AI needs to pick the work up mid-stream: what exists, what was decided, why, and what happens next.
Last updated 2026-08-15URTH Landscaping is a landscape design and build company in Miami. It measures a property, designs the planting, and prices the job.
The app does that whole chain in order: measure the property → read the site (sun, tree canopy, drainage, terrain) → produce a planting plan → produce a priced proposal. Every later step is fed by the measurement, so nothing downstream is guessed.
It lives at apps.urthlandscaping.com. It is an internal working tool, with two client-facing faces (the property report and the designer mood board) that hide the internal detail.
Think of it as one workshop with a front door, a measuring bench, and a set of specialised benches around it.
?view=client and it becomes the clean client-facing version with the internal detail stripped out.urth-report.htmlaharveyrianhard-stack/urth-property-brain, branch main.main. Live in roughly 60 seconds. There is no build step and no manual deploy.wadinxqplrggagkvrdag. It is shared with a separate trading project called "scintilla" — URTH is in the process of being separated onto its own home on Fly.io under the personal Google account (aharveyrianhard@gmail.com).apps.urthlandscaping.com.urth-config.js. Pages read it from there — no page hardcodes the address any more. The keys in it are the public browser keys, public by design; a service key must never go in that file.api/c.js. Heavy pages ask it for a pre-made answer instead of rebuilding one.urth_cache holds those precomputed heavy renders, so a page that used to take tens of megabytes now fetches a small file.All of the following is done, pushed, and live.
page-specs.js.urth-config.js — now holds it. Migration becomes a one-file change instead of a page-by-page hunt.One file, page-specs.js, carries a spec for each page: what it is for, what it reads, what it writes — and a list of decision → reason pairs. Right now that is 106 decision → reason pairs across 27 pages.
Each pair records a call that was made and the reason behind it. Not "we pinned the species count to 393", but "we pinned it to 393 because 393 is what the plant library actually returns when you count it, and the old 540 was a number nobody had measured".
Those pairs render in two places automatically: a collapsible Page spec footer at the bottom of the page itself, and inside each node on the generated system map. The footer is hidden on the client-facing views, so a client never sees it.
page-specs.js. That is what stops the next session from undoing a deliberate choice because it looked like a bug — and it is why "why did we do it this way?" has an answer that outlives the chat it was decided in.See it all in one place: the generated system map.
page-specs.js, with the reason, not just the decision. See section 5._v2_final. Version history is what git is for.This is the visual language work, and it is the front of the queue. The mood board is at proto-moodboard.html — the same sample property drawn three ways:
The agreed direction: Architect's shapes with Field's colour, and Nocturne for on-screen. The report re-skin prototype is proto-report-v6.html.
Bring Sun Sweep up to the Sun 3D bar rather than leaving it as the flat view.
Move URTH off the shared Supabase project onto its own home. One thing needs Alan's hands: signing into Fly with Google, once. Everything after that is automatable.
maps.urthlandscaping.com/suppliers needs a DNS CNAME record before it will resolve.
index.html) has 2 stale tiles — Estimate and Jobs still point into the old Property Brain tabs (brain.html?tab=est and ?tab=job), but those are their own pages now.