Skip to main content
All Docs
FeaturesPurple PepperUpdated April 6, 2026

Offers Dashboard

Offers Dashboard

The Offers dashboard provides a multi-stage pipeline view for managing rental offers. It is available at /dashboard/offers.


Pipeline Stages

Offers move through nine sequential stages:

StageDescription
InvitedApplicant has been invited to make an offer
In ProgressOffer is being prepared
With AgentOffer is under agent review
Awaiting AmendmentsChanges have been requested
Sent to LandlordOffer has been forwarded to the landlord
Landlord ReviewedLandlord has reviewed the offer
AcceptedOffer accepted
RejectedOffer rejected
CancelledOffer withdrawn or cancelled

Each stage column is colour-coded. The badge and header colour are consistent across the pipeline view and the offer detail page.


Offer Cards

Each card in the pipeline displays:

  • Applicant name
  • Property address (if assigned)
  • Offered rent (monthly)
  • Last updated timestamp (relative, e.g. "3 hours ago")

Clicking a card opens the full offer detail page.


Filtering & Search

Property Filter

A dropdown above the pipeline lists all active properties. Selecting a property filters the pipeline to show only offers for that property.

The selected property is reflected in the URL as a ?propertyId= query parameter, so filtered views can be bookmarked or shared.

Example URL:

/dashboard/offers?propertyId=prop_abc123

Search

The search bar filters cards by applicant name or property address. Search and property filter can be used together.


Offer Detail Page

Each offer has a dedicated detail page at:

/dashboard/offers/[id]

The detail page shows:

FieldDescription
ApplicantFull name of the applicant
PropertyProperty address linked to the offer
Offered RentMonthly rent amount proposed
Assigned AgentUser ID of the agent handling the offer
CreatedFull date and time the offer was created
Last UpdatedRelative time since the last change
StatusColour-coded badge matching the pipeline stage

A Back to offers link returns to the pipeline view.

While the offer is loading, a skeleton placeholder is shown. If the offer cannot be found or an error occurs, an error message is displayed.


Data Model

The offers table includes the following property-related columns added in v0.1.21:

propertyId: text("property_id")       // foreign key to the properties table
propertyAddress: text("property_address") // denormalised address for display

An index (offers_property_idx) is created on propertyId for efficient filtering.


Audit Logging

All write operations on offers are audit-logged:

  • Create — logged when a new offer is submitted
  • Update — logged when offer fields are changed
  • Status change — logged each time the stage changes

API Reference (tRPC)

All procedures are under the offer router.

offer.list

Returns a paginated list of offers.

Input filters:

ParameterTypeDescription
propertyIdstring (optional)Filter by property
searchstring (optional)Search by applicant name or property address

offer.pipelineSummary

Returns offer counts grouped by pipeline stage.

Input filters:

ParameterTypeDescription
propertyIdstring (optional)Scope summary to a single property

offer.listProperties

Returns all active properties. Used to populate the property filter dropdown.

offer.getById

Returns a single offer by ID.

Input:

ParameterTypeDescription
offerIdstringThe offer ID

offer.create

Creates a new offer. Triggers an audit log entry.

New fields in v0.1.21:

FieldTypeDescription
propertyIdstring (optional)Property to associate
propertyAddressstring (optional)Address for display

offer.update

Updates an existing offer. Triggers an audit log entry.

New fields in v0.1.21: same as create above.