MD3E Android Flushes app 🚽
flushes android client
README.md

Flushed for Android #

A playful, native Android client for the im.flushing.right.now AT Protocol record used by flushes.app.

Highlights #

  • A mockup-driven edge-to-edge home feed with dedicated Search, Stats, You, and profile screens—without a tab bar.
  • Dynamic Material You color, the Google Sans Flex and Roboto Flex variable fonts used by PixelPlayerOSS, and restrained expressive emoji shapes.
  • AT Protocol OAuth through kikin81/atproto-kotlin: handle discovery, PAR, PKCE, DPoP, secure session persistence, and transparent token refresh.
  • Browse the public community feed with endless loading, month-labeled fast scrolling, and Material 3 pull-to-refresh.
  • Search people and open cached profile screens with totals, average daily flushes, monthly activity, top emojis, and a Bluesky profile shortcut.
  • Create records while signed out. They stay on-device and are published after sign-in; failed PDS writes also fall back to the local queue.
  • Create, list, update, and delete records in the signed-in user's PDS.
  • Editing includes the status, emoji, date, and time.
  • A label-only Quick Settings tile moves through Flush, Flushing, and Flushed without a selected-color state. Long-press it to open the centered text-and-emoji editor.
  • The launcher and masthead mascot combine Noto Emoji's Distorted Face with a regular person pictogram.

OAuth setup #

AT Protocol OAuth requires public client metadata. Deploy website/oauth-client-metadata.json so it is available at:

https://flushed.jolly.you/oauth-client-metadata.json

The metadata must be served publicly with Content-Type: application/json. The included website/_headers asks compatible static hosts to keep this file revalidatable instead of caching OAuth configuration immutably for a year.

Set the URL in either ~/.gradle/gradle.properties or this project's untracked local.properties:

flushed.oauthClientMetadataUrl=https://flushed.jolly.you/oauth-client-metadata.json

The redirect URI in the hosted metadata must remain:

you.jolly.flushed:/oauth-redirect

This domain is already the build default, so the Gradle property is only needed if you want to use another deployment for development.

Build #

Requirements: JDK 17 and Android SDK 37.

./gradlew test assembleDebug

Install with:

./gradlew installDebug

On Android 13+, use the in-app “Flush from anywhere” card to request the Quick Settings tile. On older Android versions it opens Quick Settings customization, where Flush can be dragged into the active tiles.

Record shape #

{
  "$type": "im.flushing.right.now",
  "text": "is flushing",
  "emoji": "🚽",
  "createdAt": "2026-04-05T19:42:00Z"
}

The bundled Google Sans Flex and Roboto Flex assets are under the SIL Open Font License; the license text is included at app/src/main/assets/licenses/OFL.txt.