Skip to content
Aswin C edited this page Mar 27, 2026 · 5 revisions

BoxCast

BoxCast is a modern podcast app for Android, built entirely with Kotlin and Jetpack Compose.

We focus on clean design, fast discovery, and a playback experience that stays out of your way. We strictly follow the Material 3 Expressive guidelines to deliver an interface that feels alive.


🎨 The UX Philosophy (Material 3 Expressive)

BoxCast doesn't just use standard Material components; it embraces the Expressive spec:

  • Physics-Based Motion: We use BouncySpring and QuickSpring instead of linear easing. Every interactive surface scales down on press and bounces back via our custom expressiveClickable modifiers.
  • Variable Typography: We use Roboto Flex, utilizing variable axes like weight, width, and slant dynamically across the app.
  • Expressive Shapes: Backgrounds and avatars utilize unique M3 shapes (Sunny, Burst, Puffy, Cookie) instead of just generic rounded rectangles.
  • Dynamic Theming: Album art colors are extracted in real-time. The entire player surface and surrounding UI instantly adapt to the dominant colors of whatever you are currently listening to.
  • Mosaic Grids: We avoid rigid uniform grids. The Smart Shuffle and Explore pages use staggered grids that adapt item sizing dynamically based on screen real estate.

🎧 Core Features

The Home Feed

  • Hero Carousel: Spotlight trending podcasts with full-bleed artwork.
  • Curated Time Blocks: Morning, afternoon, and evening picks that adapt to when you open the app.
  • Smart Shuffle: Resume listening with a mosaic grid of recently played and new episodes.

The Player

  • Fluid Seek Controls: 10-second skip forward/backward with spring-animated tactile feedback.
  • Queue Management: Drag-to-reorder, swipe to dismiss, and play-next queuing.
  • Advanced Audio: Variable Playback Speed (0.5× to 3× with pitch correction) and Sleep Timers with fade-out.

Privacy & Control

  • Strict Opt-In Analytics: Firebase Analytics and Crashlytics are fully blocked until the user explicitly agrees via a clear consent dialog on first launch.
  • Complete Local Control: Users can reset all generated analytics IDs via Settings at any time.

Clone this wiki locally