Octave

Mock music streaming service where users can create accounts, create & play playlists, save songs, view albums.

Features & functionality

  • Search page
  • Accounts (Sign in with google)
    • With playlists and saved songs
  • Fully functional playlists
    • With visibility settings (i.e only the user can see the playlist or they can make it public)
  • Shuffling playlists & albums
  • Album views
  • Full screen view
  • Settings
  • Backend
  • Note: Octave does not actually play music, only silent audio with the same length as the song

Problems Faced

Hosting on firebase using Next.js 14

  • Every time I navigated using <Link> there would be a full page reload
  • This behavior reset the app state between pages
    • Caused the app to completely forget the currently playing song, and had to re-fetch the authentication state
    • Solution: force-dynamic on the root route:
//	app/layout.tsx
 
export const dynamic = "force-dynamic"

Additional Info

  • Cached track metadata on browser using localstorage
  • Recently migrated the project to typescript when I migrated to Next.js