Inspiration
We’ve all been there, saving links in browser bookmarks, screenshots of stuff we want to remember, or random notes scattered across different apps. After a while, it just feels messy and disconnected.
That’s what made me build Stashly: a single, clean place where you can stash everything (links, files, notes) and actually find them later. Plus, it looks modern and feels personal.
What it does
Stashly is basically your personal vault for digital clutter:
Save links, notes, and files in one place.
Get automatic link previews (titles, favicons, images, the whole deal).
Open files and images right inside the app.
Favorite and filter items so you don’t lose track.
Switch between light/dark mode with Material 3 styling.
How we built it
UI: Jetpack Compose + Material 3 for that modern, smooth look.
Storage: Room Database for keeping everything persistent.
Previews: Jsoup for scraping link metadata, Coil for images.
Architecture: MVVM with coroutines + Flow for reactivity.
Files: Android’s Storage Access Framework for picking and handling files.
Challenges we ran into
Jsoup doesn’t always give nice metadata (YouTube links, for example, return half-baked titles).
Some sites like Twitter just block scraping altogether.
Handling content:// URIs from providers like Google Photos was tricky — previews didn’t always render.
Getting previews for text, files, and links to look consistent across the app needed extra design tweaks.
Accomplishments we’re proud of
Designed a clean, card-based UI that works for all types of content.
Built custom progress indicators (both linear wavy and circular wavy!).
File/image previews inside detail screens actually feel smooth.
Navigation and state handling feels seamless across the app.
What we learned
Went deep into Jetpack Compose components like Scaffold, FlowRow, and custom drawing.
Learned how to wrangle Android’s ContentProviders + SAF for file URIs.
Found the sweet spot between performance and UI (async image loading, metadata fetching).
Discovered the limits of scraping and why APIs sometimes make more sense.
What’s next for Stashly
Add cloud sync so stashes aren’t tied to just one device.
Lock the vault with password/biometrics for private stuff.
Richer previews (like YouTube thumbnails, Twitter cards, etc.).
Backup/restore with import/export.
a share to Stashly intent so saving from any app feels natural.
Built With
- coil
- jetpackcompose
- koindi
- kotlin
- material3
- room
Log in or sign up for Devpost to join the conversation.