NEXSUM_LABS
  1. Home
  2. Work
  3. A marina replaced its whiteboard slip map with a booking tool that bills the right boat
Book a call

[ Case study ]

MarinasNode.jsTypeScriptPostgresMap-based admin UI

A marina replaced its whiteboard slip map with a booking tool that bills the right boat

Slip assignments, transient bookings, and seasonal billing lived on a whiteboard, a spiral notebook, and an aging spreadsheet; double-booked transient slips happened monthly, and billing disputes started with 'the whiteboard said.'

CLIENT a 300-slip freshwater marina — FOCUS Model the dock as it is

Booking Systems & Internal ToolsCustom SoftwareBooking Systems & Internal ToolsMarinasRepresentative example
Client
a 300-slip freshwater marina
Industry
Marinas
Engagement
8 weeks — systems pod — engineer
Service
Custom Software / Booking Systems & Internal Tools
Headline outcome
All slips and transient stays booked through the tool, with billing from the same ledger: Whiteboard → dock-map booking, read from Booking conflict log

Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.

Where they started

Freshwater marinas run on two economies: seasonal slips billed in the spring, and transient overnight stays that peak in summer. This 300-slip marina on a busy lake also winters boats in dry storage, so one physical dock supports three revenue models. The harbor master is the operation's brain — he walks or drives the dock from dawn, assigns every arrival, and knows each slip's quirks by heart. Those quirks never made it into any system; the authoritative records were a whiteboard map, a spiral notebook, and a spreadsheet that disagreed with both.

What it was costing

Slip assignments, transient bookings, and seasonal billing lived on a whiteboard, a spiral notebook, and an aging spreadsheet; double-booked transient slips happened monthly, and billing disputes started with 'the whiteboard said.'

What they could see

  • Transient slips double-booked about monthly in season, discovered when two boats arrived for the same slip.
  • Billing disputes opened with the whiteboard said and closed with whoever's memory was more confident.
  • The owner reconciled three records each season end and still wrote off amounts nobody could attribute.
  • Transient arrivals queued at the fuel dock while the harbor master searched the notebook for tonight's openings.
  • Winter-storage billing ran on rules that lived in one person's head and changed slightly every year.

The constraints we worked inside

  • The harbor master runs the dock from a golf cart with a phone; the tool must work outdoors, one-handed, in glare.
  • Slip inventory is physical and irregular — lengths, power, and position quirks mean a grid of unique assets, not a number range.
  • Off-season billing (winter storage) follows different rules than in-season transient stays.

What had been tried before

Bought a generic marina-management subscription two seasons back and entered the whole dock.
Its slip model assumed uniform numbered berths, so the dock's irregular physical reality had to be faked, and the harbor master went back to the whiteboard by mid-season.
Moved seasonal billing into the accounting software with one ledger entry per boat.
Accounting knew what was billed, not what was occupied; every reconciliation still required the notebook, and the two disagreed each spring opening.

What we proposed

We proposed modeling the dock as it physically is — every slip an asset with its own length, power, and position constraints — rather than forcing a tidy numbered grid onto irregular reality. The harbor master's tool is one scrollable dock map with drag-to-assign and instant conflict warnings, built for a golf cart, glare, and one free hand. Assignments and stays feed one ledger with two billing calendars: seasonal and transient rules post to the same record, ending the spreadsheet reconciliation ritual. Nothing about his workflow moves; the whiteboard's authority simply becomes digital, shared, and disputable with evidence.

Just as important is what we ruled out, and why:

  • Configuring the generic marina SaaS they had abandonedIts uniform-berth data model was the failure; customization quotes to fix it exceeded a purpose-built tool, and the vendor owned the roadmap.
  • A lightweight booking app without the billing ledgerBilling disputes were half the pain; a booking tool that still needed the spreadsheet would preserve the ritual the owner wanted dead.
  • Waiting for a commercial dock-management platform to matureThe marina loses a season's revenue integrity every year it waits, and no vendor demo survived the harbor master's questions about irregular slips.

How the work ran

