<!-- AI agents: this is the Markdown version of an AppNorth documentation page. Index: https://www.appnorth.app/llms.txt -->

# Community view

Use `AppNorthView` to show your project's boards and ideas, let people propose improvements, and open idea details with comments.

## Present the community {#present}

Retain the [configured client](/docs/install#configure) outside the view body. The SDK owns the community navigation stack; a sheet is a convenient entry from an existing settings screen.

```swift title="CommunityEntry.swift"
import SwiftUI
import AppNorth

struct CommunityEntry: View {
    let client: AppNorthClient
    @State private var isPresented = false

    var body: some View {
        Button("Ideas and roadmap") { isPresented = true }
            .sheet(isPresented: $isPresented) {
                AppNorthView(client: client)
            }
    }
}
```

The screen loads boards and ideas, offers board and sort controls, supports pull to refresh, and opens a creation sheet. Votes update optimistically and revert on failure. The built-in list loads the first page; use the [client API](/docs/custom-ui#pagination) for your own paginated list.

## Match your community policies {#policies}

Each board supplies independent `submission`, `vote`, and `comment` policies: `anyone`, `identified`, or `disabled`. Install a [verified identity](/docs/verified-identity) for identified actions. The SDK uses these policies for controls; the server also enforces them.

Open and closed filtering follows `AppNorthBoardStatus.isFinal`, not a hard-coded status name. Disable the filter when you want one combined list:

```swift title="CombinedCommunity.swift"
import SwiftUI
import AppNorth

struct CombinedCommunity: View {
    let client: AppNorthClient

    var body: some View {
        AppNorthView(
            client: client,
            uiConfiguration: AppNorthUIConfiguration(
                showsOpenClosedFilter: false,
                upvoteIcon: .thumbsUp,
                showsChatButton: false
            )
        )
    }
}
```

`showsChatButton` defaults to `true`; the floating entry still depends on chat availability. Branding comes from `widgetConfig()`. A failed branding request does not prevent the community from loading.

## Keep pending ideas honest {#moderation}

Creation responses include `moderated`. Treat a moderated submission as awaiting review rather than promising it is publicly visible. Board labels, status colors, counts, and policies come from the server.

## Verify {#verify}

1. Open a board and switch sorting and open/closed filtering. Confirm closed ideas follow the board's final statuses.
2. Submit a test idea, vote, remove the vote, and add a comment under the configured policies.
3. Try an identified action before and after sign-in, then dismiss and recreate the community screen after logout.
4. Check a moderated board and an empty board; neither should display invented activity or counts.
