Skip to main content

Example: real-estate-runtime

real-estate-runtime is the second canonical metadata Marketplace App. App id: real-estate-runtime. hosting: runtime. No SDK process.

It exists to prove the model is not restaurant-specific. Different primitives (property / lead / viewing), same installer, FlowRunner, RuntimeAdapter, events, and managed storage.

Package path: qefro-plugin-platform/docs/examples/real-estate-runtime/.

Package layout

real-estate-runtime/
├── manifest.yaml
├── entities/
│ ├── property.yaml
│ ├── lead.yaml
│ └── viewing.yaml
├── workflows/
│ └── create-viewing.yaml
└── ui/
├── theme.yaml
├── navigation.yaml
├── pages.yaml
├── layouts.yaml
├── widgets.yaml
└── sources.yaml

Same tree as restaurant-pro-runtime. Only the YAML nouns change.

Manifest (excerpt)

id: real-estate-runtime
name: Real Estate
version: 0.1.0
hosting: runtime
description: Property listings, leads, and viewings as a metadata Marketplace App
category: real-estate
entities:
- property
- lead
- viewing
flows:
- create-viewing
events:
- viewing.created

Entities

EntityRole
propertyListing (title, address, price, status)
leadProspective buyer (name, phone, email, person_id)
viewingScheduled visit (property_title, lead_name, date, person_id)

lead.person_id and viewing.person_id bind to the platform Person CRM (ref_entity: person). Do not invent a real-estate-local contacts store.

Business Flow

workflows/create-viewing.yaml — same step types as Restaurant Pro:

id: create-viewing
steps:
- id: ask_property
type: ask
field: property_title
- id: ask_lead
type: ask
field: lead_name
- id: ask_date
type: ask
field: date
- id: create
type: tool
tool: entity.viewing.create
execution: runtime
- id: confirm
type: message
- id: done
type: complete

Chat “Schedule a viewing tomorrow” starts this flow on FlowRunner. The tool is entity.viewing.create (Runtime capability).

UI

PageNotes
TodayIntro + property status + viewings
Properties / ListingEntity table and detail
LeadsEntity table
ViewingsForm (trigger: create-viewing) + table
Contactshost: contacts
Automationshost: automations

Sources:

- id: properties
type: entity
target: property
- id: leads
type: entity
target: lead
- id: viewings
type: entity
target: viewing