51 KiB
MyPlantFamily - Epic Breakdown
Author: BMad Date: 2025-10-18 Project Level: 3 Target Scale: 29-38 stories across 4 epics
Overview
This document provides the detailed epic breakdown for MyPlantFamily, expanding on the high-level epic list in the PRD.
Each epic includes:
- Expanded goal and value proposition
- Complete story breakdown with user stories
- Acceptance criteria for each story
- Story sequencing and dependencies
Epic Sequencing Principles:
- Epic 1 establishes foundational infrastructure and initial functionality
- Subsequent epics build progressively, each delivering significant end-to-end value
- Stories within epics are vertically sliced and sequentially ordered
- No forward dependencies - each story builds only on previous work
Epic 1: Foundation & Core Plant Management
Expanded Goal:
Establish the mobile application foundation and core plant management capabilities that deliver immediate user value. Users can create accounts, securely authenticate, add plants to their collection using either photo identification or manual selection, name their plants for personalization, and view their growing plant family. This epic creates the essential infrastructure and data model that all subsequent features will build upon, while delivering a working MVP that users can start using immediately.
Story 1.1: Project Foundation & Development Environment
As a developer, I want the project infrastructure and development environment established, So that the team can build, test, and deploy the mobile application consistently.
Acceptance Criteria:
- Repository initialized with version control (Git)
- Mobile app project created using React Native (cross-platform iOS/Android)
- Development environment documented and reproducible
- Basic CI/CD pipeline configured for automated testing
- Cloud infrastructure provisioned (database, storage, hosting)
- Environment variables and secrets management configured
- Initial deployable build completes successfully on both iOS and Android
Prerequisites: None (foundational)
Story 1.2: App Shell & Navigation Framework
As a user, I want a functional mobile app with core navigation, So that I can move between different sections of the application.
Acceptance Criteria:
- App launches on both iOS and Android devices
- Bottom navigation bar implemented with placeholders for: Home, Add Plant, Settings
- Screen transitions work smoothly between navigation tabs
- App displays placeholder content for each section
- App icon and splash screen configured
- Basic error handling prevents crashes on navigation
- Offline mode displays "no connection" message gracefully
Prerequisites: Story 1.1 complete
Story 1.3: User Authentication & Account Management
As a new user, I want to create an account and log in securely, So that my plant data is saved and accessible across devices.
Acceptance Criteria:
- Sign up flow accepts email and password with validation (email format, password strength)
- Login flow authenticates existing users successfully
- Social login option available (Google or Apple Sign-In)
- Password reset/recovery flow functional via email
- User session persists across app restarts (secure token storage)
- Logout functionality clears session and returns to login screen
- Account data stored securely in cloud database
- Basic profile screen shows user email and account creation date
Prerequisites: Story 1.2 complete
Story 1.4: Plant Data Model & Species Database
As a developer, I want a robust plant data model and curated species database, So that plant information is structured consistently and species data is accurate.
Acceptance Criteria:
- Plant database schema defined (plant ID, user ID, species, name, created date, photos, care logs)
- Species reference database populated with 10-15 common houseplants (Monstera, Pothos, Snake Plant, etc.)
- Each species includes: common name, scientific name, care frequency defaults, personality type assignment
- Database relationships established (User → Plants 1:many)
- CRUD operations tested (Create, Read, Update, Delete plants)
- Data validation prevents invalid entries (e.g., missing species)
- Database indexes optimized for common queries (user_id, plant_id)
Prerequisites: Story 1.3 complete (user accounts exist)
Story 1.5: Add Plant - Manual Species Selection
As a user, I want to manually select my plant's species from a list, So that I can add plants even if photo identification fails or isn't available.
Acceptance Criteria:
- "Add Plant" button prominent on home screen
- Tapping "Add Plant" presents two options: "Take Photo" or "Choose Species Manually"
- Manual selection shows scrollable list of 10-15 species with photos and common names
- Search/filter functionality helps users find species quickly
- Selecting species proceeds to plant naming screen
- User can cancel and return to home screen at any point
- Selected species data pre-populates plant profile
Prerequisites: Story 1.4 complete (species database exists)
Story 1.6: Plant Photo Identification Integration
As a user, I want to take a photo of my plant and have the app identify the species, So that I can quickly add plants without manually searching.
Acceptance Criteria:
- "Take Photo" option opens device camera with proper permissions
- Photo captured and sent to 3rd party plant identification API (PlantNet, Pl@ntNet, or similar)
- API response displays top 3 species suggestions with confidence scores
- User can select correct species from suggestions or choose "None of these - select manually"
- If API fails or confidence too low, gracefully fallback to manual selection
- Photo stored temporarily during identification, saved permanently after confirmation
- Loading indicator displays while API processes photo (with 10-second timeout)
- Error handling for no internet connection or API unavailable
Prerequisites: Story 1.5 complete (manual flow as fallback)
Story 1.7: Plant Naming & Profile Creation
As a user, I want to give my plant a custom name and complete its profile, So that I can personalize my plant and make it feel like part of my family.
Acceptance Criteria:
- After species selection, user prompted: "What's your plant's name?"
- Text input accepts any name (character limit 30, validation for special characters)
- Option to skip naming shows system-suggested name based on species (e.g., "Monty the Monstera")
- Initial profile photo can be uploaded or skipped (defaults to species reference photo)
- Plant profile saved to database with: user ID, species, custom name, creation timestamp, initial photo
- Success confirmation shown: "Welcome [Plant Name] to your family!"
- User automatically navigated to plant detail view after creation
Prerequisites: Story 1.6 complete (species identified/selected)
Story 1.8: Plant Collection Home Screen
As a user, I want to see all my plants in one place with key information, So that I can quickly check on my plant family and select which plant to interact with.
Acceptance Criteria:
- Home screen displays card-based grid of all user's plants
- Each plant card shows: plant photo, custom name, species name, placeholder health indicator
- Empty state message displayed when user has no plants: "Add your first plant to get started!"
- Tapping a plant card navigates to that plant's detail view
- Plants sorted by most recently added (newest first)
- Add Plant button (+) prominently displayed on home screen
- Pull-to-refresh updates plant list
- Smooth scrolling performance with 10+ plants
Prerequisites: Story 1.7 complete (plants can be created)
Story 1.9: Plant Detail View
As a user, I want to view detailed information about an individual plant, So that I can see its profile, photos, and access plant-specific actions.
Acceptance Criteria:
- Detail screen displays: large plant photo, custom name, species name, creation date
- Placeholder sections visible for: Care Schedule, Health Status, Chat (implemented in later epics)
- Edit button allows user to change plant name or photo
- Delete plant option with confirmation dialog ("Are you sure you want to remove [Plant Name]?")
- Back button returns to home screen
- Swipe gestures navigate between plant details (if user has multiple plants)
- Screen layout responsive to different device sizes
Prerequisites: Story 1.8 complete (navigation from home screen)
Story 1.10: Cloud Photo Storage & Display
As a user, I want my plant photos stored securely in the cloud and displayed quickly, So that my growth history is preserved and accessible across devices.
Acceptance Criteria:
- Photos uploaded to cloud storage (S3, Cloud Storage, or similar) upon plant creation
- Photos compressed before upload (max 1MB per photo, maintain aspect ratio)
- Thumbnail versions generated automatically for faster loading in list views
- Photos display within 2 seconds on average mobile connection
- Failed uploads retry automatically (3 attempts) before showing error
- Uploaded photos accessible via secure signed URLs (expire after 24 hours, regenerated on access)
- Photo deletion removes file from cloud storage when plant is deleted
- User data usage tracked and optimized (photos only upload on WiFi option in settings)
Prerequisites: Story 1.9 complete (plant details showing photos)
Epic 1 Summary:
- 10 stories delivering foundational plant management
- Key Deliverable: Users can create accounts, add plants via photo ID or manual selection, name them, and view their collection
- Next Epic: Epic 2 will add AI personalities and conversational engagement on top of this foundation
Epic 2: AI Personality System & Engagement Loop
Expanded Goal:
Implement the core product differentiator that transforms plant care from utility into emotional connection. Each plant receives a species-specific AI personality (grumpy cactus, dramatic fern, wise snake plant) that users can converse with through a chat interface. Personality-driven reminders replace generic notifications, and dynamic mood visualization reflects each plant's status. This epic delivers the "magic moment" where users realize their plants have character and care becomes genuinely enjoyable rather than obligatory.
Pre-Mortem Enhancements Applied: This epic has been strengthened with learnings from failure analysis including early tone testing, cost controls, API reliability failovers, and adaptive reminder intelligence.
Story 2.1: Personality System Data Model
As a developer, I want a robust personality system data model with tone guardrails, So that each plant type has consistent character traits that are encouraging, never guilt-tripping.
Acceptance Criteria:
- Personality database schema defined (personality_id, species, archetype, tone, conversation_style, example_phrases, tone_guardrails)
- 10-15 species personalities created with distinct archetypes:
- Monstera: Dramatic diva (theatrical, attention-seeking, fabulous)
- Snake Plant: Wise mentor (patient, philosophical, low-maintenance pride)
- Pothos: Cheerful optimist (friendly, easy-going, encouraging)
- Cactus: Grumpy hermit (sarcastic, independent, tough love)
- Fern: Anxious worrier (needy, dramatic about humidity, grateful)
- (Continue for remaining species...)
- Each personality includes: tone descriptor, conversation prompts, care reminder style, mood expressions
- Tone guardrails defined for each personality:
- "Never say" rules (e.g., never use: lazy, neglectful, bad parent, failure, dying, shame)
- Tone boundaries (humor without sarcasm about user's care gaps)
- Positive reinforcement ratios (minimum 3:1 encouragement to playful drama)
- Personality assignment logic links species to personality when plant created
- Personality data accessible via API for chat and reminder systems
Prerequisites: Story 1.4 complete (species database exists)
Story 2.2: Personality Prototype Testing
As a product manager, I want to test personality tones with real users before full LLM implementation, So that we catch tone issues early and avoid the "personality cringe crisis."
Acceptance Criteria:
- Recruit 50+ beta testers with diverse demographics (age 22-50, varied neurodivergence, anxiety levels)
- Create rule-based personality prototypes for 3-5 species using guardrails from Story 2.1
- Beta testers interact with personalities for 7 days minimum
- Collect feedback via survey: "Did personality ever make you feel bad/guilty/annoyed?" (Yes/No + details)
- Track metrics: engagement rate, snooze frequency, personality interaction count
- Mandatory exit interview for all participants
- Tone adjustments made based on feedback before LLM prompt engineering begins
- Document "safe" vs. "risky" language patterns for each archetype
Prerequisites: Story 2.1 complete (personality definitions exist)
Story 2.3: LLM Integration & API Setup
As a developer, I want LLM API integration with failover, cost controls, and provider flexibility, So that conversations are reliable and cost-effective at scale.
Acceptance Criteria:
- Provider evaluation: Test both commercial (OpenAI, Anthropic) and open-source (Llama, Mistral) options
- Cost analysis: Project costs at 100, 1K, 10K users with each provider
- Primary provider configured: API credentials, authentication, error handling
- Secondary failover provider configured: Different vendor for redundancy (activates within 2 seconds if primary fails)
- Prompt engineering system: System prompts define personality, tone guardrails enforced, user context injected
- Performance targets: Response time <3 seconds, 99% uptime with failover
- Cost controls implemented:
- Token budgets per interaction (max 500 tokens response length)
- Conversation turn limits (max 10 turns per session with graceful ending)
- Rate limiting (10 conversations/day free tier)
- Provider-agnostic wrapper: Can switch providers without code changes
- Cost tracking: Real-time monitoring of tokens, costs per user, alerts at $0.15/user threshold
- Health monitoring: Provider uptime checks, automatic failover triggers
Prerequisites: Story 2.2 complete (tone testing validated)
Story 2.4: Chat Interface UI
As a user, I want a conversational chat interface for each plant, So that I can have fun interactions with my plant's personality.
Acceptance Criteria:
- "Chat with [Plant Name]" button prominently displayed on plant detail screen
- Chat screen with messaging interface (user messages right-aligned, plant left-aligned)
- Plant's personality avatar/icon displayed with messages
- Text input field with send button at bottom of screen
- Conversation history displays most recent 20 messages (scrollable for older)
- Loading indicator shows while waiting for plant response
- Empty state displays personality introduction when no messages exist
- Back button returns to plant detail screen
- Keyboard handling prevents UI obstruction on message input
Prerequisites: Story 1.9 complete (plant detail view exists)
Story 2.5: Conversational AI System
As a user, I want to send messages to my plant and receive personality-driven responses, So that I feel like I'm talking to a character with unique traits.
Acceptance Criteria:
- User can type and send messages to their plant
- System constructs LLM prompt with: personality definition + tone guardrails, species context, conversation history (last 10 turns), user message
- LLM generates response matching personality tone and archetype
- Plant response appears in chat within 3 seconds
- Conversation history saved to database for continuity
- Personality references plant's name naturally in responses
- Care tips integrated naturally into personality-appropriate dialogue
- Conversation management:
- After 8-10 turns, personality suggests gentle wrap-up ("Let's chat more tomorrow!")
- Max 10 turns per session enforced with graceful ending
- Rate limit enforcement shows friendly personality-appropriate message ("I need rest, talk tomorrow!")
- Error handling with personality-appropriate fallback (not generic errors)
Prerequisites: Stories 2.3 and 2.4 complete
Story 2.6: Graceful Degradation Library
As a user, I want my plant's personality to work even when LLM APIs are down, So that the app feels reliable and my plant doesn't become generic.
Acceptance Criteria:
- Pre-generated response library with 100+ personality-appropriate responses for common patterns:
- Greetings (10+ variations per personality)
- Care questions (15+ variations per personality)
- Compliments (10+ variations)
- Plant status inquiries (10+ variations)
- General conversation (20+ variations)
- Responses maintain personality voice and reference plant name
- Local response library works offline (no API needed)
- Fallback activation triggers when:
- API latency >5 seconds
- API returns error
- No internet connection
- User sees personality-appropriate "degraded mode" message first time:
- Monstera: "Darling, I'm having trouble finding my words... but you know I adore you!"
- Cactus: "My brain's a bit slow right now. Try again later."
- Fallback responses feel natural, not robotic
- System automatically retries LLM on next conversation attempt
Prerequisites: Story 2.5 complete (conversation system exists)
Story 2.7: Response Caching & Cost Optimization
As a system administrator, I want aggressive LLM response caching and hybrid rule/LLM approach, So that API costs stay under budget at scale.
Acceptance Criteria:
- Cache strategy:
- Common patterns cached (greetings, basic care questions, compliments)
- Personality "voice" responses cached separately (reusable across users)
- Smart template system with variable insertion for common patterns
- Cache targets: 60% hit rate minimum (not 30%)
- Cache expires after 24 hours to keep responses fresh
- Cached responses personalized with plant name injection
- Hybrid approach:
- Simple interactions (greetings, yes/no, short queries) use rule-based templates
- Complex conversations (care advice, emotional support, storytelling) use LLM
- System intelligently routes based on query complexity
- Cost monitoring:
- Cost per active user tracked in real-time
- Alerts trigger at $0.12/user (buffer before $0.15 threshold)
- Dashboard shows: cache hit rate, API call volume, cost per user, cost projections
- Cost projections updated weekly for 30/60/90 day runway
Prerequisites: Story 2.6 complete (fallback system provides templates)
Story 2.8: Personality-Driven Care Reminders
As a user, I want care reminders that match my plant's personality with high variation, So that reminders feel entertaining and fresh, never repetitive or nagging.
Acceptance Criteria:
- Care reminder system generates notifications in personality-appropriate tone
- Each personality has 15+ reminder variations (not 5) to prevent repetition
- Reminders include personality-specific phrases:
- Monstera: "Oh darling, I'm PARCHED! 💧", "Sweetheart, a drink would be DIVINE right now!"
- Cactus: "Ugh, fine... I could use water. Don't make it a habit.", "Yeah yeah, I'm thirsty. Happy now?"
- Pothos: "Hey friend! Mind giving me a little drink? 🌿", "Water time! Let's grow together!"
- Adaptive frequency: If user snoozes 3x in a row, reduce reminder frequency automatically
- Reminder timing based on species care schedule (from Epic 3, placeholder for now)
- User can tap reminder to go directly to plant detail view
- Snooze option available (returns in 2 hours with different message variant)
- Tone remains encouraging, never guilt-tripping or negative
- Batch notifications: Multiple plants needing care combined into one notification when appropriate
Prerequisites: Story 2.1 complete (personality definitions), Story 1.9 (plant detail view)
Story 2.9: Push Notification System
As a user, I want smart, batched push notifications that respect my preferences and patterns, So that I stay engaged without feeling overwhelmed.
Acceptance Criteria:
- Push notification permissions requested on first launch with clear value explanation
- Firebase Cloud Messaging (or chosen service) integrated for iOS and Android
- Notifications display plant name, personality message, and plant photo
- Tapping notification opens app directly to that plant's detail view
- Smart scheduling:
- Track user's typical care times (e.g., user always waters Sunday 9am)
- Adapt reminder timing to match user patterns
- Default timing options: morning (9am), afternoon (2pm), evening (7pm)
- Batching logic: Maximum 1 notification per day
- If multiple plants need care, combine: "3 plants need love today! 🌿"
- Batch shows multiple plant photos/names in notification
- Quiet days feature: Optional user setting to skip weekend reminders
- Notifications respect device Do Not Disturb settings
- Users can disable notifications per-plant or globally in settings
- Badge count shows number of plants needing care
Prerequisites: Story 2.8 complete (reminder system exists)
Story 2.10: Reminder Intelligence & Adaptation
As a system, I want to learn from user behavior and adapt reminder strategies, So that notifications remain helpful without causing fatigue.
Acceptance Criteria:
- Behavior tracking:
- Record when user typically waters plants (day of week, time of day)
- Track snooze patterns and frequency
- Identify consistently responsive vs. forgetful users
- Adaptive scheduling:
- After 2 weeks, shift reminder timing to match user's observed patterns
- If user always cares Sunday 9am, reminder sent Saturday 8pm or Sunday 8am
- Frequency adaptation:
- Consistently responsive users (>80% on-time care): Reduce reminder frequency
- Forgetful users (<50% on-time): Maintain standard frequency with extra encouragement
- Snooze intelligence:
- If same plant snoozed 3+ times in a row, reduce that plant's reminder frequency
- Vary snooze return time (2, 4, or 6 hours) based on user patterns
- Tone adaptation:
- Responsive users get more celebratory tones ("You're amazing at this!")
- Struggling users get extra encouragement (no guilt, just support)
- Analytics dashboard: Shows user care patterns, reminder effectiveness, adaptation changes made
Prerequisites: Story 2.9 complete (push notifications working)
Story 2.11: Mood System - Visual Indicators
As a user, I want to see my plant's current mood visually, So that I can quickly understand if my plant is happy, thirsty, or neglected.
Acceptance Criteria:
- Mood indicator displayed prominently on plant card (home screen) and detail view
- Five mood states with visual icons and colors:
- Happy 😊 (green) - Recently cared for, all needs met
- Content 🙂 (light green) - Doing well
- Thirsty 😐 (yellow) - Care due soon
- Dramatic 😰 (orange) - Care overdue
- Wilting 😢 (red) - Significantly overdue
- Mood emoji/icon matches personality archetype (dramatic plants more expressive)
- Mood color coding consistent across UI (health bar uses same color scheme)
- Mood updates immediately when care action logged
- Animated mood transition when state changes
Prerequisites: Story 1.8 complete (home screen with plant cards)
Story 2.12: Mood Calculation Logic (Time-Based)
As a system, I want to calculate plant moods based on time since expected care, So that mood indicators accurately reflect plant status.
Acceptance Criteria:
- Mood calculation runs automatically every hour for all plants
- Initial version uses time-based rules (hours since watering scheduled):
- Happy: Watered within schedule window
- Content: 0-24 hours since due
- Thirsty: 24-48 hours overdue
- Dramatic: 48-72 hours overdue
- Wilting: 72+ hours overdue
- Species care frequency defaults used for calculations (from Story 1.4)
- Mood persisted to database to avoid recalculation on every view
- New plants start in "Happy" mood
- Mood logic designed to be enhanced in Epic 3 (with actual care logs)
Prerequisites: Story 2.11 complete (mood visualization exists)
Story 2.13: Personality Introduction & Onboarding
As a new user, I want to experience my first plant's personality immediately, So that I understand the unique value proposition and feel delighted.
Acceptance Criteria:
- After user names their first plant (Story 1.7), personality introduction screen appears
- Introduction shows personality preview: avatar, archetype name, sample dialogue
- Personality says hello with character-appropriate greeting
- User prompted to ask first question or tap "Meet [Plant Name]" to see profile
- Tutorial tooltip points to chat button: "Talk to your plant anytime!"
- Onboarding flow feels magical and sets tone for product experience
- Skip option available for users adding subsequent plants (introduction condensed)
Prerequisites: Story 1.7 complete (plant naming flow), Story 2.4 (chat UI exists)
Story 2.14: Personality Tone Testing & Calibration
As a product manager, I want comprehensive validation that personality tones feel encouraging and not annoying, So that we achieve the critical success factor of tone calibration at scale.
Acceptance Criteria:
- A/B testing framework implemented to test personality variants
- Test cohorts exposed to 3 personality tone levels: gentle, moderate, dramatic
- Expanded beta test: Minimum 500 users (not 100), 14-day period (not 7)
- Mandatory exit survey: "Did personality ever make you feel bad/guilty?" (Yes/No + details)
- User feedback survey triggered after 7 days: "How do you feel about [Plant Name]'s personality?"
- Analytics track: conversation frequency, reminder snooze rate, plant deletion rate by personality
- "Annoying" feedback triggers immediate alert for manual review
- Personality prompts adjustable via remote configuration (no app update required)
- Tone calibration dashboard shows sentiment metrics per personality archetype
- Quality gate: <5% users report annoying/guilt-tripping before full launch
Prerequisites: Story 2.5 complete (conversations working), Story 2.8 (reminders working)
Story 2.15: Emergency Tone Adjustment System
As a product manager, I want to quickly adjust personality tones without app updates, So that we can respond to negative feedback immediately if tone issues emerge.
Acceptance Criteria:
- Remote configuration system: Personality prompts stored in cloud config (Firebase Remote Config or similar)
- Tone dial control: Admin dashboard with sliders for each personality (gentle ← → dramatic)
- Instant updates: Tone changes propagate to all users within 5 minutes (no app update)
- Preset tone profiles: One-click switch between "gentle", "moderate", "dramatic" for all personalities
- Emergency shutdown: Kill switch to disable personality interactions if critical tone issue detected
- A/B testing integration: Can deploy tone variants to specific user cohorts
- Rollback capability: Revert to previous tone settings with one click
- Change logging: All tone adjustments logged with timestamp, admin, reason
- Real-time sentiment monitoring: Alerts triggered if app rating drops below 4.0 or "annoying" keywords spike
Prerequisites: Story 2.14 complete (tone testing framework exists)
Story 2.16: API Reliability Monitoring & Alerts
As a system administrator, I want comprehensive monitoring of LLM provider health and costs, So that we can proactively address reliability and budget issues.
Acceptance Criteria:
- Real-time provider monitoring:
- Primary LLM provider uptime tracking
- Secondary failover provider uptime tracking
- Response latency monitoring (alert if >3 second average)
- Automatic degradation:
- If primary latency >5 seconds, switch to secondary provider
- If both providers down, activate local fallback library (Story 2.6)
- User communication:
- On first degradation: "Personality responses may be simpler right now"
- Status page shows current system health
- Cost monitoring dashboard:
- Real-time cost per user
- Monthly burn rate projection
- Budget alerts at 75%, 90%, 100% of monthly allocation
- Health check frequency: Every 60 seconds
- Alert channels: Slack/email notifications for critical issues
- Incident response playbook: Documented steps for common failure scenarios
- Weekly cost reports: Automated reports showing cost trends, cache effectiveness, usage patterns
Prerequisites: Story 2.7 complete (caching and cost tracking exists)
Epic 2 Summary:
- 16 stories (was 11) delivering AI personality system with robust failsafes
- Key Deliverable: Plants have distinct personalities, users chat with them, personality-driven reminders adapt to user behavior, mood system reflects care status
- Critical Success Factor: Tone calibration ensures personalities are delightful, not annoying (validated with 500+ user beta)
- Risk Mitigations Applied: Early tone testing, LLM cost controls, API failover, adaptive reminders, emergency tone adjustment
- Next Epic: Epic 3 will add care scheduling, photo tracking, and enhance mood calculation with real care data
Epic 3: Care Scheduling, Photos & Growth Tracking
Expanded Goal:
Complete the daily engagement loop by implementing intelligent care scheduling, visual growth tracking, and comprehensive care logging. Users can track their plant care history with photo timelines, log care actions (watering, fertilizing, repotting), and see health status visualized clearly. The mood system is enhanced to use actual care data rather than time estimates, creating accurate feedback that reinforces positive care habits. This epic transforms MyPlantFamily from a personality companion into a fully functional plant care management system that rewards consistent attention.
Story 3.1: Care Schedule Data Model
As a developer, I want a robust care scheduling data model and care logging system, So that plant care history is tracked accurately and schedules can be customized per plant.
Acceptance Criteria:
- Care schedule schema defined (schedule_id, plant_id, care_type, frequency, next_due_date, custom_schedule)
- Care log schema defined (log_id, plant_id, care_type, timestamp, notes, photo_id)
- Care types supported: watering, fertilizing, repotting, pruning, pest_treatment
- Frequency options: daily, every_x_days, weekly, biweekly, monthly, custom
- Default schedules auto-populated from species data (Story 1.4) when plant created
- CRUD operations for schedules and logs
- Database indexes optimized for querying by plant_id and date ranges
Prerequisites: Story 1.4 complete (species database with care defaults)
Story 3.2: Auto-Generated Care Schedules
As a user, I want my plants to automatically have care schedules based on their species, So that I don't have to research care requirements manually.
Acceptance Criteria:
- When plant created, care schedule auto-generated from species defaults
- Watering schedule created with species-appropriate frequency (e.g., Monstera: every 7 days, Cactus: every 14 days)
- Fertilizing schedule created (typically monthly during growing season)
- Next due dates calculated from plant creation date
- Schedule displayed on plant detail view showing upcoming care actions
- Visual calendar view shows all plants' care needs for the week
- User shown explanation of schedule: "Based on typical Monstera care, watering every 7 days"
Prerequisites: Story 3.1 complete (schedule data model exists)
Story 3.3: Manual Care Logging
As a user, I want to log when I water, fertilize, or care for my plants, So that I can track my care history and the app knows my plant is healthy.
Acceptance Criteria:
- "Log Care" button prominent on plant detail view
- Care logging interface shows quick-action buttons: Water, Fertilize, Repot, Other
- Tapping care type logs action with current timestamp
- Optional notes field for additional details (e.g., "Added fertilizer", "Leaves looking yellow")
- Care action immediately updates plant's next due date based on schedule
- Visual confirmation shown: "Watered [Plant Name]! Next watering in 7 days"
- Care log saved to database with plant_id, care_type, timestamp, notes
- Plant's mood updates immediately to reflect care action (Epic 2 mood system)
Prerequisites: Story 3.1 complete (care log data model), Story 2.11 complete (mood visualization)
Story 3.4: Care History View
As a user, I want to see my plant's complete care history, So that I can understand care patterns and identify issues.
Acceptance Criteria:
- "Care History" tab on plant detail view
- Timeline view shows all care actions in reverse chronological order
- Each entry displays: care type icon, timestamp, notes (if any)
- Grouped by month for easy scanning
- Filter options: All care types, Watering only, Fertilizing only, etc.
- Visual indicators show consistency: "Watered on time 8 of last 10 times"
- Empty state encourages first care log: "Start tracking [Plant Name]'s care today!"
- Scrollable history loads older entries on demand (pagination)
Prerequisites: Story 3.3 complete (care logging exists)
Story 3.5: Customizable Care Schedules
As a user, I want to adjust my plant's care schedule based on my home environment, So that reminders match my plant's actual needs, not just species defaults.
Acceptance Criteria:
- "Edit Schedule" button on plant detail view
- For each care type, user can adjust:
- Frequency (every X days, weekly, biweekly, monthly, custom)
- Next due date (if different from calculated)
- Enable/disable care type
- Changes save and update next due dates immediately
- Custom schedules marked with indicator: "Custom schedule (adjusted from species default)"
- Reset to default option restores species-based schedule
- Validation prevents invalid schedules (e.g., watering every 0 days)
- Schedule changes reflected in reminders (Epic 2 reminder system)
Prerequisites: Story 3.2 complete (auto-generated schedules exist)
Story 3.6: Photo Timeline Tracking
As a user, I want to add photos regularly and see my plant's growth over time, So that I can celebrate progress and share visual milestones.
Acceptance Criteria:
- "Add Photo" button on plant detail view (in addition to care logging)
- Camera opens to capture new photo with current timestamp
- Photo added to plant's timeline with date label
- Timeline view shows photos in chronological grid (3 columns on mobile)
- Tapping photo opens full-screen view with swipe navigation
- Photo metadata includes: date, optional caption, photo_id linked to plant
- Compare view: Side-by-side display of first photo vs. latest photo to show growth
- Option to add photo when logging care action ("Log watering + add photo")
- Photo upload uses cloud storage from Story 1.10
Prerequisites: Story 1.10 complete (photo storage), Story 3.3 complete (care logging)
Story 3.7: Health Status Visualization
As a user, I want to see my plant's overall health status at a glance, So that I can quickly identify plants that need attention.
Acceptance Criteria:
- Health bar displayed prominently on plant card (home screen) and detail view
- Health calculated from multiple factors:
- Care consistency (% of care actions completed on time in last 30 days)
- Time since last watering (overdue decreases health)
- Photo frequency (regular photos indicate attention)
- Health levels with color coding:
- Thriving: 90-100% (vibrant green)
- Healthy: 70-89% (green)
- Fair: 50-69% (yellow)
- Struggling: 30-49% (orange)
- Critical: 0-29% (red)
- Health bar fills proportionally (visual percentage indicator)
- Tapping health bar shows breakdown: "Care consistency: 85%, Last watered: 2 days ago"
- Health updates immediately when care logged
- Health trends tracked over time (improving/declining indicator)
Prerequisites: Story 3.3 complete (care logging), Story 3.4 (care history for calculation)
Story 3.8: Enhanced Mood Calculation with Care Data
As a system, I want to calculate plant moods using actual care logs instead of time estimates, So that mood accurately reflects user's care attention and plant health.
Acceptance Criteria:
- Mood calculation (from Story 2.12) enhanced to use care log data
- Mood factors include:
- Time since last watering logged (not just scheduled time)
- Care consistency pattern (frequent vs. sporadic)
- Overall health status (from Story 3.7)
- Mood states recalibrated with actual data:
- Happy: Recently watered + good care history
- Content: On schedule, no issues
- Thirsty: Approaching due date
- Dramatic: Overdue by species tolerance
- Wilting: Significantly overdue + poor care history
- New plants maintain time-based mood for first 2 weeks (until care pattern established)
- Mood updates immediately when care logged
- Species tolerance factored (cacti tolerate longer gaps than ferns)
- Mood calculation runs every hour, considers last 30 days of care data
Prerequisites: Story 2.12 complete (mood calculation exists), Story 3.4 complete (care history available)
Epic 3 Summary:
- 8 stories delivering care scheduling, photo tracking, and health visualization
- Key Deliverable: Automated care schedules, photo timeline tracking, care history logs, health status visualization, enhanced mood calculation using real care data
- Value Delivered: Completes the daily engagement loop - users can track care, see growth, and get accurate feedback
- Next Epic: Epic 4 will add social sharing and premium monetization to enable viral growth and sustainability
Epic 4: Social Sharing & Premium Monetization
Expanded Goal:
Enable viral organic growth through compelling social sharing features and establish sustainable revenue through a well-designed freemium model. Users can share their plants' personality moments, growth progress, and care achievements to Instagram, Twitter, and TikTok with beautifully designed shareable cards. The premium tier unlocks unlimited plants, enhanced personality features, and advanced analytics, with pricing optimized for 5-8% conversion. This epic transforms MyPlantFamily from a personal tool into a shareable experience while ensuring long-term business viability.
Story 4.1: Shareable Content Card Design System
As a designer/developer, I want a flexible card design system for shareable content, So that shared posts look professional and on-brand across all social platforms.
Acceptance Criteria:
- Card template system created with multiple layout options:
- Plant profile card (photo, name, personality quote, app branding)
- Conversation snippet card (chat bubbles, plant personality highlighted)
- Growth progress card (before/after photos, time elapsed, growth stats)
- Care achievement card (streak milestones, care consistency badge)
- Design follows brand guidelines: warm color palette, organic aesthetic, playful but not childish
- Templates optimized for each platform:
- Instagram: Square 1080x1080px and Story 1080x1920px
- Twitter: 1200x675px
- TikTok: Vertical 1080x1920px
- Dynamic text rendering handles long plant names and personality quotes gracefully
- App branding subtle but visible: "MyPlantFamily" logo, app store link embedded
- High-quality rendering (300dpi equivalent for crisp social media display)
- Cards generated server-side or client-side based on performance testing
Prerequisites: Story 1.8 complete (plant data available), Story 2.5 complete (personality content exists)
Story 4.2: Share Plant Profile
As a user, I want to share my plant's profile to social media, So that I can show off my plant family to friends.
Acceptance Criteria:
- "Share" button on plant detail view
- Share dialog shows preview of generated card (plant photo, name, personality archetype)
- User can select platform: Instagram, Twitter, TikTok, or "Copy Link"
- Platform-specific card generated (correct dimensions from Story 4.1)
- Native share sheet integration on iOS/Android
- Card includes personality-appropriate quote: "Monty the Dramatic Monstera says: 'Darling, I'm simply THRIVING!' 🌿"
- Shared content includes link to app download page
- Analytics track: shares per plant, platform breakdown, conversion from shares to installs
Prerequisites: Story 4.1 complete (card design system), Story 1.9 complete (plant detail view)
Story 4.3: Share Conversation Snippets
As a user, I want to share funny or interesting conversations with my plant, So that I can entertain my friends with my plant's personality.
Acceptance Criteria:
- "Share" button in chat interface (Story 2.4)
- User selects conversation snippet (last 3-5 messages) to share
- Card displays chat bubbles with user messages and plant responses
- Plant personality avatar shown with responses
- Card design emphasizes personality character (e.g., dramatic Monstera gets theatrical styling)
- User can edit/trim snippet before sharing (remove sensitive messages)
- Card includes context: "[Plant Name] and I had a chat today! 💬"
- Share tracking: conversation shares per personality type, viral coefficient analysis
Prerequisites: Story 4.1 complete (card design system), Story 2.4 complete (chat system)
Story 4.4: Share Growth Progress
As a user, I want to share before/after photos showing my plant's growth, So that I can celebrate milestones and inspire other plant parents.
Acceptance Criteria:
- "Share Growth" button on photo timeline view (Story 3.6)
- User selects two photos: before (typically first photo) and after (latest or selected)
- Card shows side-by-side comparison with time elapsed ("3 months of growth!")
- Growth stats displayed: "Went from 3 leaves to 8 leaves! 🌿"
- Optional caption field for user's personal message
- Card emphasizes visual transformation (large photos, minimal text)
- Personality adds encouragement: "Thanks to [User Name] for being an amazing plant parent!"
- Share tracking: growth shares, time-to-share from plant creation
Prerequisites: Story 4.1 complete (card design), Story 3.6 complete (photo timeline)
Story 4.5: Share Care Achievements
As a user, I want to share care milestones and achievements, So that I can celebrate my dedication and encourage others.
Acceptance Criteria:
- Achievement system tracks milestones:
- Care streaks (7 days, 30 days, 90 days of on-time care)
- Plant anniversaries (1 month, 6 months, 1 year with plant)
- Care consistency badges (90%+ on-time care)
- Plant collection milestones (3 plants, 5 plants, 10 plants)
- Achievement unlocked notification with "Share" option
- Card displays achievement badge, milestone description, plant involved
- Visual design celebratory and rewarding (confetti, badges, vibrant colors)
- Optional personal message from user
- Personality congratulates user: "You've kept me alive for 6 months! I'm impressed! 💚"
- Share tracking: achievement shares, most shared milestone types
Prerequisites: Story 4.1 complete (card design), Story 3.4 complete (care history for tracking)
Story 4.6: Freemium Tier Definition & Enforcement
As a product manager, I want clearly defined free and premium tiers with proper enforcement, So that users understand value proposition and limits are respected.
Acceptance Criteria:
- Free Tier Features:
- Up to 3 plants maximum
- Basic personality interactions (10 conversations/day)
- Standard care reminders
- Photo timeline (1 photo per plant per day)
- Social sharing (all features)
- Basic care history
- Premium Tier Features ($6.99/month or $59.99/year):
- Unlimited plants
- Unlimited personality conversations
- Enhanced personality memory (references past conversations)
- Priority LLM responses (faster, no rate limiting)
- Advanced care analytics dashboard
- Ad-free experience
- Early access to new features
- Enforcement logic prevents free users from exceeding 3 plants
- Upgrade prompts shown at logical moments (attempting to add 4th plant)
- Premium features clearly marked with "Premium" badge in UI
- Pricing displayed transparently (no hidden costs)
- Feature comparison table available in settings
Prerequisites: None (defines business model)
Story 4.7: Premium Upgrade Flow & Paywall
As a user, I want a clear and compelling upgrade experience, So that I understand premium value and can easily subscribe.
Acceptance Criteria:
- Paywall trigger points:
- Attempting to add 4th plant (hard paywall)
- After 8 conversation limit in a day (soft prompt with skip option)
- On premium feature discovery (e.g., tapping analytics dashboard)
- Periodic gentle prompts for engaged free users (once per week maximum)
- Upgrade screen displays:
- Premium features list with clear benefits
- Pricing options: Monthly $6.99, Annual $59.99 (30% savings highlighted)
- Free trial offer: 7 days free trial for new premium users
- User testimonials/reviews (if available)
- "Not now" option (non-intrusive)
- Social proof: "Join 1,234 premium plant parents!"
- Clear value proposition: "Grow your plant family without limits"
- Premium features previewed with screenshots
- One-tap upgrade with platform payment (App Store/Google Play)
- Trial terms clearly stated: "Free for 7 days, then $6.99/month. Cancel anytime."
Prerequisites: Story 4.6 complete (tier definitions)
Story 4.8: Payment Processing & Subscription Management
As a user, I want secure payment processing and easy subscription management, So that I can upgrade confidently and control my subscription.
Acceptance Criteria:
- Platform-native payment integration:
- iOS: App Store In-App Purchase (StoreKit)
- Android: Google Play Billing
- Subscription purchase flow:
- User selects monthly or annual
- Platform payment sheet displays
- Biometric authentication (Face ID/Touch ID)
- Purchase confirmed, premium unlocked immediately
- Subscription management:
- Current plan displayed in settings (Free/Premium Monthly/Premium Annual)
- Renewal date shown for premium users
- Cancel subscription option (platform-managed)
- Upgrade from monthly to annual option
- Trial management:
- 7-day free trial for first-time premium users
- Trial countdown visible in settings
- Reminder notification 2 days before trial ends
- Cancel trial option (no charge if canceled before end)
- Server-side subscription validation (receipt verification)
- Grace period handling for failed payments (3 days retention)
- Cancellation handled gracefully: Premium features remain until period end, then revert to free tier
Prerequisites: Story 4.7 complete (upgrade flow exists)
Story 4.9: Premium Analytics Dashboard
As a premium user, I want advanced analytics about my plant care patterns, So that I can optimize my care routine and understand my plant family better.
Acceptance Criteria:
- "Analytics" tab in navigation (premium-only, shows upgrade prompt for free users)
- Dashboard displays:
- Care consistency graph (30-day trend, % on-time)
- Plant health trends over time (multi-plant comparison)
- Most/least cared for plants (attention distribution)
- Optimal care times (when you typically water, based on logged data)
- Growth metrics (photos added over time, visual progress)
- Personality interaction stats (conversations per plant, favorite topics)
- Visual charts/graphs (line charts, bar charts, heat maps)
- Date range selector (7 days, 30 days, 90 days, all time)
- Export data option (CSV download for power users)
- Insights and recommendations: "You water most consistently on Sundays!"
- Compare plants: Side-by-side health comparison for multiple plants
Prerequisites: Story 4.6 complete (premium tier defined), Story 3.4 complete (care data available)
Story 4.10: Trial Conversion Optimization
As a product manager, I want to maximize free trial conversion to paid subscriptions, So that we achieve 5-8% premium conversion target.
Acceptance Criteria:
- Trial onboarding optimization:
- Welcome email on trial start highlighting premium benefits
- In-app tooltip tour of premium features during first 2 days
- Push notification on day 3: "Loving unlimited plants? Keep it going!"
- Mid-trial engagement:
- Day 4 email: Case study of power user benefiting from premium
- Day 5 notification: "2 days left in your trial"
- In-app badge showing "Premium Trial" status
- Pre-expiration reminders:
- Day 5: Email reminder with value recap
- Day 6: Push notification: "Last day of your free trial!"
- Trial end screen: One-tap continue subscription option
- Conversion tracking:
- Analytics track trial starts, conversions, cancellations
- Cohort analysis by acquisition source
- A/B testing framework for trial messaging
- Dashboard shows conversion rate by cohort
- Fallback offer for cancelers:
- Exit survey: "Why are you canceling?" (price, features, didn't use, other)
- Discount offer for annual plan (if price concern detected)
- "Pause trial" option to extend by 3 days (one-time use)
- Target: 30-40% trial-to-paid conversion rate
Prerequisites: Story 4.8 complete (trial system working)
Epic 4 Summary:
- 10 stories delivering social sharing and premium monetization
- Key Deliverable: Social sharing to Instagram/Twitter/TikTok, premium tier with unlimited plants and enhanced features, payment processing, analytics dashboard
- Business Value: Enables viral growth (0.3+ shares per user monthly target) and sustainable revenue (5-8% premium conversion target)
- Total Project Stories: 10 (Epic 1) + 16 (Epic 2) + 8 (Epic 3) + 10 (Epic 4) = 44 stories
Overall Epic Summary
MyPlantFamily - Complete Story Breakdown:
- Epic 1: 10 stories - Foundation & Core Plant Management
- Epic 2: 16 stories - AI Personality System & Engagement Loop (enhanced with pre-mortem)
- Epic 3: 8 stories - Care Scheduling, Photos & Growth Tracking
- Epic 4: 10 stories - Social Sharing & Premium Monetization
Total: 44 stories (within Level 3 range, originally estimated 29-38, expanded for robustness)
Development Sequencing:
- Epic 1 delivers working app foundation (users can create accounts, add plants, view collection)
- Epic 2 delivers core differentiator (AI personalities transform engagement)
- Epic 3 completes engagement loop (care tracking, growth visualization, accurate feedback)
- Epic 4 enables growth & sustainability (viral sharing, premium conversion)
Next Steps:
- Solution Architecture (required for Level 3 projects)
- Tech Spec per epic (JIT - just in time before implementation)
- Story-level development (Create → Context → Validate → Ready → Develop → Review → Approved)