The challenge

Ferry operations are logistically complex. Routes change seasonally. Vessels have different capacities and equipment. Crew need scheduling across multiple services. Customers expect to book online, see real-time availability, and pay instantly. And at the end of each day, everything needs to reconcile cleanly in the accounting system.

Our client's legacy system handled almost none of this well. Bookings required manual processing. Route changes meant code changes. Crew scheduling was done by phone. And financial reconciliation was a manual end-of-month exercise that consumed days of administrative time. They needed a platform that could handle the full complexity of modern ferry operations.

What we built

Fluid Ferry is a fifteen-microservice platform covering every aspect of the operation:

Customer booking. A Gatsby-based customer website with real-time availability, route browsing, multi-leg journey support, and Stripe payment integration. Customers select routes, dates, and passenger numbers, see live availability, pay online, and receive instant email confirmations. Return trips and complex multi-stop journeys are supported natively.

Operations management. A Next.js admin dashboard provides comprehensive control over bookings, routes, services, vessels, and pricing. Service requests, booking modifications, and refunds are handled through structured workflows. Daily reconciliation reports give operators a clear picture of revenue and operations.

Crew management. A dedicated React Native mobile app for crew members. Jobs are assigned through the admin system and appear on crew devices. Crew can view assignments, update job status, and communicate with operations — all from their phones.

Accounting integration. Bi-directional Xero integration handles invoice creation, payment matching, and financial reporting. OAuth 2.0 authentication with automatic token refresh ensures the connection stays live. Webhooks from Xero keep payment statuses synchronised in real time.

Supporting services. Email campaigns, file management, a headless CMS for content pages, workflow automation, ticketing, customer reviews, and a platform-level integration framework round out the system. Each service is independent, deployable, and scalable on its own.

Architecture

The fifteen microservices follow a consistent pattern: Serverless Framework deployments with AppSync GraphQL APIs, DynamoDB tables with single-table design, and Lambda functions. SQS queues handle asynchronous workflows like email sending and payment processing. The architecture means any service can be updated, scaled, or replaced without affecting the rest of the platform.

The result

The operator went from a rigid legacy system to a modern, flexible platform that handles the full complexity of their business. Online booking generates revenue around the clock. Crew receive job assignments on their phones. Route and schedule changes are configuration, not code changes. And financial reconciliation that used to take days now happens automatically through the Xero integration. The microservice architecture means the platform continues to evolve — new features are added to individual services without disrupting the rest of the system.