Real estate — Tampa, FL

Weston Moneyhan

A listings site the agent can run on his own.

A fast public site, a custom CMS for properties, and traffic measurement that uses no cookies and no third-party tracker.

Mandate
Site, CMS, analytics
Role
Design, build, backend, deployment
Stack
Static HTML · GSAP · Node/Express · systemd
Live
weston.autokhalid.com ↗
The Weston Moneyhan homepage
01 — In short

The short version

Where it startedRenting an audience

A private advisor's listings lived on portals he did not control, next to every competitor in the county. No own front door, no own data, no way to publish a property without asking someone.

What I didSplit it in two

A static public site that nginx serves straight off disk, and a small CMS behind it that only the admin paths touch. He adds a property through a form; buyers get a page that loads immediately.

Where it landedHe runs it

Listings, galleries and enquiries are his to publish. Traffic is measured on his own server, with no cookie banner, because there is no cookie.

02 — The project

Three decisions

01

Static pages for buyers, a CMS only for the agent

The public site is plain HTML served directly by nginx. Only the admin, API and property routes proxy to the Node service. That keeps buyer-facing pages at the speed of a file read, and it means the CMS can be restarted — or fall over — without the site going with it.

Property data is written once and rendered into pages, rather than queried on every visit.

  • nginx static root
  • Express CMS
  • systemd service
  • Separated failure domains
02

Measure the traffic without tracking the person

No Google Analytics, no third-party script, no cookie. A single deferred beacon records the view, how long the page was actually visible, and how far down it got — sent on page-hide so it survives a tab closing.

The visitor id is a one-way hash of a daily-rotating salt with the IP and user agent. It is enough to tell two visits apart within a day and useless the day after. No raw IP is ever written to disk, and country comes only from the header Cloudflare already adds.

It opts itself out of automation and of the agent's own admin visits, so test runs and his own browsing never inflate his numbers.

  • First-party beacon
  • Daily-rotating hash
  • No cookies
  • sendBeacon
  • Bot filtering
03

Let the browser do the fetching, not the server

Pulling a listing in from its source automatically is not available: one source refuses every server request at its edge, the other answers with a browser check, and the terms of both forbid automated extraction. I verified that from this server rather than assuming it.

So the import works the other way round. On a listing page he is already looking at, a bookmarklet reads the structured data the page publishes about itself and hands it to the CMS, which pre-fills the form. He reviews it; nothing saves on its own.

The handoff travels in the URL fragment, which browsers never send to a server — so none of it lands in a log.

  • Bookmarklet
  • JSON-LD
  • Fragment handoff
  • Review before save
03 — Under the hood

What it actually does

Listings CMS

Add, edit and retire properties from a browser, with image uploads.

Property pages

A template per listing — gallery, details, enquiry form.

Catalog

Filterable index of everything currently represented.

Traffic dashboard

Views, dwell, scroll depth, sources, devices, countries, with deltas against the previous period.

CSV export

Daily rows out of the dashboard for anyone who prefers a spreadsheet.

Enquiry tracking

Inquiry, call and email actions recorded as events, not guesses.

04 — The result

Where it landed

Independence
Properties are published by the agent, from a form, without a developer in the loop.
Speed
Buyer-facing pages are static files — no query, no render step, no CMS in the request path.
Privacy
No cookie, no third-party script, no raw IP stored. Nothing to disclose because nothing is shared.
Visibility
He can see which listings get opened, how far people read, and where they came from.

Visitor numbers belong to the client, so they are not published here.

Weston Moneyhan listings
Next project

Moroccan Airports