Own productMVP v1.0 · live

Pearl Trails

Lodges, campsites and experiences across Uganda: travellers discover a stay and request a booking; staff review and act on it in an operations console.

Pearl Trails on a desktop screen
Pearl Trails on a phone

What it enables

  • A traveller discovers a stay, checks availability for their dates, requests a booking and plans the trip around it.
  • Staff sign in to an operations console to review requests, confirm, cancel or expire them, and edit the catalogue.
  • Each consequential staff action is written to a history, so a booking’s story can be read back.

My contribution

Design and full-stack build: the public site, the booking-request flow, the operations console and the data model, deployed to Cloudflare Workers.

Decisions worth noting

No payment layer, on purpose

Payments were deferred and the product never implies one. The repository records what would need to be true before starting.

Constraints instead of locks

Overlapping bookings are rejected by a database constraint, which replaces SELECT … FOR UPDATE on a serverless Postgres connection.

State in the URL

The console’s search, filters and paging live in Postgres queries and the address bar, so a view can be shared and refreshed.

Stack

  • Next.js
  • TypeScript
  • Cloudflare Workers
  • Drizzle
  • Neon Postgres

Boundaries

An MVP: no online payments, and bookings are requests that staff confirm.