4.6 KiB
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) |
| 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
membersrow (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
memberstable, or a separatemember_profilesview that masks hidden fields?