SoundStash

SoundStash

34 devlogs
103h 21m
•  Ship certified
Created by Olivér Pirger

SoundStash is the music streaming platform where you own your music. Upload any audio file and enjoy high-fidelity streaming from anywhere in the world.

Timeline

Ship 1

1 payout of shell 2277.0 shells

Olivér Pirger

about 2 months ago

Olivér Pirger Covers 34 devlogs and 103h 21m

I fixed a couple of remaining issues. Added source code download and issue reporting links to the settings page. Filled in some metadata in package.json and added a LICENCE.md file for GNU Affero General Public Licence (v3). I consider this project complete.

Update attachment

Continuing UX improvements, the storage page now has row selects and mass actions. I fixed the upload field accept types so you now can upload tracks on Safari and other weird browsers. I also shipped some improvements to the edit playlist dialog.

Update attachment

Today I worked on making SoundStash be a more stable experience. I'm nowhere near done, but it's a start. I removed obsolete/unused/unsecured dependencies and API routes, rewrote the middleware to be easier to work with in the future, and tightened it down to secure previously unsecured routes. Tracks can now be downloaded as files from the storage menu. I also fixed the playlists page listing everyone's playlists, instead of just your own.

Update attachment

Many small changes this time around. I've been gradually improving mobile support by adding mobile navigation and a dedicated page to view all your playlists, while making sure the sidebar and the top of the home page doesn't overflow with playlists. I ported the mobile table from the home page to the storage page as well. Playlist editing is now back with a much simpler interface. Now everything is in one dialog component. Both the image and the name of the playlist can be edited. Adding to queue now adds a track right after the currently playing one, not to the end of the queue. I also switched the CSS engine from Tailwind to UnoCSS for better performance. Lastly, I added social login for Google and GitHub (might add more in the future), so you don't have to create an account and your email is pre-verified this way.

Update attachment

I'm so excited to be launching the new UI today! I actually finished everything to take it to feature parity with the old Shadcn UI. Another big thing today: Claude and I made a landing page and optimized SEO for the app. It looks pretty good in my opinion. And the best thing: you get to try it. The demo is live at https://soundstash.pirger.eu (it unbroke itself somehow).

Update attachment

Not much today, I fixed a bug where the space play/pause took control over the space button in input fields, preventing spaces from being typed. Additionally, I added custom styles to the toast notification, and fixed it from getting stuck on navigation.

Update attachment
Olivér Pirger Olivér Pirger 2 months ago
And I almost forgot, playlists can be deleted again!

I spent a bit of time cleaning up the codebase and redesigning the settings menu. And with that, I could finally remove all React dependencies from the project, meaning HUGE performance improvements (at least in dev). The new settings menu features a sign out of all browsers option, meaning you can invalidate all sessions.

Update attachment

Now that the Summer of Making site seems to work again, here's what I've been up to.

The storage page has been fully redesigned and I completely reworked the track upload flow. There's now a separate page for uploading files, and a preview of the exact files you are uploading. You can see how much storage each file is using and remove them from the upload list if you change your mind.

I did some work on making SoundStash more mobile friendly. Both the home page and the player component behave much better now on smaller displays.

I also sprinkled some extra UX improvements all around!

Update attachment

I worked on improving playlists today. Playlist pages have been migrated to the new 100% Svelte UI, the Add to playlist button now brings up a dialog which works the same way it used to, only it works so much faster.
Some messages have been added with hints to empty playlist pages, or the home page, if the user doesn't have any tracks. A few database look-ups have been optimized such that they do not request unnecessary data anymore, improving page loads.
Some loading states have been fixed, eg. when there were 0 tracks in a playlist, now a loading icon shows, and a layout shift has also been fixed that was caused by the search bar not being present in the loading state.

Update attachment

Worked a bit on polishing the home screen UI. Added a search bar to the table with fuzzy filtering on both the title and album. The space button can now be used to play or pause the player. Additionally, I designed and added a dialog component to both the create playlist buttons, so they actually work now.

Update attachment

I worked on a dropdown for the add to queue button on the home page. A bug has also been squashed related to the same track being in the queue multiple times. Also, I'm aware that the demo is broken but I can't really do anything about it.

Update attachment

Fully migrated the home screen to a hacky version of TanStack Table, which let me make it so much better. You now play tracks by clicking a row. Covers and playing statuses are also displayed now. I added loading states for the playlists and the tracks so the page itself loads quicker. I fixed some weird behavior with playing tracks when shuffle is on.

Update attachment

Started working on the redesign of the home page today, but got stuck due to Tanstack Table not supporting Svelte 5. Had to try out lots of table libraries, and the one I ended up using today will probably not be the final one either.

Update attachment

Shuffle and repeat are back in SoundStash. I managed to shrink the codebase associated with this feature by 50%! It has some major bugs still, but I won't be fixing those today.

Update attachment

I continued working on the player component today. The progress bar and seeking works again. Also added screen to tell users to verify their email address. I added a create playlist button to the sidebar if there are no playlists, but it doesn't do anything yet.

Update attachment

Got started writing the new player back-end in Svelte! For now, it can only play singular tracks, but with the redesigned API, it does that much faster. Another change is, that from now on, users can only access their own tracks. The old API didn't check whether the requested track belonged to the user or not.

