Files
oysqn.app/docs/planning/user-stories.md

4.6 KiB

User Stories

Open Reservations (Crew Sign-up)

A reservation can be marked open, meaning other members can sign up as crew. Skippers control whether joining is open (anyone can join) or requires approval.

ID Persona Story
US-01 Member As a Member, I want to be able to make Open Reservations, so that other members can sign up to be crew.
US-02 Member As a Member, I want to be able to join an open reservation as crew, so I can sail with a skilled skipper.
US-03 Member As a Member, I want to be able to manage my registration to join a reservation, so I can free up the spot if I can't make it.
US-04 Skipper As a skipper, I want to note details about the sailing reservation, to help others decide if they want to join.
US-05 Skipper As a skipper, I want to be able to set an open reservation as "anyone can join" or "approval required."
US-06 Skipper As a skipper, I want to be able to approve crew members, so that I can ensure I have the right mix of people/skills.
US-07 Skipper As a skipper, I want to be able to add members, and non-members to my reservation, regardless of whether it is open or not.

Notifications

ID Persona Story Phase
US-08 Member As a member, I want to be notified in a dedicated Discord channel whenever a new open reservation is created, so that I can join these sailings. Near-term
US-09 Member As a member, I want to receive SMS or in-app notifications for events like: upcoming reservation reminders, crew-joined notifications, etc. Longer-term

Notes:

  • US-08 (Discord): POST to a Discord webhook when an open reservation is created. Likely an Edge Function triggered on insert. The channel and webhook URL are configuration values.
  • US-09 (SMS/in-app): Requires a notification service (e.g. Twilio for SMS, or Supabase Realtime + push for in-app). Defer until after launch.

Check-out / Check-in Forms

Required pre-sail and post-sail paperwork. Both skipper and crew may submit.

ID Persona Story
US-10 Skipper / Crew As a skipper or crew member, I want to submit the check-out and check-in forms, which are required.
US-11 Skipper As a skipper, I would like reminders to fill out the check-out/in forms at the beginning and end of my reservation.

Notes:

  • US-10: Form fields TBD — likely: condition notes, crew list, fuel level, departure/return times.
  • US-11: Reminder timing — check-out reminder at reservation start time; check-in reminder at reservation end time. Notification channel TBD (Discord, SMS, or in-app per US-08/09).
  • Both stories depend on the check-out/in form schema being defined with the Program Administrator.

Member Profiles

Members can view each other's profiles. Some fields are always public; others are selectable public/private by the member.

ID Persona Story
US-12 Member As a member, I want to be able to see profile information of other members, like a social network site.
US-13 Member As a member, I want to control which parts of my profile are public or private.

Known visibility rules:

Field Visibility
First name, Last name Always public
Certifications Always public (relevant to crew sign-up)
Email Member-controlled (public / private)
Phone Member-controlled (public / private)

Notes:

  • US-12: Profile view should be accessible by clicking a member's name anywhere it appears in the app (e.g. schedule, crew list).
  • US-13: Privacy settings stored per-field on the members row (e.g. email_public: boolean, phone_public: boolean). Enforced via RLS or a view that filters hidden fields for non-owners.
  • Admin can always see all fields regardless of member's privacy setting.

Open Questions

  • US-07: What constitutes a "non-member"? Does a non-member need an account, or just a name on the reservation?
  • US-05: Is approval per-crew-member (skipper approves each request) or a toggle that gates all join requests?
  • US-10: What fields are on the check-out/in forms? Are these the same forms as the current paper process?
  • US-11: Which notification channel is available for form reminders before US-09 is implemented?
  • US-08: Discord webhook URL and channel name — stored in Vault at kv/oys/?
  • US-13: Full list of member-controlled fields — is phone already in the schema? Any other fields (e.g. Slack ID, bio)?
  • US-13: Should privacy enforcement be RLS on the members table, or a separate member_profiles view that masks hidden fields?