08 · Marketplace
A marketplace that closes deals, not just displays them.
Brokher.com is a Vue/Nuxt SSR app served through CloudFront. Its job is discovery and trust; the transaction happens on the same page via embedded Zettlein and Proassistly RPC.
Topology
Read-optimized on the edge.
Crawler / user ──▶ CloudFront ──▶ Nuxt SSR ──▶ marketplace-svc (read model)
│ │
│ ├─ OpenSearch (facets)
│ ├─ Postgres (canonical)
│ └─ Redis (hot cards)
│
▼
Zettlein widget ──▶ ai-orchestrator-svc
│
▼
tool actions ──▶ ProassistlyPage anatomy
Every PDP is a transaction surface.
mkt/01
Media reel
Photos · plan · tour
AI-picked hero, floor plan, walkthrough video, 3D tour and neighborhood pack.
mkt/02
Truth panel
Price · title · rules
Price benchmark, title type (hard/soft/strata), foreign-ownership eligibility for the current visitor.
mkt/03
Legal note
Jurisdiction-aware
Auto-inserted disclosures per country and property type; sourced from the same DSL as the contract engine.
mkt/04
Recommended services
Stage-aware
Cleaning, staging, legal, valuation, financing — offered by proximity and reviews.
mkt/05
Zettlein assistant
Scoped to listing
Ask anything about this property; book a tour, run eligibility, submit an offer.
mkt/06
Contact & offer
Structured, not free-text
Offers are structured JSON, not messages. This is how Zettlein can negotiate.
SEO & i18n
Built to win Khmer, English and Chinese SERPs.
SSR + structured data
Nuxt · schema.org/RealEstateListing
Every property page renders server-side with schema.org markup, canonical URLs and language alternates.
Locale routing
/km /en /zh
Path-prefixed locales, hreflang tags, translated slugs, currency-aware pricing. Khmer is the default.
Programmatic hubs
City · district · category
Auto-generated hub pages (e.g. "Condos in BKK1 under $200k") backed by OpenSearch and refreshed on listing events.
Performance budget
LCP ≤ 2.0s on 4G
Edge cache, image formats (AVIF), lazy media, no client-side hydration for content-only pages.