Skip to main content
CContributors
Back to project pagePilot workspacePrivacy
DE
Sign inRegister
Contact
Back to project page
Audit room

Audit room: FloraScout

README, vision, architecture, and audit card as reviewable context for charter, lead ask, risk, and missions.

Artifacts
4
Closed concierge pilot
Beta community / launch preparation
Provider
codex
Visibility
public
Source review
Reviewed
Freshness
Fresh
FreshSource, snapshots, and review gate are fresh.

Source review

This audit room renders an approved source state.

SourceFreshnessHash
README.mdREADME.mdLocally linked-
ARCHITECTURE.mdARCHITECTURE.mdLocally linked-
VISION.mdVISION.mdLocally linked-

No refresh has run since the last source approval yet.

Audit decision history

Public version chain of stored human audit decisions.

project-audit-scorecard@1.0.0Current version
A - Publishable
Last reviewed
2026-05-15T12:00:00.000Z
Readiness
ASO specialist and 6 secondary ask contexts are structured for curated contribution review.
Decision ID
20000000...0005
Supersedes
-
Verified artifacts
  • docs/showcase/florascout.md
  • README.md
  • ARCHITECTURE.md
  • VISION.md
Open risks
  • Complete ASO and beta-feedback loop before broad market push.
README.mdProduct and Repository Context ARCHITECTURE.mdTechnical Architecture VISION.mdVision and Product Doctrine AUDIT.mdContributors Audit Card
README.md

Product and Repository Context

Product context, current state, target shape, and repository structure for reviewers and contributors.

SourceFloraScout repository

FloraScout

A real-world plant Pokédex for hobby gardeners.

Scan plants with your camera, let AI identify them, build your species collection, track care tasks, and compete on leaderboards — all in one app.

<!-- Hero image: To add a screenshot or GIF, place the file at docs/hero.png and uncomment: <p align="center"> <img src="docs/hero.png" alt="FloraScout — Discovery Reveal + Plant Dex" width="320" /> </p> -->

