Skip to content

web app architecture

the freqhole web app is a browser-based music player with offline capabilities that connects to one or more freqhole servers (“remotes”).


a remote is a freqhole server you connect to.

you can add multiple remotes:

  • your home server (HTTP)
  • a friend’s server (P2P)
  • demo server (HTTP)

each remote has:

  • connection info (URL or node ID)
  • your account on that server
  • its own library of music

the currently active remote is shown in the header. switch between remotes to browse different libraries.

the remote ... menu also exposes a profile page when you’re signed in. use it to update your username or generate an account-link code for a new passkey/device.


the web app stores data in your browser — nothing is written to your file system.

  • library metadata: all songs, albums, artists, playlists (IndexedDB)
  • album artwork: thumbnails and full-size covers (IndexedDB)
  • audio files: songs you’ve played, for offline use (OPFS — a private browser file system)
  • user preferences: volume, queue, view settings (IndexedDB)

OPFS (Origin Private File System) is a sandboxed storage area provided by the browser — it’s not visible in your file manager and other sites can’t access it.

see where music lives for a full breakdown of storage across all client types.


the web app works without a network connection.

  • browse your entire library (metadata is cached)
  • view album artwork (cached on first view)
  • play cached songs
  • create/edit playlists (syncs when online)
  • status badge shows “offline”
  • uncached songs show a cloud icon
  • playback attempts on uncached songs show a message

when the connection returns:

  • library changes sync automatically
  • queue changes apply
  • new artwork downloads
  • pending actions complete

  • album artwork: cached when viewed
  • recently played songs: cached after playback
  • library metadata: synced periodically
  • queue items from remotes are saved locally as they play

see where music lives for details on how remote and P2P audio is saved.

download specific content for offline use:

  • download album: caches all songs + artwork
  • download playlist: caches all songs in playlist

in settings:

  • view cache size per remote
  • clear cached audio (keeps artwork)
  • clear everything

the web app uses WebAuthn for authentication:

  • no passwords to remember
  • uses device biometrics (fingerprint, Face ID)
  • secure against phishing
  • one passkey per device
  • sessions stored in browser
  • stay logged in until you log out
  • each remote has separate session