Skip to content

How to build: Onboarding ​

implemented /extranet/onboarding, /extranet/onboarding/[module]/setup.

Wizard: property type → location → details → amenities → photos → first room / rate → payment → policy → publish.

Winner for the property row: Middleware Backend (live). Photos: file-manager (live).

Middleware Backend · winner · live

POST https://middleware-dev.bookdirect.live/api/v1/nellalink/properties

http
Authorization: Bearer {partner_access_token}
Content-Type: application/json
json
{
  "name": "ABC Hotel Lagos",
  "description": "A 10-room boutique hotel in Victoria Island.",
  "propertyType": "hotel",
  "address": "12 Admiralty Way, Victoria Island",
  "city": "Lagos",
  "state": "Lagos",
  "country": "Nigeria",
  "latitude": 6.4281,
  "longitude": 3.4219,
  "amenities": ["swimming_pool", "free_parking"],
  "images": ["https://cdn.example.com/cover.jpg"]
}

propertyType: hotel | shortlet | apartment | villa | guesthouse. Middleware writes Core property as draft and sets owned_by from JWT.

Screens in this flow ​

ScreenNotes
Onboarding Start/extranet/onboarding
Property Type SelectionpropertyType on create
Property Locationaddress, city, state, country, lat/lng
Property Details / Descriptionname, description
Amenitiesslugs from the local tick list in amenities — not labels
Property Photos / Google Photos ImportFile manager; Google import to implement
First Room Setup / First Rate Plan SetupRooms and Rates
Payment SetupPayments and Distribution
Policy SetupCore metadata / extra_data on property — still Core if no Middleware field
Publish Property / Onboarding CompletionPUT .../properties/{id} with "status": "active"

Called by Middleware Backend, not by frontend ​

POST https://backend-dev.bookdirect.live/public/api/v1/nellalink/smart-meta-manager/entity/property

API-first. Middleware Backend wins over Core Backend when both exist.