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
Share this project:

Updates