5.9 KiB
5.9 KiB
PRD: AI Journaling → LinkedIn Posts (Mobile-first MVP)
Version: 2025-10-07 Author: Business Analyst (Mary)
Purpose
Provide a clear product requirements document for an AI-driven mobile-first journaling app that helps professionals capture text and voice entries, transcribe audio, and convert entries into LinkedIn-ready posts using OpenAI. The product is privacy-first (local-first default), integrates with Whisper for transcription and LinkedIn for publishing, and is designed to be built by a single operator with $5k for API/infra costs over a 3-month MVP timeline.
Scope
MVP includes:
- Local-first journaling (text), tags, search, offline support
- Audio recording and Whisper transcription (basic pipeline)
- OpenAI-driven post generation with 3 tone presets (professional, thought‑leadership, casual)
- Draft editor with redaction/anonymize toggle
- LinkedIn OAuth + publish endpoint; fallback share flow for demos
- Basic analytics: entries, conversions, publish counts
- Privacy & retention settings (default: 90 days) and consent logs
Out of scope (MVP):
- Full cloud sync by default (opt-in only)
- Advanced analytics/engagement metrics
- Scheduled posting, multi-language support
Success metrics (for MVP validation)
- Product usage: 100 active users generating 1–3 posts/week within 1 month of launch
- Cost control: Average generation + transcription cost ≤ $0.50 per active user per week
- Retention: At least 25% of users use the app weekly after 30 days
- Time to post: From entry capture to publish ≤ 5 minutes (happy path)
- Privacy: No raw audio retained server-side beyond TTL; users can export and delete data
Personas
Primary
- Senior Product Manager at a mid-size SaaS company. Busy, wants to turn daily learnings into LinkedIn posts to build credibility.
Secondary
- Individual contributors (engineers/designers) who want to document wins and publicize insights.
- Consultants/freelancers who want to showcase work and build networks.
User Journeys
- Quick Text Capture
- User opens app → taps + → writes a short entry → tags → saves locally.
- User taps Convert → selects tone → app generates variants → user edits → Publish (LinkedIn or fallback).
- Voice Capture → Transcribe → Convert
- User records audio (20–60s) → uploads via signed URL → Whisper transcribes → client displays transcript → user edits/anonymizes → Convert → Publish.
- Search & Reuse
- User searches by tag/date → selects past entry → converts/adapts → publish or schedule.
- Privacy Flow
- Default: everything stored locally. For cloud features, user explicitly opts-in and gives consent. Processing to OpenAI/Whisper occurs only after user confirms.
Functional Requirements
- FR1: Create/Edit/Delete journal entries locally (offline-first). (MUST)
- FR2: Tagging and full-text search across entries. (MUST)
- FR3: Audio recording with playback & file persist. (MUST)
- FR4: Signed upload flow for audio and serverless transcription job (Whisper). (MUST)
- FR5: OpenAI proxy endpoint to generate 1–3 post variants with hashtags and CTA. (MUST)
- FR6: Draft editor with inline edit and redaction, anonymize toggle. (MUST)
- FR7: LinkedIn OAuth + UGC publish endpoint + fallback share flow. (MUST)
- FR8: Settings for retention (default=90 days), anonymize behavior, telemetry opt-in. (MUST)
- FR9: Processing logs (transcribe/generate/publish) and consent records. (MUST)
Non-functional Requirements
- NFR1: End-to-end TLS for all network traffic. (MUST)
- NFR2: Raw audio deleted from server storage within TTL ≤ 1 hour. (MUST)
- NFR3: At-rest encryption for optional cloud sync. (MUST if cloud sync enabled)
- NFR4: Scalable serverless functions with rate-limiting and quota enforcement. (MUST)
- NFR5: Token and cost monitoring with alerts (monthly & per-day). (MUST)
- NFR6: Client works offline; queue jobs for transcription when online. (MUST)
Data model (simplified)
- Entry
- id, user_id, text, tags[], created_at, updated_at, status (draft/published), audio_ref (optional), transcription_id
- Transcript
- id, entry_id, text, language, confidence, created_at
- Variant
- id, entry_id, text, hashtags[], tone, created_at
- PublishEvent
- id, entry_id, variant_id, provider, provider_id, status, timestamp
- ConsentLog
- id, user_id, action (transcribe/generate/publish), timestamp, consent_given
API summary (serverless)
Refer to SERVERLESS-API-SPEC.md for endpoints. Key endpoints:
- /api/signed-upload (POST)
- /api/transcribe/start (POST)
- /api/transcribe/callback (internal)
- /api/generate-post (POST)
- /api/publish-linkedin (POST)
- /api/usage (GET)
Privacy & Legal
- Store minimal personal data and only with explicit consent for cloud sync or publish actions.
- Provide export (JSON/MD) and account delete routes. Ensure backups respect retention rules.
- Provide clear privacy policy in app and during onboarding.
Constraints & Assumptions
- Single operator builds/operates app; $5k budget for APIs & hosting. Use low-cost models and limit variants to control spending.
- LinkedIn API access may require app review; implement fallback share flow for MVP.
Timeline & Milestones
- M0: Prepare dev accounts, serverless skeleton (1 week)
- M1: Core journaling + audio + signed upload (weeks 1–4)
- M2: Transcription + generation + LinkedIn integration (weeks 5–8)
- M3: Privacy, retention, testing & store prep (weeks 9–12)
Acceptance Criteria (overall)
- All P0 FRs implemented and demoable in staging with sample LinkedIn publish (or fallback).
- Processing logs and retention settings work as specified.
- Cost per active user remains within estimated budget after 30 days of sample usage.
Open questions
- Monetization specifics for paid tiers and pricing (deferred until validation).
- Full cloud sync encryption approach for production-grade privacy (need architect input).
Document created for handoff and PRD review. Update owners and timelines as needed.