gitextract_l3fdckbo/ ├── .dockerignore ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ └── docker-image.yml ├── .gitignore ├── Dockerfile ├── Dockerfile.multiarch ├── LICENSE ├── Makefile ├── README.md ├── cmd/ │ └── main.go ├── docker-compose.yml ├── docs/ │ ├── installation.md │ ├── overview.md │ └── roadmap.md ├── go.mod ├── go.sum ├── internal/ │ ├── config/ │ │ └── config.go │ ├── http/ │ │ ├── consts.go │ │ ├── handlers.go │ │ ├── messages.go │ │ ├── middlewares.go │ │ ├── parser.go │ │ └── server.go │ ├── logger/ │ │ └── logger.go │ ├── pkg/ │ │ ├── ffmpeg/ │ │ │ ├── const.go │ │ │ ├── ffmpeg.go │ │ │ └── types.go │ │ ├── fs/ │ │ │ └── fs.go │ │ ├── hls/ │ │ │ ├── const.go │ │ │ ├── playlist.go │ │ │ ├── playlist_test.go │ │ │ ├── segment.go │ │ │ └── segment_test.go │ │ ├── sql/ │ │ │ └── sql.go │ │ ├── sse/ │ │ │ ├── emitter.go │ │ │ └── event.go │ │ └── ulid/ │ │ └── ulid.go │ ├── playback/ │ │ ├── service.go │ │ ├── state.go │ │ └── types.go │ ├── playlist/ │ │ ├── consts.go │ │ ├── service.go │ │ └── types.go │ ├── queue/ │ │ ├── service.go │ │ └── types.go │ ├── station/ │ │ ├── const.go │ │ ├── service.go │ │ └── types.go │ ├── storage/ │ │ ├── sqlite/ │ │ │ ├── migrations/ │ │ │ │ ├── migrations.go │ │ │ │ └── runner.go │ │ │ ├── playback.go │ │ │ ├── playlist.go │ │ │ ├── queue.go │ │ │ ├── sqlite.go │ │ │ ├── station.go │ │ │ └── track.go │ │ └── storage.go │ └── track/ │ ├── consts.go │ ├── service.go │ └── types.go └── web/ ├── player/ │ ├── .gitignore │ ├── .prettierrc │ ├── README.md │ ├── index.html │ ├── package.json │ ├── src/ │ │ ├── App.tsx │ │ ├── api/ │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── const.ts │ │ ├── index.css │ │ ├── index.tsx │ │ ├── page/ │ │ │ ├── CurrentTrack.module.css │ │ │ ├── CurrentTrack.tsx │ │ │ ├── History.module.css │ │ │ ├── History.tsx │ │ │ ├── ListenersCounter.module.css │ │ │ ├── ListenersCounter.tsx │ │ │ ├── Page.module.css │ │ │ ├── RadioButton.module.css │ │ │ ├── RadioButton.tsx │ │ │ ├── StationInformation.module.css │ │ │ ├── StationInformation.tsx │ │ │ └── index.tsx │ │ ├── store/ │ │ │ ├── events.ts │ │ │ ├── history.ts │ │ │ └── track.ts │ │ ├── utils/ │ │ │ ├── color.ts │ │ │ ├── date.ts │ │ │ ├── document.ts │ │ │ └── url.ts │ │ └── vite-env.d.ts │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts └── studio/ ├── .gitignore ├── .prettierrc ├── README.md ├── index.html ├── package.json ├── src/ │ ├── App.tsx │ ├── api/ │ │ ├── index.ts │ │ ├── types.ts │ │ └── utils.ts │ ├── components/ │ │ ├── AudioPlayer.tsx │ │ ├── AuthGuard.tsx │ │ └── EmptyLabel.tsx │ ├── hooks/ │ │ ├── useIsMobile.ts │ │ └── useThemeBlackColor.ts │ ├── icons/ │ │ ├── index.tsx │ │ └── types.ts │ ├── index.css │ ├── main.tsx │ ├── notifications/ │ │ └── index.ts │ ├── page/ │ │ ├── DesktopPage.tsx │ │ ├── MobileBar.tsx │ │ ├── MobilePage.tsx │ │ ├── Playback.tsx │ │ ├── Playlists.tsx │ │ ├── Settings.tsx │ │ ├── TracksLibrary.tsx │ │ ├── TracksQueue.tsx │ │ ├── index.tsx │ │ └── styles.module.css │ ├── store/ │ │ ├── events.ts │ │ ├── playback.ts │ │ ├── playlists.ts │ │ ├── settings.ts │ │ ├── track-queue.ts │ │ └── tracks.ts │ ├── theme.ts │ ├── types/ │ │ └── index.ts │ ├── utils/ │ │ ├── array.ts │ │ ├── error.ts │ │ ├── json.ts │ │ └── time.ts │ └── vite-env.d.ts ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts