A modern, full-featured music streaming and management platform built with Vue 3, Firebase, and Vite. Users can upload, manage, share, and stream music tracks with an integrated audio player, commenting system, and user authentication.
Music Tracker is a Progressive Web Application (PWA) that enables users to:
- Browse & Stream: Discover and listen to music tracks with an integrated audio player
- Upload & Manage: Authenticated users can upload their own music files and manage their library
- Comment & Engage: Leave comments on songs and interact with the community
- Offline Support: PWA capabilities enable offline access to previously loaded content
- Integrated audio player powered by Howler.js
- Play/pause controls with seek functionality
- Real-time progress tracking
- Persistent player across navigation
- User registration and login via Firebase Authentication
- Protected routes for authorized content
- User profile management
- Secure session handling
- Drag-and-drop file upload interface
- Real-time upload progress tracking
- Firebase Storage integration
- Organized music library management
- Edit song metadata (title, genre)
- Comment system for each song
- Sortable comments (latest/oldest)
- Comment count tracking
- User-specific comments
- Multi-language support (English, French)
- Localized number formatting (currency)
- Easy language switching
- Offline functionality
- Installable on mobile and desktop
- Service worker caching
- Optimized for performance
- Vue 3 - Composition and Options API
- Vue Router - Client-side routing with guards
- Pinia - State management
- Firebase Authentication - User management
- Cloud Firestore - NoSQL database with offline persistence
- Firebase Storage - Media file storage
- Tailwind CSS - Utility-first CSS framework
- Font Awesome - Icons
- Custom directives - Icon management
- Howler.js - Cross-browser audio library with HTML5 Audio API
- Vite - Next-generation frontend tooling
- Vitest - Unit testing framework
- Cypress - E2E testing
- ESLint + Prettier - Code quality and formatting
- VeeValidate - Form validation
- NProgress - Page loading progress bar
- Vue I18n - Internationalization
- PWA Plugin - Service worker & manifest generation
src/
βββ components/ # Reusable Vue components
β βββ Auth.vue # Authentication modal
β βββ Player.vue # Audio player component
β βββ Upload.vue # File upload interface
β βββ ...
βββ views/ # Page components
β βββ Home.vue # Browse songs with infinite scroll
β βββ Manage.vue # User's music library management
β βββ Song.vue # Individual song page with comments
β βββ About.vue # About page
βββ stores/ # Pinia state management
β βββ user.js # Authentication state
β βββ player.js # Audio player state
β βββ modal.js # Modal state
βββ router/ # Vue Router configuration
βββ includes/ # Utility modules
β βββ firebase.js # Firebase initialization
β βββ validation.js # VeeValidate setup
β βββ i18n.js # Internationalization
β βββ ...
βββ directives/ # Custom Vue directives
βββ locales/ # Translation files
βββ assets/ # Static assets (CSS, images)
- Users can register with email, password, name, age, and country
- Login persists across sessions using Firebase Auth
- Protected routes redirect unauthenticated users
- User data stored in Firestore
- Authenticated users access the Manage page
- Drag-and-drop or select MP3 files
- Files upload to Firebase Storage with progress tracking
- Metadata saved to Firestore (user ID, file URL, genre, etc.)
- Uploaded songs appear in user's library
- Browse songs on the homepage (infinite scroll pagination)
- Click any song to view details and play
- Player persists across page navigation
- Seek/scrub through timeline
- Real-time progress display
- Authenticated users can comment on songs
- Comments stored in Firestore with timestamps
- Sortable by latest or oldest
- Real-time comment count
VSCode + Volar (and disable Vetur) + TypeScript Vue Plugin (Volar).
See Vite Configuration Reference.
npm installnpm run devnpm run buildRun Unit Tests with Vitest
npm run test:unitRun End-to-End Tests with Cypress
npm run test:e2e:devThis runs the end-to-end tests against the Vite development server. It is much faster than the production build.
But it's still recommended to test the production build with test:e2e before deploying (e.g. in CI environments):
npm run build
npm run test:e2eLint with ESLint
npm run lint