BMAD-METHOD/bmad/bmm/agents/hand-off/USER-STORIES.md

130 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# User Stories (Expanded) — Top tickets expanded into stories with Acceptance Criteria and Tasks
Convert each ticket into user stories using the persona. These are ready to copy into your tracker.
## Story 1 (T1.2) — Local DB & journaling core
Title: As a Senior PM, I want to create/edit/delete journal entries offline so I can capture thoughts quickly.
Priority: P0 | Estimate: 20h
Acceptance Criteria:
- I can create a new entry (title optional) and save it offline.
- The entry appears in my list immediately with timestamp.
- I can edit and delete an entry; deleted items move to soft-delete state.
- Search returns entries by text and tag.
Tasks:
- Choose local DB (SQLite/WatermelonDB) and implement models
- Implement CRUD operations and local persistence
- Add full-text search index
- Write unit tests for CRUD and search
## Story 2 (T1.3) — UI: Home/New Entry/Entry Detail/Tags
Title: As a user, I want a quick-capture UI and easy navigation so I can record entries quickly.
Priority: P0 | Estimate: 18h
Acceptance Criteria:
- Home shows recent entries with quick + FAB to create new entry.
- New Entry screen supports multi-line text, tag picker, and save.
- Entry detail shows transcript/audio (if any), edit, convert button.
Tasks:
- Implement navigation stack and screens
- Build tag picker component
- Connect UI to local DB
## Story 3 (T1.5) — Audio capture UI & file storage
Title: As a user, I want to record voice clips and play them back so I can capture thoughts hands-free.
Priority: P0 | Estimate: 12h
Acceptance Criteria:
- I can record/pause/stop audio clips up to 2 minutes.
- Recorded files are stored locally and playable.
- A "Transcribe" button is available on the entry detail screen.
Tasks:
- Build audio recorder using React Native Audio APIs / Expo Audio
- Store files in app storage and link to entry
- Add playback UI and controls
## Story 4 (T1.6 + T1.7) — Signed upload & client-server integration
Title: As the system, I must upload audio securely to server for transcription so that the transcription service can process it.
Priority: P0 | Estimate: 16h
Acceptance Criteria:
- Client requests signed upload URL for audio and successfully uploads to storage.
- Server creates a transcription job and returns jobId.
- Client can poll job status or receive push when transcript is ready.
Tasks:
- Implement /api/signed-upload
- Implement client upload flow (PUT to signed URL)
- Implement /api/transcribe/start to queue job
- Implement job status polling or push notification
## Story 5 (T2.1) — Whisper transcription worker
Title: As the system, I need to transcribe uploaded audio using Whisper and delete audio after transcription.
Priority: P0 | Estimate: 12h
Acceptance Criteria:
- Worker downloads audio, calls Whisper API, returns transcript and confidence.
- Raw audio is deleted from storage after successful transcription (TTL enforced).
- Transcript stored and linked to entry; client notified of completion.
Tasks:
- Implement worker to call OpenAI Whisper (or choice of provider)
- Implement audio deletion post-success
- Store transcript and publish result to client
## Story 6 (T2.3 + T2.4) — OpenAI generation proxy & client convert UI
Title: As a user, I want the app to produce LinkedIn-ready post variants from my entry so I can share insights quickly.
Priority: P0 | Estimate: 22h
Acceptance Criteria:
- Server returns 13 variants with hashtags and CTA based on tone preset.
- Client displays variants; user can select and edit before publishing.
- Token usage is logged for cost monitoring.
Tasks:
- Implement /api/generate-post proxy with prompt templates
- Build client convert UI to show variants and allow edit
- Add token usage logging
## Story 7 (T2.5) — LinkedIn OAuth & publish
Title: As a user, I want to connect my LinkedIn account and publish posts directly so I can share without manual copy/paste.
Priority: P0 | Estimate: 16h
Acceptance Criteria:
- User can connect LinkedIn using OAuth and grant w_member_social scope.
- Server stores access token securely; server posts UGC and returns success.
- Fallback share flow available if OAuth not set up.
Tasks:
- Implement OAuth Authorization Code flow server-side
- Implement /api/publish-linkedin endpoint
- Implement client flow for connect and publish
## Story 8 (T3.1 + T3.2) — Retention, soft-delete & consent logs
Title: As a user, I want retention controls and clear consent logs so I can manage my data and privacy.
Priority: P0 | Estimate: 16h
Acceptance Criteria:
- User can select retention window (30/90/365/indefinite).
- Soft-delete moves items to a trash that is purged after TTL.
- Consent logs record processing actions with timestamps and are viewable/exportable.
Tasks:
- Implement retention settings UI
- Implement soft-delete and purge engine (local & server if synced)
- Implement consent log storage and UI
## Story 9 (T3.3) — Cost controls & quotas
Title: As the operator, I want quotas and usage alerts to control API spend.
Priority: P1 | Estimate: 8h
Acceptance Criteria:
- Admin can set daily and monthly quotas for generation and transcription.
- System enforces quotas and informs users when limits are hit.
Tasks:
- Add usage tracking in server logs
- Implement enforcement and UI alerts
## Story 10 (T3.4) — Build & store prep
Title: As an operator, I want TestFlight/Play Store builds and store assets prepared so we can release the MVP.
Priority: P1 | Estimate: 12h
Acceptance Criteria:
- Test builds available for iOS and Android
- Privacy policy ready and linked
- Store screenshots and descriptions prepared
Tasks:
- Package builds, create metadata, upload to TestFlight/Play Console
---
If you want, I will now:
- Create epic parent issues in GitHub and link these stories (requires GH access), and/or
- Convert each user story into GitHub issues with the acceptance criteria included (I can run the import once you confirm method).
Say which next action you want: "create epics in GH", "create stories in GH", or "export stories JSON".