Features & Technology Stack

Everything My Music offers, split by who can use it.

Feature Overview

Published — for listeners
  • Track library with search by title, artist, or album
  • Audio player with play, pause, seek, and volume controls
  • Next / previous track navigation
  • Smooth background art cross-fade on track change
  • Responsive layout — works on mobile and desktop
  • Static site export for fast, lightweight deployment
  • Multi-theme color schemes with live switcher
  • Development issue log with commit-level resolutions
Admin — for developers
  • Track upload with audio file and auto duration detection
  • iTunes metadata lookup by title / artist
  • Automatic cover art download from iTunes
  • Inline editing of track metadata and audio files
  • Created-at / updated-at timestamps on every track
  • Server-only data layer with JSON file storage
  • One-click publish with auto-generated commit message
  • File upload validation (type, size, extension)
  • Production environment guard on all API routes
  • Safe git operations with argument array (no shell injection)
  • npm run audit — dependency vulnerability checker
  • Security lint rules via eslint-plugin-security

Technology Stack

LayerTechnologyPurpose
FrameworkNext.js 16App Router, static export
UI LibraryReact 19Client components, hooks, context
LanguageTypeScriptType safety across the entire stack
StylingTailwind CSS v4Utility-first styling with @theme
TestingVitest + RTLUnit tests with React Testing Library
LintingESLinteslint-config-next, core-web-vitals, security plugin
DataJSON fileServer-only fs read/write, no DB
Audio detectionHTMLAudioElement APIClient-side duration from metadata
External APIiTunes Search APIMetadata and cover art lookup
ThemingCSS custom properties7 color schemes with runtime switching
AI toolingopencodeConversational development workflow

Architecture

Public (static export)          Admin (dev only)
┌──────────────────────┐    ┌──────────────────────┐
│   TrackView          │    │   AdminPage           │
│   AudioPlayer        │    │   Track upload form   │
│   BackgroundArt      │    │   iTunes search       │
│   TrackList          │    │   Edit track UI       │
└──────┬───────────────┘    └──────┬────────────────┘
       │                           │
       │    PlayerContext          │
       │    (React context)        │
       └──────┬────────────────────┘
              │
     ┌────────▼────────┐
     │  data/tracks.ts  │  server-only
     │  data/tracks.json│  JSON file
     └─────────────────┘