← Sofia Vereda Case study
Project 03 · Product & UI design

Mooring at Two Harbors

Tell it once what you sail, and it only ever shows you moorings that fit.

Your boat screen: registering length, beam and draft once.
A mooring screen: taken dates in orange, free ones in green, the holder underneath.
The coves screen: four of twelve coves that fit this boat.
The place

Seven hundred moorings, and rules nobody wrote down for you

Santa Catalina Island sits 22 nautical miles off the California coast. Boaters cross for the weekend and take a mooring in one of a dozen coves at Two Harbors. Getting one is a system, and the system is not obvious.

700+
moorings across more than a dozen coves
Thu 4pm
when the coming weekend's availability opens
2
night minimum on weekends, three on holidays
ch 9
the VHF channel you hail on arrival
The rules that shape everything

Three constraints, and a product falls out of them

Design for a place like this and the interesting work is not inventing features. It is understanding the rules well enough that the interface can stop explaining them.

Everybody books, always

There is no turning up. Even a holder who has paid for the whole season has to reserve their own can for the nights they want it.

Five weekends to move

A holder can take a different mooring on five weekends a year. Midweek, as often as they like. The scarce thing is a weekend somewhere else.

Unbooked means free

A mooring nobody has reserved is simply available. Availability is not generosity, it is arithmetic, and that is what the app can surface.

The problem

Length decides everything, and it is buried

A 38 foot boat cannot take every mooring, but today you find that out deep inside a booking form, after you have already picked a cove and got your hopes up. Thursday at 4pm a week of demand lands on one moment, and if you are not at a screen the good coves are gone.

And a booked mooring is a dead end. Plans change constantly on the water: somebody has reserved a weekend they are no longer coming for, and there is no way for anyone else to find that out.

The idea

Your boat is the filter, and the harbour has people in it

One

Register the boat once

From then on every cove, mooring and price is filtered to a 38 foot sloop. Nothing you cannot take is ever shown.

BoatPerla
TypeSloop
Length overall38 ft
Beam · draft12 ft 6 · 6 ft
Two

Every mooring belongs to a boat

If the holder has booked your dates, you message that boat instead of hitting a wall. If they have not, it is yours to take.

MooringCherry Cove F.4
Fits up to45 ft
Held byMarlene · 42 ft
Aug 22 to 24Booked
The screens

Nine screens, built to be read in the sun

High contrast, numbers set in monospace so lengths, dates and channels line up in a column, and no decoration anywhere. This is a tool someone uses while doing something else.

Getting a mooring
Boat registration screen
Your boatThe only form in the app. The helper under length says what a boater needs to hear: pulpit and swim step included.
Date selection screen
Your datesA calendar that already knows the rules, so a one night weekend is not an error message, it is simply not selectable.
Cove results screen
The covesFour of twelve fit. Each one carries its character, because a boater picks on swell and rowing distance, not just capacity.
When it is taken
Mooring detail screen showing the holder
A mooringThe centrepiece. Taken dates in orange, free ones in green, the holder underneath, and a midweek alternative that costs nobody anything.
Boat to boat messaging screen
Boat to boatEvery thread is titled with the mooring and the dates it is about, so nobody has to scroll up to remember why they are talking.
Booking confirmation screen
BookedThe price reads differently depending on who you are, and says so rather than hiding it.
The rest of the harbour
Holder's own mooring screen
Your mooringA holder's screen is a booking screen with their name on it. The five weekend moves are five dots, not a progress bar.
Who is in the cove screen
In the coveBoat names and lengths. No people, no photos, no profiles, and a way to stay off the list entirely.
Arrival card screen
On arrivalThe card you open with wet hands: the words to say on channel 9, the numbers, and the rules that carry a fine.
Try it

The prototype, running

Change the length of your boat and watch the harbour shrink or open up. That is the whole argument of this design in one gesture: your boat is the filter, and nothing you cannot take is ever shown.

The mooring screen
The decision that carries the project

A taken mooring should read as an opening, not a wall

The obvious design greys out what is unavailable and moves on. That is what every booking product does, and it is wrong here, because on the water the most common situation is a mooring reserved by somebody whose plans have changed.

So the taken state is the richest screen in the app. It shows the dates in orange, names the boat that holds them, offers a midweek alternative on the very same mooring, and gives one clear action.

The identifier is the code painted on the buoy, F.4, set larger than anything else on the screen. It is what people say out loud, so it is what the interface says.

A mooring buoy at Catalina with its code painted on it
The identifier comes from the water, not from a database.
Boats on moorings under bright sun
This is the light the interface competes with. Hence the contrast.
Design decisions

What I chose, and why

Boats message boats

There are no phone numbers anywhere in this app. Boat names are already public on the water, personal numbers are not, so contact happens by vessel name. It costs a tap and it means nobody has to expose a number to ask about a weekend.

The fee never reaches the holder

A boat without a mooring pays by the night, and it goes to the harbour. The moment a holder can profit from a weekend they skip, people start hoarding moorings to rent, and the good will the product runs on is gone in a season.

Five dots, not a progress bar

A holder's weekend allowance is a small whole number, so it is drawn as five dots that are either spent or not. A bar would suggest a percentage of something continuous, which it is not.

Monospace for anything measured

Lengths, dates, mooring codes and VHF channels are set in a monospace face so they align down the screen and can be read at a glance. Prose is set in a grotesque with real weight, for glare.

Deliberately not in it

What got cut

Saying no is half the work, and it is the half nobody puts in a case study.

Ratings and reviews of holders. A small harbour where people see each other every summer. Scoring your neighbours out of five would poison it, and holders would leave first.

Groups, invitations and user made events. The community part is already handled by boats messaging boats and by seeing who shares your cove. Groups need permissions, notifications and moderation.

Avalon, the other harbour. It cannot be reserved at all: you cross, wait outside the entrance, and the Harbor Patrol assigns you one. That is a different product. One harbour done properly.

Named as version two: alerts when a mooring your size opens, an offline arrival card for the coves with no signal, and rafting up as a proper feature rather than a share.

Where it stands

Designed from the rules of a real place, for people who already know them.

See the full screen set Work with me