Update attachment

I designed the rest of the player component today. A bug has also been squashed from the old UI where the slider was jumping around when seeking.

Update attachment

Started work on the desktop layout for the player, and finished the sidebar for navigation from Saturday, which now has an account dropdown menu for managing storage, settings and signing out.

Update attachment

Finished the rest of the authentication pages and started work on a sidebar for when you are logged into the application.

Update attachment

I kept working on the UI today and ended up completely rewriting yesterday's header. I just wasn't happy with how it turned out. The new version has proper mobile support, which is a huge improvement.
I also started designing some new elements for the authentication pages and managed to finish both the sign-in and sign-up pages. Since I rewrote them in Svelte (of course), they're now loading less JavaScript and doing it faster too. The forms feel much more responsive now.
What's really satisfying is that this Svelte rewrite somehow cut the code needed for the forms in half compared to the Shadcn solution I was using before.
PS. I turned off Smart Placement on the demo, which should help it load faster for users overseas.

Update attachment

I finally got around to moving deployment to Cloudflare Workers' edge distribution network, significantly improving load and navigation speeds. Additionally, I started work on a new header for the site, which marks the beginning of SoundStash's migration to Svelte and Bits UI for a prettier user interface.

Update attachment
Olivér Pirger Olivér Pirger 3 months ago

Unfortunately, I can’t really remove the limit. My storage bucket’s space is very limited considering the app’s still under testing, and I also want to provide other people with the 100 MB who want to try SondStash.

Aly Aly 3 months ago

AYYY GLAD TO SEE PROGRESS

ps: pls remove my 100mb limit </3

With about 1000 new lines of code, playlists are finally here and available on the demo (which is back up). Today, I added shuffle and repeat modes and the ability to delete playlists. Some additional toast notifications have been added so you know what's happening. With this, I consider SoundStash somewhat feature complete. However, this is not the end: in the coming weeks, I'll be working on overhauling the UI and tidying up the codebase for a smoother developer and user experience.

Update attachment
Aly Aly 3 months ago

WHAAAT THE UI LOOKS SO GOOD SINCE I LAST SAW IT??

I committed a Vercel build directory containing API keys to the repository, so the demo is going to be down for a bit. I moved the DB to Turso, and rotated all the API keys. Unfortunately, existing user's data couldn't be recovered. You two will have to create new accounts. (sorry)

Update attachment

I made some additional progress on the playlists functionality today. Users can now include images with their playlists, which enhances the user experience by allowing for greater customization. The playback system has been completely redesigned: when playlists are played, selecting any individual song will automatically add all remaining songs from that playlist to the playback queue. The All your tracks section now functions as a playlist as well. Playlists also support shuffled playback mode, with the exception of the All your tracks section, which does not include this shuffle capability (yet).

Update attachment

Bit of UI work today: I don't want to keep SoundStash looking like plain shadcn/ui. And if I'm already redoing all my components, might as well do it in Svelte. Everything's fully functional, but you have to trust me on this one, because there's no way I'm deploying this.

Update attachment

Something you can actually try today: Opus support is now here! You can now upload any Opus file to SoundStash.

Update attachment

I've been working hard today to bring playlists to SoundStash. Playlists can now be created and tracks can be seamlessly added or removed them. I've also implemented several additional endpoints for internal use. While it's not quite ready for you to try yet, I'm confident I'll have everything wrapped up by the end of next week. I'm genuinely excited about this project because it's really starting to come together, and I can already see it becoming something I'll actually want to use myself.

Update attachment
Aly Aly 3 months ago

fr, I love this!!!

snej55 snej55 3 months ago

This is a really cool project!

SoundStash is getting better day by day. Support for album covers has been added. Album covers are extracted straight from the uploaded music files and stored in our storage bucket. Don't worry, album covers do not count towards your 100 MB storage limit.
From now on, some more metadata is stored about the songs you upload to populate the UI, so it looks a bit nicer now.
I fixed a couple of bugs related to yesterday's addition of the progress bar. It should be much smoother to use on all browsers.

Update attachment

Big improvements today to music playback. I added a progress bar that can be used to move anywhere withing a song. It currently works best in Firefox based browsers. I also fixed the fix for the playback of queue songs.

Update attachment

Bit of behind the scenes work today. I migrated storage to Cloudflare R2. What this means for you: SoundStash will be able to support more users (since R2's free tier has got 10x the storage of Vercel Blobs), and (in my experience) uploads and playbacks will be generally faster. Additionally, I fixed the playback of queued tracks.

Update attachment

You can now play your music in SoundStash! Upload any MP3 or FLAC files and stream your music from anywhere.

Update attachment
Aly Aly 3 months ago

absolutely love this project!

can’t wait to see how it develops :>

You can now remove tracks from your library. Furthermore, you can now change your password if you forget it, or in the settings if you want to.

Update attachment

File uploads now work. You can upload your MP3 and FLAC files to SoundStash.

Update attachment

Built the foundation of my music streaming service, where you'll be able to play your own (legally obtained) music. Added user authorization, so you can create an account, sign in, verify your email, and sign out.

Update attachment