Leisure

Scheduling for a shared-ownership boat club

Members of a boat club book time on shared boats against an allowance of days per season, with peak weekends costing more allowance. A member reports damage after a trip, which takes the boat out of the calendar until it is signed off.

Automatically generated draft

Written by machine against our own engineering playbook. The company is invented; the decisions are the ones we would make on a real build. A reviewed blueprint goes further — nine sections, agreed line by line, and it is what the build is tested against.

Section 01 · What has to work

Members need to book shared boats against seasonal day allowances while damaged vessels automatically lock the calendar until signed off.

Section 03 · Screens

Every screen, and what it is for.

  • ›Dashboard — Member views remaining seasonal allowance and active bookings; instant calendar load.
  • ›Booking Modal — Member selects dates, views peak weekend multipliers, and confirms reservation; instant availability check.
  • ›Trip Report — Member reports post-trip boat damage; instant form submission.
  • ›Maintenance View — Fleet manager reviews grounded boats, logs repairs, and signs off; instant status toggle.

Anything not on this list is not in version one. That is what keeps a fixed price fixed.

Section 04 · The data model

What it stores, and who can read a row.

Member

id uuid, user_id uuid, season_year int, total_days_allowance numeric(5,2), remaining_days numeric(5,2), created_at timestamptz

Access · Members read their own row; admins read all rows.

Boat

id uuid, name text, status enum(available, grounded, maintenance), current_damage_report_id uuid, created_at timestamptz

Access · All authenticated members read available boats; admins read and write all rows.

Booking

id uuid, boat_id uuid, member_id uuid, start_date date, end_date date, cost_in_days numeric(5,2), status enum(confirmed, completed, cancelled), created_at timestamptz

Access · Members read their own bookings; admins read all bookings.

DamageReport

id uuid, boat_id uuid, member_id uuid, description text, reported_at timestamptz, resolved_at timestamptz, sign_off_admin_id uuid

Access · Members read reports they submitted; admins read and write all reports.

Those access rules belong in the database, not in the screens. Someone who edits the address bar still cannot read a row that is not theirs — and the test that proves it blocks delivery if it fails.

Section 05 · States

available → booked → completed | grounded(reported) → maintenance → available(signed_off)

Most scope arguments three weeks into a build are really arguments about a state nobody named at the start.

Section 06 · Where this breaks

What bites products like this one.

Double-booking boats when two members submit reservations for overlapping dates concurrently.

Use database-level exclusion constraints on date ranges per boat to prevent overlapping active bookings.

A member damages a boat on the final day of their season allowance, leaving negative balances unresolvable.

Allow seasonal day allowances to drop below zero while triggering an administrative review flag on the member account.

Section 08 · Deliberately left out

What version one does not do.

  • ×Waitlists for fully booked peak weekends — adds complex queue state management; defer to v2 when booking competition increases.
  • ×Automated damage photo uploads from mobile devices — requires secure object storage and thumbnail pipelines; defer to v2.

This is the section that protects the date, and the only place in the document where somebody says no. It is also why clients trust the rest of it.

Still open

What we would ask before quoting.

  • How many allowance days are allocated per member per season, and do unused days roll over?
  • What exact multiplier is applied to peak weekends versus standard weekdays?
  • Who specifically holds the administrative role permitted to sign off on boat maintenance repairs?

Half of this already exists

Renewal Engine

The billing half of this is a solved problem: recurring charges, a retry ladder on failed cards, access cut and restored automatically.

It is one of our pre-built products: the code is handed over to you, adapted to your own wording and rules, and the rest of the specification above is built on top of it rather than from scratch.

Your product, not this one

Get this written for what you are actually building.

Describe it in a sentence and the generator returns the same sections for your own product. Free, no email, nothing saved to a list.

Next step

Find out if your idea fits in 10 working days.

Tell us what you want to build. We reply the same day with a straight yes, no, or here is what we would cut.

NDA available on request