The mechanism

One file in. Every building out.

Your portfolio is data, not eighteen hand-built pages. Adding a building is a row, not a project, and every guarantee applies to it the moment it exists.

portfolio.jsonone structured file THE GATEstructure · access · language Generated buildrefuses to ship on failure Building site 1Building site 2Building site N COMMAND CENTER Add building N+1: one row of data, every guarantee applies the moment it exists.

How it goes

From your property list to a running system

TODAY

Send your property list

A link to your current site or listings is enough. Two minutes of your time, in the form at the bottom of this page.

DAY 7

Open your preview link

Three of your buildings, built for real: your brand, your photos, your policies. Show your leasing team. Show your owner. Free either way.

WEEKS 2 TO 6

The whole portfolio goes live

Corporate foundation plus a site per building, every page through the publishing gate: fair housing language, accessibility floor, all-in rent totals.

EVERY MONTH

We run it, you read the report

Local SEO worked per property, eligible sales or leasing office profiles managed with owner authorization, leads tagged and routed, and a per-property report with freshness shown.

Step one

Your portfolio becomes one structured file

Address, beds, amenities, pet policy, photography, coordinates, program type, required fees. Most of this already exists in your listing feed, scattered and inconsistent. We normalise it once.

Normalising is not cosmetic. In one real portfolio we found the same amenity listed twice under two spellings, six different labels for parking, and three for laundry that mean genuinely different things to a renter. In-unit laundry, laundry hookups and a shared laundry room are three different products. Conflating them produces tours that waste everyone's time and reviews saying the listing lied.

Step two

Every building gets a real page

Its own everything

Unique title, description and canonical URL, so search engines and renters have a distinct, accurate property surface instead of one blended portfolio page.

Structured data with real coordinates

ApartmentComplex markup with address, geo and normalised amenities, which gives search engines structured facts they can understand. It does not guarantee crawling, rich results or local ranking.

Amenities ranked by evidence

From the NMHC and Grace Hill 2024 Renter Preferences Survey, 172,703 renters across 4,220 communities: air conditioning and in-unit laundry both clear 93%. Zillow reports twice as many renters filter for pet-friendly as for any other amenity, and pet policy is the one operators bury.

Its own tagged lead form

Every enquiry carries the building it came from, so a lead is attributable to a door rather than to one blended company number.

Honest scope: form attribution is per building today. Per-building call tracking is onboarding work plus a pass-through vendor cost, not something we have already built. Google also treats rental properties themselves as ineligible for Business Profiles. A real sales or leasing office may qualify, with the operator owning or authorizing it.

Step three

The gate

Nothing publishes until it passes. This is the part that is genuinely different, and it is the part you can watch run.

CHECK 01

Structure

Unique titles and canonicals, valid structured data, sitemap coverage, page count matching the portfolio, and a rent never shown without its all-in total.

CHECK 02

Accessibility

Contrast computed against your actual brand tokens, alt text, form labels, heading order, landmarks, and no measurement tag loading before consent.

CHECK 03

Published language

Nine rules over what your pages say, each carrying its basis and a concrete fix. The rules are themselves tested on every run against known-bad copy.

Your brand is never the thing that gets changed

Brand accents are the usual accessibility culprit. One client's orange scores 3.04 to 1 against a 4.5 to 1 floor.

The fix is never to change your brand. The accent stays exactly as it is wherever it works, which is as a fill with dark text on it, and the build derives a darkened variant only for the places the accent is used as text. Computed per client, so it is correct for any palette without anyone remembering to check. One client's colour needed no change at all; another's was automatically lifted until it cleared the floor.

Step four

A dated record of what shipped

Every build writes a manifest: what each page contained, a content hash for it, when it was published, and which checks passed on that exact build.

When counsel, an owner or an allocator asks what a specific building published on a specific date, that question currently has no answer anywhere in a typical organisation, including inside the PMS. Two manifests also settle the other question nobody can answer today: did this page change, and when.

See it run on your buildings, free

The proof

Watch the build refuse

Not a promise of diligence. This is the real output, run against a real portfolio, and the exit code is the guarantee.

$ node engine/gate.mjs clients/sierra
 
  sierra
  ------
  verify        pass   property pages     18/18
  accessibility pass   NO FAILURES, 0 warning(s)
  fair housing  pass   No high severity flags.
  not applicable [n/a] FH-FEE-TRANSPARENCY (tested nothing, not a pass)
 
  linter self-test  all 9 rules fire
 
GATE PASSED
Get 3 buildings built free