Original Idea
Shower Thought Capture A waterproof-friendly mobile app with extra-large buttons for quickly capturing ideas with voice-to-text while in the shower.
Product Requirements Document (PRD): HydroNote
Version: 1.0 (January 2026)
Status: Draft
Product Manager: Senior PM
1. Executive Summary
HydroNote is a specialized productivity application designed to solve the "shower thought" dilemma. It provides a moisture-resistant, high-contrast, voice-first interface that allows users to capture fleeting creative insights in high-humidity environments (showers, steam rooms, rain). By leveraging GPU-accelerated UI rendering, on-device noise suppression, and local-first synchronization, HydroNote ensures that ideas are never lost to water or technical friction.
2. Problem Statement
Creative insights frequently occur during relaxation, such as showering, but this environment is hostile to standard mobile interfaces. Current note-taking apps fail in three specific areas:
- Input Friction: Capacitive screens suffer from "ghost touches" caused by water droplets.
- Visibility: Steam and water on lenses/screens make standard UI elements unreadable.
- Audio Quality: The white noise of running water degrades traditional voice-to-text accuracy.
3. Goals & Success Metrics
- Goal 1: Minimize time-to-capture. Success: Average time from app-open to recording start < 1.5 seconds.
- Goal 2: Accuracy in noise. Success: Word Error Rate (WER) < 5% in high-ambient-noise environments.
- Goal 3: Seamless Workflow. Success: > 60% of captured thoughts successfully exported to Notion or Obsidian.
- Goal 4: Reliability. Success: 100% data retention during offline-to-online transitions.
4. User Personas
- The Deep-Thinker Architect (Arthur): Needs to capture complex structural ideas while clearing his head. Values high-fidelity transcription.
- The Busy Executive (Elena): Uses shower time to plan her day. Values speed and "hands-free" wake-word activation.
- The Songwriter (Sam): Hum melodies or dictating lyrics. Values high-quality audio preservation alongside text.
5. User Stories
- As a user, I want a massive, center-screen button so that I can easily start a recording even with wet hands and blurred vision.
- As a user, I want the app to ignore random water splashes on my screen so that my recording isn't accidentally canceled.
- As a user, I want my audio to be filtered for water noise so that the transcription is accurate despite the shower running.
- As a user, I want to use a wake word like "Hey Hydro" so that I don't have to touch the phone at all.
6. Functional Requirements
6.1 Audio Capture & Processing
- FR-1: One-Tap Recording: Massive Skia-rendered button with high-contrast feedback.
- FR-2: Wake Word Detection: On-device trigger using Picovoice Porcupine (2026 optimized).
- FR-3: Noise Suppression: Real-time filtering of water frequencies using Picovoice Koala and high-pass filtering (~150Hz).
- FR-4: Water Eject: A "Clean Speaker" utility that plays a 165Hz sine wave to clear water from device grills post-shower.
6.2 Transcription & AI
- FR-5: Real-time Transcription: Integration with OpenAI Whisper-1 via chunked REST or Realtime API.
- FR-6: Contextual Correction: Use GPT-4o-mini to refine transcripts based on user-specific jargon/vocabulary.
6.3 Input & UI Resilience
- FR-7: Software Debouncing: Filter out touches < 50ms and ignore touches with impossible velocity (>5000 px/sec).
- FR-8: Slide-to-Confirm: Critical actions (Delete/Save) require a deliberate horizontal path to prevent ghost-touch triggers.
6.4 Sync & Integrations
- FR-9: Offline-First Persistence: Use Prisma 7.0 with SQLite for local storage.
- FR-10: Knowledge Base Export: 1-click sync to Notion (via OAuth 2.1) and Obsidian (Local File API).
7. Technical Requirements
7.1 Tech Stack
- Frontend: React Native 0.79+, React 19+.
- UI Engine: React Native Skia v2.4.14 (utilizing Atlas API for performance).
- Backend: NestJS on AWS Lambda (ARM64/Graviton), Node.js 22.
- Database: PostgreSQL with Prisma 7.0 (Engine:
client, utilizing Driver Adapters for serverless performance). - Sync Engine: PowerSync for bi-directional SQLite-to-Postgres synchronization.
7.2 Core APIs & Libraries
- Transcription: OpenAI Whisper API (v3) with VAD (Voice Activity Detection).
- Auth: Auth0 with OAuth 2.1 + PKCE.
- Encryption: ML-KEM (Post-Quantum) for key encapsulation + AES-256-GCM for audio file encryption.
8. Data Model
| Entity | Attributes | Relationships | | :--- | :--- | :--- | | User | id, email, vault_key_hash, subscription_status | Has many Thoughts | | Thought | id, user_id, raw_audio_url, transcript, tags, mtime | Belongs to User | | Integration| id, user_id, provider (Notion/Obsidian), access_token_enc | Belongs to User | | SyncLog | id, thought_id, status, last_attempted_sync | 1:1 with Thought |
9. API Specification (Core Endpoints)
POST /v1/capture/presigned
- Purpose: Get an S3 pre-signed URL for encrypted audio upload.
- Request:
{ "fileName": "string", "fileHash": "string" } - Response:
{ "uploadUrl": "string", "thoughtId": "uuid" }
GET /v1/sync/delta
- Purpose: Fetch changes since last sync timestamp.
- Response:
{ "upserted": [...], "deleted": [...] }
10. UI/UX Requirements
- High Contrast Mode: Pure black (#000000) and Neon Yellow (#CCFF00) for maximum visibility through steam.
- Component Pattern: Use Skia Paragraph API for all text to allow for real-time blur/shader effects that adapt to ambient light.
- Safety Zones: 24dp "dead zone" padding around screen edges to ignore water accumulation.
11. Non-Functional Requirements
- Latency: Audio-to-Visual feedback < 100ms.
- Privacy: End-to-End Encryption (E2EE). The server never sees raw audio or unencrypted transcripts.
- Durability: Data must be saved locally before any network attempt (Offline-First).
12. Out of Scope
- Video thought capture.
- Direct social media sharing (Privacy focus).
- Native Apple Watch app (Phase 2).
13. Risks & Mitigations
- Risk: Device water damage. Mitigation: Mandatory "Water Safety" onboarding splash screen; focus on software eject tool.
- Risk: Transcription Hallucinations. Mitigation: Always store and allow playback of original audio for verification.
- Risk: Battery Drain (Wake Word). Mitigation: Use Picovoice Cobra VAD to only engage high-power processing when speech is detected.
14. Implementation Tasks
Phase 1: Project Setup & Architecture
- [ ] Initialize React Native 0.79 project with Fabric enabled
- [ ] Install React Native Skia 2.4.14 and configure Atlas API
- [ ] Set up NestJS backend on Node.js 22 with AWS Lambda deployment
- [ ] Configure Prisma 7.0 with
@prisma/adapter-pgfor serverless-ready DB access
Phase 2: Core Audio & Voice Engine
- [ ] Integrate Picovoice Porcupine for "Hey Hydro" wake-word detection
- [ ] Implement audio pipeline with
react-native-audio-api(High-pass filter @ 150Hz) - [ ] Build Whisper API chunking logic with Silero VAD (Client-side)
- [ ] Implement AES-256-GCM client-side encryption for audio binaries
Phase 3: The "Shower-Proof" UI
- [ ] Create Skia-based "Massive Button" with 60FPS pulse animation
- [ ] Implement "Slide-to-Confirm" component for data-destructive actions
- [ ] Apply software debouncing logic to all touch events using
react-native-gesture-handler - [ ] Build "High-Contrast Steam-Ready" theme system
Phase 4: Sync & Integrations
- [ ] Set up PowerSync to bridge SQLite and PostgreSQL
- [ ] Implement Notion OAuth 2.1 flow with PKCE
- [ ] Create Markdown-to-Notion-Block conversion utility
- [ ] Build the "Water Eject" 165Hz frequency generator tool
Phase 5: Testing & Security
- [ ] Perform "Wet Screen" UX testing with simulated water droplets
- [ ] Conduct E2EE audit: Ensure keys never leave the device in plaintext
- [ ] Benchmark cold-start times on AWS Lambda; optimize via INIT-phase caching
- [ ] Verify ML-KEM post-quantum key exchange flow