Park & Launch

Three Park & Launch screens - welcome tour, home dashboard and marine yards

CASE STUDY · 2026

Park & Launch

A marine services app for UAE boat owners, with dry parking, boat launch and delivery, captain charters and a marine shop, on React Native and a real-time Node.js backend.

My role
Built the mobile app and the API, from the data model and real-time layer to the screens.
Platforms
Android · iOS
  • React Native

  • Expo

  • TypeScript

  • Redux Toolkit

  • Node.js

  • Express

  • MongoDB

  • Mongoose

  • Socket.io

  • JWT

  • node-cron

THE STORY

From problem to production.

The problem

Marina wet berths in Dubai cost about 67 AED per foot per month. Dry yards cost far less, 15 to 30 AED per foot, but booking them, arranging a tow to the water and finding a captain all happen over phone calls and WhatsApp. Nothing handled storage, logistics and time on the water together, or showed owners where their boat is.

What I built

A React Native (Expo) app on an Express and MongoDB API, with Socket.io for live locations and notifications and a cron scheduler for the booking lifecycle.

  • Dry parking: yard search by emirate, price and radius, per-foot pricing, and monthly to annual plans with VAT and a saving shown against marina berths.
  • Bookings and yard cameras: the spot, plan and days remaining, with camera feeds issued only for the owner's own booking.
  • Launch and delivery: tows from yard to slipway or marina, booked at least two hours ahead, with drivers streaming GPS to each delivery's room.
  • Charters: fishing, sunset and island trips with licensed captains, from request to live tracking with an ETA.
  • Marketplace: categories, search, a cart with a free-shipping threshold, and orders that decrement stock atomically.
  • Three themes: Deep Ocean, Pearl Harbor and Midnight Marina.
Park & Launch architecture - Expo app, Express API with Socket.io, MongoDB and a cron scheduler
Park & Launch architecture - Expo app, Express API with Socket.io, MongoDB and a cron scheduler

Key engineering decisions

  1. Geospatial work in the database. 2dsphere indexes answer "yards within this radius" and delivery origin and destination queries.
  2. A data structure for each hot path. An LRU cache for sessions and yard reads (O(1)), a min-heap for the delivery dispatch queue (O(log n)), a trie for product search, and a geohash grid for live driver positions.
  3. One identity for HTTP and sockets. The Socket.io handshake checks the same JWT, and rooms per user, delivery, charter and booking keep every update scoped.
  4. Sessions that refresh themselves. The app's API client queues requests that get a 401 while a single token refresh runs, then replays them.
  5. Security by default. bcrypt with lockout, hashed one-time codes, role-based access, rate limits, Helmet and NoSQL-injection sanitising.

Status

The backend covers every domain above, and sign-in on mobile runs against the API. Other screens still render bundled demo data, and a few (delivery scheduling and tracking, product detail, captain profile) are placeholders.

USER FLOWS

Screen by screen.

MORE WORK

Other systems I've built.

WDI Marketplace

Multi-vendor e-commerce · Next.js web, Flutter app, Odoo 18 API

Three WDI app screens - product, home feed and order tracking
Code

Vamar Owner Platform

Owner app, staff dashboard and API · Expo, React, Hono, PostgreSQL

Vamar staff dashboard cheques list next to the owner app home screen
Code

Live Monitoring Dashboard

Real-time stream at 1,000 msg/s · React 19, TypeScript, Vite

Live dashboard with KPI cards, a latency chart and the recent events list
Code

CONTACT

Let's build something.

Have a role or a project in mind? Send me a message and I'll get back to you the same day.

© 2026 Mohammed Ghally · Dubai