![License: MIT](https://opensource.org/licenses/MIT) ![React Native](https://reactnative.dev) ![Expo SDK 54](https://docs.expo.dev) ![TypeScript](https://www.typescriptlang.org) ![PRs Welcome](CONTRIBUTING.md)

Core Documents

  • VISION.md — product north star, user promise, and strategic decision filter
  • ARCHITECTURE.md — system context, runtime flows, data model, and delivery pipeline

Features

  • AI Plant Scanner — Snap a photo and GPT-4o identifies the plant automatically
  • Plant Dex — Build your plant encyclopedia with discovery tracking and explorer status
  • Care Tasks — Create one-time or recurring tasks with automatic rescheduling and calendar view
  • AI Health Check — Get a plant health score (0-100) via image analysis
  • Weather Integration — Location-based weather data drives automatic care task suggestions
  • Leaderboard — Compete with other gardeners on weekly, monthly, and all-time rankings
  • AI Gardener Assistant — Chat with "Ben," your AI gardener with image analysis and function calling (main tab: "FloraScout")
  • Crash Monitoring — Sentry integration with DSGVO-compliant PII filtering (no email/IP)
  • Onboarding Carousel — 3-step swipeable intro for new users (value prop, features, credits)
  • In-App Feedback — Users can submit bug reports and feature requests directly from the app
  • 6 Languages — German, English, French, Italian, Spanish, Russian
  • Additional Features — Plant diary with photos, push notifications, avatar generation, credit system
  • Tech Stack

    ComponentTechnology
    FrameworkReact Native 0.81 + Expo SDK 54
    LanguageJavaScript (JSX) / TypeScript (Edge Functions)
    BackendSupabase (PostgreSQL, Auth, Storage, Edge Functions)
    AIOpenAI GPT-4o + DALL-E 2 (server-side via Edge Functions)
    PaymentsRevenueCat (iOS + Android)
    WeatherOpenWeather API
    NavigationReact Navigation 6
    i18ni18n-js (6 languages)
    Notificationsexpo-notifications
    Locationexpo-location
    Imagesexpo-image (disk + memory cache, blurhash)
    Mapsreact-native-maps (Google Maps)
    TestsJest 29 + React Testing Library
    Crash MonitorSentry (DSGVO-compliant, PII-filtered)
    LintingESLint + Prettier
    CI/CDGitHub Actions + EAS Build/Submit

    Quick Start

    Prerequisites

    • Node.js >= 18
    • npm
    • Expo Go app (for local testing on iOS/Android)
    • Supabase project (Database, Auth, Storage, Edge Functions)
    • RevenueCat account (in-app purchases)
    • OpenWeather API key
    • Google Maps API key (Android + iOS, configured via EAS secret)

    Installation

    bash
    # Clone the repository
    git clone https://github.com/3lC4pt41n/Mein-Gaertner-App.git
    cd Mein-Gaertner-App
    
    # Install dependencies
    npm install
    
    # Set up environment variables (see .env.example)
    cp .env.example .env.local
    
    # Start the dev server
    npx expo start

    Then scan the QR code with Expo Go on your phone to run the app.

    Environment Setup

    Create a .env.local file with:

    EXPO_PUBLIC_SUPABASE_URL=your_supabase_url
    EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
    OPENAI_API_KEY=your_openai_key
    OPENWEATHER_API_KEY=your_openweather_key
    REVENUECAT_API_KEY_IOS=your_ios_key
    REVENUECAT_API_KEY_ANDROID=your_android_key
    GOOGLE_MAPS_API_KEY=your_maps_key

    See .env.example for details.

    Storage Image Strategy

    • plant-images are stored in DB as storage paths (not long-lived signed URLs).
    • Signed URLs are generated on-demand in read flows (getPlantImageUrl, getPlantImageUrls).
    • Legacy http(s) URLs remain backward-compatible and are passed through unchanged.

    Latest Updates (v1.4.2, March 2026)

    • Plant Dex Performance — expo-image with disk caching, blurhash placeholders, and recyclingKey. SectionList virtualization (windowSize, maxToRenderPerBatch, removeClippedSubviews). DexCard wrapped in React.memo.
    • Signed URL Cache — In-memory cache (50 min TTL, max 500 entries) in uploadService.js prevents redundant API calls for plant images.
    • Species Details Cache — Server-side species_details table caches AI-generated plant details, reducing repeat Edge Function calls.
    • Maps Runtime Fix — Google Maps key availability exposed via extra.googleMapsEnabled (native config sections are not accessible at JS runtime via Constants.expoConfig).
    • PlantListScreen Parallelization — Plant list and healthscores load in parallel; plants render immediately while scores stream in.
    • Profile Draft Persistence — Profile form state persists across auth state changes.

    Project Structure

    .
    ├── App.js                          # Navigation & push notifications
    ├── supabase.js                     # Supabase client setup
    ├── sentry.config.js                # Sentry crash monitoring (DSGVO-compliant)
    │
    ├── contexts/
    │   └── AuthContext.js              # Central auth state (useAuth hook)
    │
    ├── screens/                        # 21 screens (Home, Plants, Chat, Tasks, Dex, Onboarding, etc.)
    ├── services/                       # Business logic (AI, credits, tasks, plants, etc.)
    ├── components/                     # Reusable UI (EmptyState, ErrorState, OfflineState, OfflineBanner, etc.)
    ├── hooks/                          # Custom React hooks
    ├── theme/                          # Design system & tokens
    ├── i18n/                           # Translations (6 languages)
    │
    ├── supabase/
    │   ├── functions/                  # Edge functions (TypeScript)
    │   │   ├── ai-plant-scan           # Plant identification
    │   │   ├── ai-plant-details        # Generate plant details
    │   │   ├── ai-healthcheck          # Health analysis
    │   │   ├── ai-chat                 # Chat with Ben (+ function calling for task creation)
    │   │   ├── ai-gardener-avatar      # Avatar generation
    │   │   ├── weather-proxy           # Weather API proxy
    │   │   ├── revenucat-webhook       # Payment webhooks
    │   │   ├── delete-account          # DSGVO account deletion
    │   │   ├── privacy-policy          # GDPR compliance (→ redirect to GitHub Pages)
    │   │   └── _shared/               # Shared utilities (credits, OpenAI, rate-limit, validation)
    │   └── migrations/                 # SQL database migrations
    │
    ├── __tests__/                      # 13 test suites
    ├── .github/
    │   ├── workflows/                  # CI/CD workflows
    │   ├── ISSUE_TEMPLATE/             # Issue templates
    │   └── pull_request_template.md    # PR template
    │
    ├── store-assets/                   # App Store graphics
    ├── assets/                         # Icons & images
    └── docs/                           # Documentation

    Available Scripts

    bash
    npm start              # Start dev server
    npm test               # Run Jest tests
    npm run lint           # Lint code
    npm run lint:fix       # Auto-fix linting
    npm run format         # Format with Prettier
    npm run ios            # Build for iOS
    npm run android        # Build for Android
    npm run web            # Run web version

    Credit System

    The app uses a credit system for AI features:

    FeatureCost
    Plant Scan12
    Details Generation15
    Health Check8
    Chat Message3
    Avatar Generation20

    Users can purchase credits via subscriptions or one-time purchases. Beta testers receive 100 free credits.

    See services/pricingConfig.js for the single source of truth.

    Contributing

    We welcome contributions! Please see CONTRIBUTING.md for details on:

    • Reporting bugs
    • Suggesting features
    • Development setup
    • Code style & conventions
    • Pull request process

    Deployment

    Edge Functions & Database

    Automatic deployment via GitHub Actions on push to main:

    bash
    git push origin main
    # Automatically deploys all functions and migrations

    Functions are deployed without JWT verification but validate all requests via custom headers.

    App Builds

    Trigger builds by tagging a release:

    bash
    git tag v1.4.2
    git push origin v1.4.2
    # Automatically builds and submits to app stores via GitHub Actions

    Manual build:

    bash
    npm install -g eas-cli
    eas build -p android --profile production
    eas build -p ios --profile production

    Testing

    bash
    # Run all tests
    npm test
    
    # Run a single suite
    npx jest __tests__/services/languageService.test.js
    
    # With coverage
    npx jest --coverage

    13 test suites cover core logic: task engine, scoring, language service, AI service, credit service, leaderboards, weather, notifications, error handling, auth context, chat service, and network policy.

    License

    Proprietary © 2026 Tim Mergenthaler. All rights reserved.

    See LICENSE for details.


    Built with ❤️ for gardeners who love data.

    ARCHITECTURE.md

    Technical Architecture

    Technical architecture, system boundaries, data model, room lifecycle, and operating risks as review context.

    SourceFloraScout repository

    Architecture

    Overview

    FloraScout is a mobile-first gardening system built around an Expo React Native client, a Supabase backend, and a server-side AI layer implemented as Supabase Edge Functions.

    The architecture optimizes for four things:

    • fast iteration through OTA-capable JavaScript changes
    • server-side control over AI, credits, and external APIs
    • clear domain ownership between client services, database tables, and edge functions
    • real-world resilience for auth, image handling, retries, and partial failures

    System Context

    mermaid
    Rendering diagram...
    flowchart LR
      User["Gardener"] --> App["Expo / React Native app"]
      App --> Auth["Supabase Auth"]
      App --> DB["Supabase Postgres"]
      App --> Storage["Supabase Storage"]
      App --> Edge["Supabase Edge Functions"]
      App --> Sentry["Sentry"]
      Edge --> OpenAI["OpenAI models"]
      Edge --> Weather["OpenWeather API"]
      Edge --> RevenueCat["RevenueCat webhooks and SDK"]
      DB --> Views["Views / RPCs / RLS"]

    Architectural Shape

    Client

    • React Native 0.81 with Expo SDK 54
    • JavaScript application code
    • contexts/ for session and app-wide state
    • screens/ for route-level views
    • components/ for reusable UI pieces
    • services/ as the main business-logic seam
    • theme/ as the design-system source of truth

    Server

    • Supabase Postgres as system of record
    • Supabase Auth for identity
    • Supabase Storage for plant images and media
    • Edge Functions in TypeScript for AI, weather proxying, legal endpoints, and webhook handling

    External integrations

    • OpenAI for plant scan, plant details, health check, assistant chat, and avatar generation
    • RevenueCat for subscriptions and one-time credit packs
    • OpenWeather for weather-derived care context
    • Sentry for crash and error monitoring

    Repository Map

    AreaResponsibility
    App.jsTop-level navigation, tab structure, bootstrapping
    contexts/Auth lifecycle, profile hydration, purchase identity wiring
    screens/User-facing route surfaces
    components/Shared UI building blocks and state widgets
    services/Client-side business logic and backend orchestration
    theme/Design tokens and design-system primitives
    i18n/Locale dictionaries and translation runtime
    supabase/functions/Edge Functions and shared server helpers
    supabase/migrations/Database schema, policies, views, triggers, and RPC evolution
    .github/workflows/CI, Supabase deploys, and EAS OTA/build automation

    Runtime Layers

    1. Presentation layer

    The presentation layer lives in screens/ and components/.

    Responsibilities:

    • render data and interaction states
    • route users across the core loops
    • delegate side effects to services
    • stay visually consistent through the design system

    2. Application-service layer

    The service layer in services/ is the main client-side orchestration boundary.

    Examples:

    • aiService.js invokes Edge Functions with auth and error normalization
    • plantService.js, diaryService.js, and taskService.js map app actions to database writes
    • dexService.js and discoveryService.js shape collection mechanics
    • creditService.js, purchaseService.js, and pricingConfig.js define the monetization flow
    • notificationService.js and weatherService.js bridge native/platform APIs and server data

    3. Platform and infrastructure layer

    This layer includes:

    • Supabase client setup in supabase.js
    • Auth session persistence with AsyncStorage
    • push notifications
    • maps
    • image upload and signed URL resolution
    • EAS update and store build workflows

    Navigation Topology

    The app is organized around a small number of tab-level entry points with nested stacks.

    mermaid
    Rendering diagram...
    flowchart TD
      App["App.js"] --> Home["Home stack"]
      App --> Plants["Plant stack"]
      App --> Add["Add Plant stack"]
      App --> Assistant["Assistant stack"]
      App --> More["More stack"]
    
      Plants --> PlantList["Plant list"]
      Plants --> PlantDetail["Plant detail"]
      Plants --> PlantDex["Plant Dex"]
      Plants --> DexDetail["Dex detail"]
    
      More --> Tasks["Tasks"]
      More --> Store["Store"]
      More --> Leaderboard["Leaderboard"]
      More --> Calendar["Calendar"]
      More --> Feedback["Feedback"]
      More --> Settings["Settings"]
      More --> Admin["Admin dashboard"]

    Primary Runtime Flows

    Scan, identify, save, discover

    mermaid
    Rendering diagram...
    sequenceDiagram
      participant U as User
      participant A as AddPlantScreen
      participant AI as aiService
      participant EF as ai-plant-scan
      participant DB as Supabase DB
      participant DX as discoveryService
    
      U->>A: Take plant photo
      A->>AI: recognizePlant(base64, language)
      AI->>EF: Invoke edge function with auth
      EF-->>AI: name, note, plant_type
      AI-->>A: normalized scan result
      A->>DB: save plant row
      A->>DX: log discovery
      DX->>DB: upsert species and insert discovery event
      DB-->>DX: species id, counters, first-discovery status
      DX-->>A: discovery metadata
      A-->>U: reveal modal and saved plant

    Health check and diary loop

    mermaid
    Rendering diagram...
    sequenceDiagram
      participant U as User
      participant P as PlantDetailScreen
      participant AI as aiService
      participant EF as ai-healthcheck
      participant DB as Supabase DB
    
      U->>P: Run health check
      P->>AI: performHealthcheck(image_url, plant_name, language)
      AI->>EF: Authenticated edge invocation
      EF-->>AI: healthscore and recommendations
      AI-->>P: parsed health result
      P->>DB: insert plant_healthchecks
      P->>DB: insert gardening_events and diary entry
      P-->>U: updated score and history

    Assistant loop

    The assistant is intentionally not a free-form black box.

    • the client sends text and optional image context
    • chat history is loaded server-side
    • the edge layer can decide on function calls and structured actions
    • usage is credit-metered and logged

    Data Model

    The schema has grown from a simple plant/task core into a multi-loop domain model.

    mermaid
    Rendering diagram...
    erDiagram
      profiles ||--o{ plants : owns
      profiles ||--o{ tasks : owns
      profiles ||--o{ messages : writes
      profiles ||--|| credit_balances : has
      profiles ||--o{ usage_log : generates
      profiles ||--o{ transactions : receives
      profiles ||--o{ subscriptions : maintains
      profiles ||--o{ discovery_events : creates
      profiles ||--o{ gardening_events : creates
      profiles ||--o{ locations : owns
    
      locations ||--o{ zones : contains
      zones ||--o{ plants : groups
    
      plants ||--o{ tasks : drives
      plants ||--o{ plant_healthchecks : collects
      plants ||--o{ plant_diary : records
    
      species ||--o{ discovery_events : referenced_by
      species ||--o{ species_details : cached_as
    
      profiles {
        uuid id PK
        text username
        text language
        boolean is_admin
      }
      plants {
        uuid id PK
        uuid user_id FK
        uuid zone_id FK
        text name
        jsonb details
        uuid species_id
      }
      tasks {
        uuid id PK
        uuid user_id FK
        uuid plant_id FK
        text type
        timestamptz due_at
        text state
      }
      plant_diary {
        uuid id PK
        uuid plant_id FK
        text type
        text image_url
      }
      plant_healthchecks {
        uuid id PK
        uuid plant_id FK
        integer healthscore
      }
      species {
        uuid id PK
        text canonical_name
        text plant_type
        integer total_discoverers
      }
      species_details {
        uuid species_id FK
        text language
        jsonb details
      }
      discovery_events {
        uuid id PK
        uuid user_id FK
        uuid species_id FK
        boolean is_first
      }
      gardening_events {
        uuid id PK
        uuid user_id FK
        text event_type
        numeric points
      }
      credit_balances {
        uuid user_id PK
        integer balance
      }
      subscriptions {
        uuid id PK
        uuid user_id FK
        text product_id
        text status
      }
      locations {
        uuid id PK
        uuid user_id FK
        text name
      }
      zones {
        uuid id PK
        uuid location_id FK
        text name
        text type
      }

    Key Backend Building Blocks

    Core tables

    • profiles
    • plants
    • tasks
    • messages
    • plant_healthchecks
    • plant_diary
    • locations
    • zones

    Progress and collection tables

    • species
    • species_details
    • discovery_events
    • gardening_events

    Monetization and usage tables

    • credit_balances
    • usage_log
    • transactions
    • subscriptions

    Views and RPCs

    • leaderboard_public
    • daily_stats
    • user_economics
    • heatmap_grid
    • heatmap_species_grid
    • rank- and neighbor-related RPCs for leaderboard slices

    Edge Function Topology

    FunctionPurpose
    ai-plant-scanimage-to-species recognition and care hint
    ai-plant-detailsstructured species detail generation with cache
    ai-healthcheckplant health scoring and recommendation generation
    ai-chatassistant chat and structured tool behavior
    ai-gardener-avatarpersonalized or generic avatar generation
    weather-proxyweather access without exposing raw client secrets
    revenucat-webhookcredit and subscription synchronization
    delete-accountGDPR-style account deletion flow
    privacy-policylegal endpoint
    termslegal endpoint
    send-emailtransactional outbound email support

    Shared server-side concerns live in supabase/functions/_shared/:

    • auth resolution
    • credits and refunds
    • OpenAI invocation
    • language helpers
    • validation
    • rate limiting
    • CORS handling

    Cross-Cutting Concerns

    Auth and identity

    • Supabase Auth is the identity source
    • sessions persist through AsyncStorage
    • AuthContext hydrates user and profile, sets locale, and initializes RevenueCat identity
    • Sentry user context is bound to the authenticated user id

    Credits and payments

    • AI features are metered by services/pricingConfig.js
    • client calls route through aiService.js
    • server-side edge functions enforce charging, refunds, and usage logging
    • RevenueCat webhooks synchronize entitlement-driven balances and subscription state

    Caching and media

    • image references are stored as storage paths where possible
    • signed URLs are resolved on demand in read flows
    • expo-image is the default rendering path for modern image-heavy surfaces
    • species details are cached centrally in species_details

    Internationalization

    • locale dictionaries live in i18n/locales/
    • profile language is applied during auth/profile hydration
    • AI and structured details are generated language-aware

    Reliability and observability

    • client network calls use policy wrappers for timeout and retry behavior
    • AI invocation code normalizes auth, rate-limit, and insufficient-credit errors
    • Sentry captures client-side runtime failures
    • CI enforces zero ESLint warnings and full Jest execution on main and PRs

    Security model

    • Postgres tables are protected through RLS
    • edge functions use explicit auth handling or custom headers depending on endpoint purpose
    • sensitive AI and billing logic stays server-side
    • webhook and legal flows are separated from the mobile client runtime

    Delivery Pipeline

    mermaid
    Rendering diagram...
    flowchart LR
      Commit["Push to main"] --> CI["GitHub Actions: CI"]
      Commit --> SB["GitHub Actions: Supabase deploy"]
      Commit --> OTA["GitHub Actions: EAS OTA update"]
      Tag["Version tag"] --> Build["GitHub Actions: EAS build + submit"]
    
      CI --> Lint["ESLint + token guard"]
      CI --> Test["Jest suites"]
    
      SB --> DBPush["supabase db push"]
      SB --> FnDeploy["Deploy edge functions"]
    
      OTA --> Expo["Publish production updates to iOS and Android channels"]
      Build --> Stores["Native store builds and submissions"]

    Design Decisions

    Why a service-heavy client?

    Because most product iteration happens in JavaScript, the client is intentionally organized around service modules rather than a heavier state-management framework. This keeps features shippable through OTA while still preserving seams for testing and error handling.

    Why AI behind Edge Functions?

    It centralizes:

    • billing
    • retries
    • prompt evolution
    • provider credentials
    • legal and abuse boundaries

    This is materially safer than calling model providers directly from the client.

    Why Supabase as the main backend?

    Supabase gives the project a pragmatic full-stack spine:

    • auth
    • relational storage
    • file storage
    • RLS
    • edge compute
    • SQL-native migrations and views

    That is a strong fit for a small product team shipping quickly.

    Tradeoffs and Current Constraints

    • the client codebase is mostly JavaScript, not end-to-end TypeScript
    • some repository documents are historical and may describe older counts or prices
    • OTA speed is a strength, but native dependency changes still require full EAS builds
    • the domain model has grown organically, so service boundaries are strong but not fully formalized as separate packages

    Safe Extension Points

    When adding new features, prefer extending the system in these seams:

    1. add new UI surfaces in screens/ and components/
    2. centralize client orchestration in services/
    3. put metered or secret-bearing logic into Edge Functions
    4. evolve the schema through new migrations only
    5. wire release behavior through existing GitHub Actions instead of ad hoc deploy steps

    Canonical Reading Order

    For a new engineer, the fastest accurate orientation path is:

    1. README.md
    2. VISION.md
    3. ARCHITECTURE.md
    4. App.js
    5. contexts/AuthContext.js
    6. services/
    7. supabase/functions/
    8. supabase/migrations/
    VISION.md

    Vision and Product Doctrine

    Vision, Mediation OS thesis, audiences, boundaries, and strategic product line.

    SourceFloraScout repository

    Vision

    North Star

    FloraScout turns everyday gardening into a compounding loop of noticing, understanding, and caring for living things.

    It should feel like the product version of a great field notebook:

    • fast enough for a phone in one hand and a watering can in the other
    • smart enough to translate uncertainty into action
    • rewarding enough that progress feels visible and worth returning to

    Product Thesis

    Most hobby gardeners do not fail because they do not care. They fail because the moment of need is messy:

    • they do not know what plant they are looking at
    • they are unsure what to do next
    • they forget recurring care at the wrong moment
    • they cannot see whether they are getting better over time

    FloraScout solves this by combining three systems into one coherent product:

    1. Recognition

    The app identifies plants, surfaces species context, and gives each discovery emotional weight.

    1. Care orchestration

    The app turns plant knowledge, weather, and user input into concrete next actions.

    1. Progress loops

    The app makes growth visible through the Plant Dex, diary, health checks, and leaderboard mechanics.

    Who The Product Is For

    Primary audience

    • hobby gardeners with a small to medium personal plant collection
    • plant-curious people who enjoy learning by doing
    • users who respond well to collection, streak, and progress systems

    Secondary audience

    • balcony and small-space growers
    • users who treat gardening as a calming routine
    • people who want a practical AI assistant, not a generic chatbot

    Explicit non-audience

    • professional agriculture operations
    • scientific taxonomic workflows
    • marketplace-first users who primarily want to buy and sell plants
    • users who want an unbounded general-purpose assistant

    Product Promise

    FloraScout should answer five user questions extremely well:

    1. What is this plant?
    2. What should I do next?
    3. What changed since last time?
    4. How healthy is this plant right now?
    5. Am I becoming a better gardener?

    If the product is excellent, users feel more capable after each interaction, not merely more informed.

    Experience Pillars

    1. Discovery must feel rewarding

    Scanning a plant is not just data entry. It is the front door into the product. The reveal moment, collection progress, rarity cues, and first-discovery status are not decoration; they are retention mechanics.

    2. Care must collapse ambiguity into action

    Advice is only useful if it becomes a task, a decision, or a next step. FloraScout should prefer practical guidance over encyclopedic sprawl.

    3. Progress must be visible

    Collections, diary entries, health scores, galleries, and leaderboards all serve the same purpose: showing that the user is building competence over time.

    4. Intelligence must earn trust

    AI should accelerate the user, not bluff them. The product should be transparent about uncertainty, resilient to transient failures, and conservative with destructive or high-confidence claims.

    5. The system should invite return visits

    The product is strongest when it becomes part of a weekly rhythm: scan, review, care, log, improve.

    Core Product Loop

    mermaid
    Rendering diagram...
    flowchart LR
      Notice["Notice a plant or issue"] --> Scan["Scan plant or open collection"]
      Scan --> Reveal["Identify species and trigger discovery reveal"]
      Reveal --> Learn["Read details, weather context, and health signals"]
      Learn --> Plan["Create or accept care tasks"]
      Plan --> Act["Water, prune, repot, observe"]
      Act --> Log["Save diary, photos, and health checks"]
      Log --> Progress["See Dex progress, scores, and leaderboard movement"]
      Progress --> Notice

    Strategic Product Bets

    The Plant Dex is the emotional center

    The Dex is more than a list. It is the memory structure of the app. It turns every scan into a collectible, every plant into a species entry, and every return visit into measurable progress.

    AI is product infrastructure, not the product itself

    The scanner, health check, species details, avatar generation, and assistant are all important, but they only matter insofar as they make the gardening workflow better. The product should never collapse into "ask AI anything."

    Care orchestration beats passive content

    Static plant information is commoditized. The durable value sits in timing, prioritization, and adapting advice to the user's context.

    Lightweight game systems increase adherence

    Discovery status, first-finder moments, badges, credits, and leaderboards are not gimmicks when they reinforce care behavior. They should remain supportive, not manipulative.

    Business Intent

    FloraScout monetizes through credits and subscriptions, but monetization must stay subordinate to trust.

    That means:

    • paid features should feel like acceleration, not ransom
    • free moments must still deliver delight and competence
    • credit costs should remain legible and predictable
    • monetization should reinforce repeat value, not interrupt it

    Success Criteria

    User value signals

    • a first-time user identifies a plant and understands the next step within minutes
    • returning users complete tasks because the app reduces planning friction
    • the collection view becomes a destination, not a dead archive

    Product health signals

    • repeat scan behavior
    • recurring task completion
    • health check reuse
    • diary/gallery accumulation
    • Plant Dex progression over time

    Business signals

    • healthy conversion from free use to credits or subscription
    • high retention among users who complete the discovery-to-care loop
    • low support burden caused by confusing AI or pricing behavior

    Product Boundaries

    FloraScout should avoid becoming:

    • a generic plant content encyclopedia
    • a noisy social feed
    • a hyper-complex project management tool
    • a brittle "AI magic" experience with no fallbacks

    Simplicity is part of the product strategy.

    Decision Filter

    When evaluating roadmap ideas, prefer work that improves at least one of these:

    1. Time to first useful outcome
    2. Clarity of the next care action
    3. Emotional reward of discovery and progress
    4. Retention through recurring plant routines
    5. Trustworthiness of the system under real-world constraints

    If an idea does not improve one of those, it is probably not core.

    Horizon

    Now

    • make scanning, discovery, and care loops feel polished and dependable
    • strengthen the Dex as the main retention surface
    • keep OTA-deliverable improvements flowing quickly

    Next

    • deeper personalized care planning
    • better species-level insight and smarter reminders
    • more useful admin and operational tooling around AI and content quality

    Later

    • richer home and zone intelligence
    • longitudinal plant outcome analysis
    • stronger social proof without sacrificing calmness or utility

    In One Sentence

    FloraScout exists to make plant care feel less uncertain, more actionable, and visibly rewarding over time.

    AUDIT.md

    Contributors Audit Card

    Contributors audit card with lead ask, maturity, risks, roadmap, and contribution slots.

    Sourcegenerated fallback

    FloraScout

    Note: This document is a deployable fallback from the Contributors project profile. Once a project source provides README, vision, or architecture artifacts, that source is rendered first.

    Audit Snapshot

    FloraScout is functional but not publicly launched yet: it needs beta users, ASO review, pricing signals, and community build-up.

    Maturity

    • Present: Store visual, TestFlight/Play Internal, core product, and clear B2C audience.
    • Missing: ASO audit, native-speaker review, beta network, screenshot story, privacy review.

    Lead Ask

    ASO specialist: ASO specialist for v1.4.2 listing audit: keywords, screenshots, title, subtitle, conversion hypotheses, and review plan.