# 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?