Skip to main content

Web Player

Next.js web application for music streaming. Replaces the retired apps/web client โ€” see ADR-0011.

๐Ÿš€ Quick Startโ€‹

cd apps/web-player

# Install dependencies (from repo root)
pnpm install

# Start development server
pnpm dev

Application will be available at http://localhost:3001

๐Ÿ—๏ธ Architectureโ€‹

apps/web-player/src follows Feature-Sliced Design (FSD); see ADR-0002. Imports flow downward only: app โ†’ views โ†’ widgets โ†’ features โ†’ entities โ†’ shared.

apps/web-player/src/
โ”œโ”€โ”€ app/ # Next.js App Router โ€” layout.tsx, page.tsx, providers
โ”œโ”€โ”€ views/ # Full-page compositions for one route
โ”œโ”€โ”€ widgets/ # Self-contained sections: Header, Player, Sidebar
โ”œโ”€โ”€ features/ # User interactions: Album, AuthModal, Playlist, Track
โ”œโ”€โ”€ entities/ # Domain objects: Track, User, Player
โ””โ”€โ”€ shared/ # api/, hooks/, store/, ui/, routes/, constants/, validation/

Route files under app/ are thin adapters that render a view โ€” see ADR-0010.

๐ŸŽจ Tech Stackโ€‹

  • Next.js (App Router) + React 19 + TypeScript
  • Tailwind CSS v4 + @bitrate/ui-react โ€” design tokens, CVA, shadcn-style components (see ADR-0006)
  • openapi-fetch + TanStack Query โ€” typed API client generated from the NestJS Swagger contract (see ADR-0004)
  • Zustand โ€” cross-component client state (see ADR-0005)
  • React Hook Form + Zod โ€” forms (see ADR-0007)
  • hls.js โ€” adaptive audio streaming playback

๐Ÿ”ง API clientโ€‹

// shared/api/client/fetchClient.ts โ€” openapi-fetch + JWT refresh middleware
export const apiClient = createClient<ApiPaths>({ baseUrl: ... })

// shared/api/client/reactQueryClient.ts โ€” openapi-react-query
export const { useQuery, useMutation, useSuspenseQuery } = createReactQueryClient(apiClient)

Components call useQuery/useMutation from reactQueryClient โ€” never raw fetch or Axios.

๐Ÿงช Testingโ€‹

pnpm --filter @bitrate/web-player test:unit
pnpm --filter @bitrate/web-player test:int
pnpm --filter @bitrate/web-player test:e2e
pnpm --filter @bitrate/web-player test:screenshot

๐Ÿš€ Build & Deployโ€‹

pnpm --filter @bitrate/web-player build
pnpm --filter @bitrate/web-player start

Related: