feat: Enhance reservation functionality
This commit is contained in:
73
docs/planning/user-stories.md
Normal file
73
docs/planning/user-stories.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# 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?
|
||||
Reference in New Issue
Block a user