Real estate

Viewings and offers for an estate agency

An estate agency schedules viewings per property and agent, records feedback after each one, and tracks offers on a property in order with their status. The seller sees viewing feedback and offers on their own property and nothing else.

Automatically generated draft

Written by machine against our own engineering playbook. The company is invented; the decisions are the ones we would make on a real build. A reviewed blueprint goes further — nine sections, agreed line by line, and it is what the build is tested against.

Section 01 · What has to work

The core loop of scheduling viewings, collecting agent feedback, and ordering offers must work without race conditions.

Section 03 · Screens

Every screen, and what it is for.

  • ›Viewing Grid — Agent schedules slots; instant calendar render.
  • ›Feedback Form — Agent logs viewing notes; instant submission.
  • ›Offer Tracker — Agent or Seller orders offers; instant status updates.
  • ›Seller Portal — Seller views feedback and offers; instant read.

Anything not on this list is not in version one. That is what keeps a fixed price fixed.

Section 04 · The data model

What it stores, and who can read a row.

Property

id uuid, title text, address text, seller_id uuid, created_at timestamptz

Access · Sellers read their own property rows; agents read all.

Viewing

id uuid, property_id uuid, agent_id uuid, scheduled_at timestamptz, status enum(scheduled,completed,cancelled), notes text, rating int

Access · Assigned agent and property seller read the viewing row.

Offer

id uuid, property_id uuid, buyer_name text, amount numeric(10,2), status enum(submitted,accepted,rejected,withdrawn), submitted_at timestamptz

Access · Property seller and agents read offers for their property.

Those access rules belong in the database, not in the screens. Someone who edits the address bar still cannot read a row that is not theirs — and the test that proves it blocks delivery if it fails.

Section 05 · States

submitted → accepted | rejected | withdrawn

Most scope arguments three weeks into a build are really arguments about a state nobody named at the start.

Section 06 · Where this breaks

What bites products like this one.

Double-booking an agent for overlapping viewings.

Enforce strict database exclusion constraints on agent schedules before confirming slots.

Sellers seeing offers or feedback for properties they do not own.

Enforce row-level security policies in PostgreSQL checking seller_id against auth.uid().

Section 08 · Deliberately left out

What version one does not do.

  • ×Automated calendar sync (Google/Outlook) — complex third-party auth, add in v1.1 after core scheduling proves stable.
  • ×Automated buyer counter-offer threads — requires complex multi-party state machine, defer to post-launch.

This is the section that protects the date, and the only place in the document where somebody says no. It is also why clients trust the rest of it.

Still open

What we would ask before quoting.

  • Can a seller reject an offer directly in the portal, or must an agent process it first?
  • Does viewing feedback require a numeric rating alongside the text notes, or just text?
  • How should agents be notified when a seller views their submitted feedback?

Your product, not this one

Get this written for what you are actually building.

Describe it in a sentence and the generator returns the same sections for your own product. Free, no email, nothing saved to a list.

Next step

Find out if your idea fits in 10 working days.

Tell us what you want to build. We reply the same day with a straight yes, no, or here is what we would cut.

NDA available on request