Android · Jetpack Compose · SDK 1.0.2

# Feature Plans

Share your roadmap, collect votes, and accept suggestions by email.

## Prepare your content

Complete the [Android quickstart](https://docs.mobilejoe.dev/android/quickstart.md), then save a feature plan in the dashboard with a status other than **Draft**. The status controls the [list filters](https://docs.mobilejoe.dev/sdk/content-delivery.md#feature-plans).

## Compose integration

```kotlin
import androidx.compose.runtime.Composable
import dev.mobilejoe.ui.compose.feature.FeaturePlanHost
import dev.mobilejoe.ui.compose.feature.FeaturePlanUiConfiguration

@Composable
fun RoadmapScreen(onNavigateUp: () -> Unit) {
    FeaturePlanHost(
        configuration = FeaturePlanUiConfiguration(
            recipient = "support@example.com",
        ),
        onNavigateUp = onNavigateUp,
    )
}
```

Place this in `RoadmapScreen.kt` under your app package and use it as a destination in your existing Compose navigation inside your Material theme. The host handles list and detail navigation. Supply `selectedFeatureId` to open an existing plan directly. The current component name is `FeaturePlanHost`.

## Suggestions and filtering

The suggestion action opens email to `recipient`, with optional `subject` and `body`. It does not create an in-app submission form. The list provides search, sorting, and status filters; detail screens offer voting.

## Core API and refresh

For a custom UI, `dev.mobilejoe.api.feature.FeaturePlans` exposes suspending `load()`, `load(id)`, `reload()`, `vote(featurePlan)`, `setStatusFilter`, `setSorting`, and `setSearchQuery`. Run calls in a lifecycle-owned coroutine with error handling. Collection loads paginate; use `reload()` to restart the collection. The Compose screen manages its own loads and filter changes and supports pull to refresh, without automatic polling.

## Verify

Find your plan, open its detail, cast a vote and check its state. Try search and status filters, and test the suggestion email on a device with an email app. If a plan is missing, check the selected filter and follow [Troubleshooting](https://docs.mobilejoe.dev/sdk/troubleshooting.md#missing-content).
