Modern web music player built with HTML, CSS, and Vanilla JavaScript.
The app lets users upload local audio files, read metadata, play tracks, manage a playlist, and keep data between sessions.
- Upload MP3/WAV files (drag & drop or file picker)
- Extract metadata (title, artist, cover) from audio tags
- Play/Pause/Next/Previous controls
- Seek with progress bar
- Search tracks in playlist
- Delete tracks from playlist
- Persist playlist in IndexedDB
- Sync active track with URL history (
?track=...) - Basic offline behavior via Service Worker
- HTML5 (semantic structure, forms, accessibility attributes)
- CSS3 (responsive layout, transitions, animations, media queries)
- JavaScript ES Modules (class-based architecture)
- Web Components (
<playlist-track>) - IndexedDB + LocalStorage
- Service Worker + Cache API (PWA shell caching)
jsmediatags(metadata extraction from audio files)
Create a browser-based music player without backend dependencies, focused on:
- local file playback,
- clean user experience,
- persistent data storage,
- offline-ready shell behavior.
js/main.jsinitializes popup, data layer, player, search, clouds, and service worker.js/dataHandler.jsvalidates files, reads metadata, computes duration, stores tracks.js/storage.jspersists/retrieves tracks from IndexedDB (skyTuneDB).js/playlistRenderer.js+js/PlaylistTrack.jsrender each track as custom element.js/player.jshandles playback, UI sync, and History API navigation.js/sw.jscaches app shell and serves cached content in offline mode.
- Artist and cover are added only if these fields exist in audio metadata.
- If metadata is missing, fallback values are used (for example: unknown artist).
Track upload is blocked when internet is unavailable.
The app shows an error asking the user to reconnect before adding songs.
sem/
├─ index.html
├─ manifest.webmanifest
├─ README.md
├─ README2.0.md
├─ css/
│ ├─ style.css
│ └─ popUp.css
├─ js/
│ ├─ main.js
│ ├─ dataHandler.js
│ ├─ player.js
│ ├─ search.js
│ ├─ storage.js
│ ├─ playlistRenderer.js
│ ├─ PlaylistTrack.js
│ ├─ popup.js
│ ├─ cloud.js
│ └─ sw.js
└─ photo/
├─ *.svg
├─ *.jpg
└─ finn.png
- Service worker cache list references
photo/pwa-icon.svgwhich should exist for full PWA icon support. - Upload currently depends on internet availability by project rule.
- Volume control, repeat, shuffle
- Drag-sort playlist
- Improved cache strategy (stale-while-revalidate)
- Better memory cleanup for generated object URLs
Educational project.