Overview
Tutti Vacation needed a marketplace platform where Maui vacationers could discover and book local services — from massages and surf lessons to private chefs and babysitters. The founders, experienced in the vacation rental industry, recognized that guests often spend their holiday time on chores like grocery shopping, laundry, and meal prep instead of enjoying their trip.
They chose the Sharetribe Web Template as the foundation but quickly ran into a limitation: Sharetribe's default booking flow does not support post-booking negotiation. Providers needed the ability to propose adjustments to bookings after acceptance — a critical requirement for a services marketplace where scope often changes after the initial reservation.
Our team was engaged to design and implement this custom negotiation feature along with the full payment flow for adjustment charges and refunds, while keeping everything seamlessly integrated with Sharetribe's existing architecture.
💡
The Challenge
The Sharetribe Web Template provides a solid marketplace foundation with React and Express.js, but several technical challenges surfaced as we planned the custom features:
Rigid Transaction Process
Sharetribe's default booking process follows a fixed state machine: booked, accepted, completed. There was no built-in mechanism for providers to propose changes after a booking was accepted. Adding new states to this machine required deep understanding of Sharetribe's transaction engine and careful integration to avoid breaking existing flows.
Payment Adjustments
When a booking adjustment is accepted, the system needs to handle the payment difference — either charge the customer an additional amount or process a partial refund. Stripe's standard payment flow needed custom handling for these post-authorization modifications, including edge cases like expired payment methods and insufficient funds.
Real-Time Notifications
Both customers and providers needed immediate notification when adjustments were proposed, accepted, or declined. The existing email notification system had to be extended with new templates, new triggers, and clear messaging that explained the financial impact of each change.
UI/UX Complexity
The adjustment flow required entirely new screens: a proposal form for providers, a review screen for customers showing original versus proposed bookings side-by-side, and clear status indicators throughout the transaction lifecycle. All of this had to feel like a natural extension of the existing Sharetribe interface.
Multi-Service Marketplace
Unlike a typical single-category marketplace, Tutti Vacation offers nine or more distinct service categories, each with unique booking requirements — from hourly surf lessons to multi-day equipment rentals to recurring concierge services. The listing architecture needed to accommodate this variety without creating separate flows for each category.
⚡
Our Solution
We implemented a comprehensive solution that extended the Sharetribe platform while preserving its core architecture and upgrade path.
Custom Transaction States
We added three new states to Sharetribe's booking transaction process:
- adjustment-proposed — provider has submitted a modification request with new pricing and a reason for the change
- adjustment-accepted — customer has reviewed and approved the change, triggering payment processing
- adjustment-declined — customer has rejected the proposal, and the original booking continues unchanged
These states integrate cleanly with Sharetribe's existing state machine, preserving all default behaviors while enabling the new negotiation flow.
Booking Adjustment UI
For providers, we built an intuitive "Propose Adjustment" button that appears after booking acceptance. The form captures the new pricing, a reason for the change, and any modified service details. For customers, a dedicated review screen presents the original booking alongside the proposed changes with clear Accept and Decline buttons, plus a breakdown of the payment difference.
Stripe Payment Processing
We implemented bidirectional payment adjustment handling:
- When the adjusted price is higher, we capture an additional payment from the customer's stored payment method using Stripe PaymentIntents
- When the adjusted price is lower, we process an automatic partial refund to the customer's original payment method
- All payment modifications are logged with a full audit trail for dispute resolution
Email Notification System
We extended the existing notification pipeline with new Handlebars email templates for each step:
- Adjustment proposal notification sent to the customer with a direct link to review
- Adjustment accepted confirmation sent to the provider
- Adjustment declined notification sent to the provider with the customer's reasoning
- Updated booking confirmation sent to both parties reflecting the final terms
Service Category Architecture
We designed a flexible listing structure that accommodates all nine service types with category-specific fields and booking parameters, while sharing common infrastructure for payments, reviews, messaging, and provider verification.
📈
Results & Impact
The Tutti Vacation marketplace launched successfully and delivered measurable value to both travelers and service providers.
For Travelers
- A single platform to discover, compare, and book over nine vacation service categories
- Transparent pricing with the ability to negotiate adjustments after booking
- Free cancellation within 48 hours for worry-free reservations
- Optional nanny cam for babysitting bookings, adding trust for traveling parents
For Service Providers
- Ability to adjust bookings after acceptance, reducing cancellations and improving service accuracy
- Streamlined provider dashboard for managing bookings, availability, and payouts
- Direct access to a curated customer base of Maui vacationers ready to book
- Simple onboarding flow to create service listings and start accepting bookings
Technical Achievements
- Custom transaction state machine with three new states seamlessly integrated into Sharetribe's existing engine
- Bidirectional Stripe payment adjustments handling both additional charges and partial refunds
- Full email notification pipeline covering the complete adjustment lifecycle
- Responsive, mobile-first UI that matches Sharetribe's design language
- MongoDB integration for custom feature data running alongside Sharetribe's native database
Business Impact
- Created a new economic channel for Maui's local service workforce
- Reduced booking friction through the negotiation feature, leading to higher completion rates
- Platform architecture supports expansion to additional Hawaiian islands without restructuring
Technical Deep-Dive: Booking Negotiation Flow
The negotiation feature required changes across every layer of the Sharetribe stack.
Frontend (React + Redux)
- New Redux actions and reducers for managing adjustment state throughout the proposal lifecycle
- AdjustmentForm component for providers with validated price input and a reason field
- AdjustmentReview component for customers showing a side-by-side comparison of original and proposed terms
- Transaction status badges updated to reflect the three new states with appropriate color coding
- Optimistic UI updates with automatic rollback on API failure for a responsive user experience
Backend (Express.js)
- Custom API endpoints for creating, accepting, and declining adjustment proposals
- Stripe SDK integration for modifying PaymentIntents and processing refunds
- Webhook handlers for payment confirmation events with idempotency protection
- Email dispatch service extended with new Handlebars templates for each notification type
Database (MongoDB)
- Adjustment records storing original pricing, proposed pricing, timestamps, and current status
- Full audit trail for every payment modification made through the system
- Indexed queries optimized for the provider dashboard's booking management views
Infrastructure
- Sharetribe-hosted marketplace backend handling core listing, search, and user management
- Custom Express.js server running the negotiation logic and payment adjustment flows
- Stripe Connect for provider payouts with configurable payout schedules
- Mapbox integration for service area visualization and location-based discovery
Technology Stack
React.js
Redux
Express.js
Node.js
MongoDB
Stripe
PayPal
Sharetribe
Mapbox
Google Maps