Step 18 Review and Checkout

Purpose (Product)

This final step provides landlords with a comprehensive review of their property listing and selected services before completing the onboarding process. It serves as a critical checkpoint where landlords can verify all their choices, make final adjustments to amenities, and complete payment for their selected services. The step consolidates all previous decisions into a clear summary, ensuring transparency about costs and enabling informed decision-making before committing to the platform. This review process builds confidence and reduces post-purchase regret by giving landlords full visibility into what they're purchasing and what their property listing will look like to potential guests.

After successful submission, the Operations team receives property requests on their dashboard where they can complete the connection to the selected OTAs (Online Travel Agencies) such as Airbnb, Booking.com, Vrbo, Expedia, and Agoda. This handoff ensures that the landlord's property is properly listed and synchronized across all chosen distribution channels, enabling multi-channel booking management and maximizing the property's visibility to potential guests.

![[Desktop 14.png]] ![[Amenities Edit Modal 1.png]]

UX Flow (What the user sees)

The review step presents a comprehensive two-column layout that displays all property information and service selections.

  • Left column

    • Property title and description

    • Detailed amenities section with an "Edit" button that opens a modal for last-minute changes

    • Amenities displayed as a grid of cards with icons and names; the modal allows full editing with category grouping and validation

    • Room details with cover images, room types, and photo counts

  • Right column

    • Pricing breakdown and payment section:

      • Selected management plan with base price

      • Additional channel costs (excluding those included in the management tier)

      • Selected services from the cart

      • Prominent total cost

    • Payment options:

      • Use existing payment method or add a new card via Stripe CardElement

      • Saved cards with options to set as default or delete

      • Real-time validation for new card entries

  • Bottom

    • "Checkout" button completes the process, triggering backend submission that processes payments, creates subscriptions, sends confirmation emails, and activates the property listing

System Flow (How it works)

Data Touched

Frontend Data Processing

  • Property Details: Title, description, amenities, rooms, photos

  • Service Selections: Management tier, channels, cart items

  • Payment Information: Stripe payment methods, card details

  • Cost Calculations: Base price, channel costs, service costs, total

Backend Data Updates

  • properties.status: Updated to "ACTIVE"

  • properties.minimumNights: Set to 28 for MID_TERM host types

  • subscriptions: Created if not exists with ACTIVE status

  • users.isOnboardingCompleted: Set to true

  • propertyCart: Cleared after processing

Validation Rules

  • Payment Required: If total > 0, valid payment method must be provided

  • Amenities: Minimum 5 amenities required (enforced in edit modal)

  • Form Validation: Confirmation checkbox required for submission

APIs Called

Frontend API Calls

PATCH /api/properties/{id}

  • Purpose: Activate property before payment processing

  • Payload: { propertyDetails: { status: "ACTIVE" } }

  • Response: Updated property object

POST /api/marketplace/properties/{id}/submit-add-property-payment

  • Purpose: Add payment method to user account

  • Payload: { paymentMethodId: string }

  • Response: Success confirmation

POST /api/properties/{id}/cart/process

  • Purpose: Process all cart items (subscriptions and tasks)

  • Payload: { paymentMethodId: string }

  • Response: { itemsProcessed: number, message: string }

POST /api/properties/submit-onboarding-property

  • Purpose: Complete property submission and onboarding

  • Payload: { propertyId: string }

  • Response: Success confirmation

Backend Processing APIs

  • Cart Processing Logic

    • Recurring Services: Creates Stripe subscriptions via marketplace service

    • On-Demand Services: Creates tasks without payment for future execution

    • Cart Cleanup: Removes all processed items

  • Subscription Management

    • Creation: New subscription with ACTIVE status if none exists

    • Period Tracking: Sets currentPeriodStart to current date, currentPeriodEnd to null

  • Email Services

    • Admin Notification: New property submitted email to [email protected]

    • User Confirmation: Property submission confirmation to user

    • Welcome Message: Automated welcome message to landlord via chat

  • Chat Service Integration

    • Support Thread Creation: Creates chat thread between operations and landlord

    • Welcome Message: Sends automated welcome message from operations team

Integrations

Stripe Integration

  • Payment Method Creation: Secure card tokenization via Stripe Elements

  • Subscription Management: Automatic recurring billing setup

  • Payment Processing: Handles all payment-related operations

Email Service Integration

  • Template System: Uses predefined email templates

  • Admin Notifications: Real-time alerts for new property submissions

  • User Communications: Confirmation and welcome emails

Cart Service Integration

  • Item Processing: Handles both recurring and one-time services

  • Subscription Creation: Integrates with marketplace service for billing

  • Task Creation: Sets up on-demand services for future execution

Chat Service Integration

  • Support Thread Creation: Establishes communication channel between operations and landlord

  • Automated Messaging: Sends welcome message from operations team

  • User Role Management: Identifies operations team members (userRoleId: 3, hasFullAccess: true)

Email Notifications

Admin Notification Email

  • Subject: "New Property Submitted"

  • Template: "new-property-submitted"

  • Data Included:

    • propertyTitle: Property title

    • userEmail: Landlord's email address

    • userName: Landlord's name

    • dashboardUrl: Operations dashboard URL

User Confirmation Email

  • Recipient: Landlord's email address

  • Subject: "We've Received Your Property Submission"

  • Template: "property-submission-confirmation"

  • Data Included:

    • userName: Landlord's name

    • propertyTitle: Property title

    • dashboardUrl: Hububb web base URL

Welcome Message Details

chevron-rightChat Thread Creation & Welcome Messagehashtag

Chat Thread Creation

  • Trigger: After successful property submission

  • Participants: Operations team member and landlord

  • Thread Type: Support thread for ongoing communication

Welcome Message Content

Operations Team Identification

  • Criteria: userRoleId = 3 AND hasFullAccess = true

  • Purpose: Identifies authorized operations team members to send welcome messages

State & Side Effects

Local State Management

  • Form State: React Hook Form with Zod validation

  • Payment State: Stripe Elements integration with error handling

  • UI State: Modal management, loading states, error messages

  • Amenities State: Temporary selection for edit mode

Cache Invalidation

  • Property Data: Refetched after amenities updates

  • User Data: Updated after successful submission

  • Payment Methods: Refreshed after card operations

Background Jobs

  • Email Sending: Asynchronous email delivery

  • Welcome Message: Automated message creation and chat thread setup

  • Subscription Setup: Background Stripe subscription creation

QA Checklist

Frontend Testing

Backend Testing

Email Testing

Chat Testing

Integration Testing

Audit Testing