-
Notifications
You must be signed in to change notification settings - Fork 3
Home
ashwkun edited this page Jul 7, 2026
·
5 revisions
Boxlore 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.
Boxlore doesn't just use standard Material components; it embraces the Expressive spec:
-
Physics-Based Motion: We use
BouncySpringandQuickSpringinstead of linear easing. Every interactive surface scales down on press and bounces back via our customexpressiveClickablemodifiers. - 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.
- 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.
- 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.
- 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.