01Model the dock as it is

Every slip is an asset with its real constraints, so assignments respect the physical dock instead of a tidy database abstraction.

02One screen for the cart

The harbor master's view is a single scrollable dock map with drag-to-assign and instant conflict warnings, designed for glare and gloves.

03Two billing calendars, one ledger

Seasonal and transient billing post to one ledger with their own rules, ending the spreadsheet reconciliation ritual.

Delivered by the systems pod — engineer over 8 weeks, with working increments reviewed with the client every week.

The stack, and the reasoning

Node.js
The whole product is one small server-side app — bookings, ledger, invoicing — and one runtime kept it operable by whoever inherits it.
TypeScript
The marina will hand this to whichever contractor answers the phone two seasons from now; typed ledger entries document the seasonal billing rules in code, so the next person inherits readable statements instead of archaeology.
Postgres
Assignments and billing must agree even when the Wi-Fi at the dock drops mid-update; transactional writes keep the ledger from inventing money.
Map-based admin UI
The harbor master thinks in the dock's geography, not in lists; a map he can drag matches the mental model he already runs the dock with.
Stripe Invoicing
Seasonal invoices and transient charges post from one system with payment links; the owner stopped reconciling a payment processor against a spreadsheet.

What went wrong

Obstacle

A season of hand-kept records became the source of two billing disputes after cutover — the old whiteboard had been amended without dates, and both parties recalled it differently.

Handled: We digitized the surviving photos and notebook pages into an archived ledger marked as pre-system, so disputes could at least cite a record instead of a memory.

Obstacle

The first dock-map build tested beautifully indoors and failed at the dock — glare washed out the screen, and assigning required pinch-zoom and two hands.

Handled: We rebuilt it as a single vertical scroll with oversized targets, tested it standing in the sun mid-season, and shrank nothing else about it.

Obstacle

A transient stay that opened before season end and closed after it broke the billing rules — the two calendars disagreed about which rate schedule owned the stay.

Handled: We settled it with the owner as a stated rule — the opening day's calendar applies — encoded it as a test, and added it to the billing runbook.

How we worked together

Cadence
Twice-weekly dock visits during the build — we demoed on the seawall, not in a conference room; the owner joined remotely for billing reviews.
Client side
The harbor master was the product — his workflow, his objections, his phone; the owner handled billing rules and money questions; a dockhand tested bookings.
Decisions
Dock-usage decisions were the harbor master's alone to veto; billing decisions went to the owner, usually settled the same day over the ledger preview.
They provided
The whiteboard's photographed history, the notebook and spreadsheet, real rate sheets, and the harbor master's patience during field testing.

What changed

The headline: all slips and transient stays booked through the tool, with billing from the same ledgerWhiteboard → dock-map booking, read from Booking conflict log. A second check: double-booked transient slips since cutover at 0.

The harbor master runs the dock from the same golf cart, but the map in his hand now remembers what the whiteboard forgot. Arrivals are assigned in seconds, conflicts warn before they happen instead of at the fuel dock, and the phrase the whiteboard said has left the vocabulary. The owner closes each season from one ledger instead of three records and a negotiation. Winter storage billed from the same ledger, and the office answers billing questions by opening the record instead of reconstructing a season.

The result was read from Booking conflict log against the pre-engagement baseline over the stated window, with a guardrail check on double-booked transient slips since cutover. Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.

What they own now

  • The booking and ledger repository with deployment scripts under the marina's accounts
  • The digitized pre-system record archive used to settle legacy disputes
  • Rate-schedule configuration covering seasonal, transient, and winter-storage rules
  • Stripe account with invoice templates and payout configuration in the marina's name
  • A one-page dock-side quick reference for the harbor master's seasonal staff

What we would do differently

We would digitize the whiteboard's history before cutover — a season of hand-records became the source of two billing disputes, and an earlier import would have settled them.

Custom SoftwareBooking Systems & Internal ToolsMarinasNode.js

Next case study

A diagnostics startup proved its at-home testing concept with a booking MVP in ten weeks