gitextract_5r8ltyem/ ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ ├── codeql.yml │ └── main.yml ├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── client/ │ ├── .eslintrc.json │ ├── index.html │ ├── package.json │ ├── public/ │ │ ├── ads.txt │ │ └── robots.txt │ ├── src/ │ │ ├── components/ │ │ │ ├── AmountInfo.jsx │ │ │ ├── AmountInfo.module.css │ │ │ ├── App.css │ │ │ ├── App.jsx │ │ │ ├── ChangeDetails.jsx │ │ │ ├── ChangeDetails.module.css │ │ │ ├── Coffee.jsx │ │ │ ├── Coffee.module.css │ │ │ ├── Contact.jsx │ │ │ ├── Contact.module.css │ │ │ ├── Disclosure.jsx │ │ │ ├── Disclosure.module.css │ │ │ ├── Episode.jsx │ │ │ ├── Episode.module.css │ │ │ ├── EpisodeList.jsx │ │ │ ├── EpisodeList.module.css │ │ │ ├── Error.jsx │ │ │ ├── Error.module.css │ │ │ ├── Github.jsx │ │ │ ├── Github.module.css │ │ │ ├── Header.jsx │ │ │ ├── Header.module.css │ │ │ ├── ListTabs.jsx │ │ │ ├── ListTabs.module.css │ │ │ ├── ScrollButton.jsx │ │ │ ├── ScrollButton.module.css │ │ │ ├── Searchbox.jsx │ │ │ ├── Searchbox.module.css │ │ │ ├── Sort.jsx │ │ │ ├── Sort.module.css │ │ │ ├── Sponsor.jsx │ │ │ ├── Sponsor.module.css │ │ │ ├── Tag.jsx │ │ │ └── Tag.module.css │ │ ├── hooks/ │ │ │ ├── useFetch.js │ │ │ ├── useMinLoadingTime.js │ │ │ └── useScroll.js │ │ ├── index.css │ │ ├── index.jsx │ │ ├── skeletons/ │ │ │ ├── SkeletonList.jsx │ │ │ ├── SkeletonStyles.module.css │ │ │ └── SkeletonText.jsx │ │ ├── utils.js │ │ └── utils.test.js │ ├── tsconfig.json │ ├── vite-env.d.ts │ └── vite.config.ts └── server/ ├── .eslintrc.json ├── api/ │ ├── __mocks__/ │ │ └── mockResponse.js │ ├── dev-api.js │ └── index.js ├── app.js ├── db/ │ ├── connect.js │ ├── db.js │ ├── mapQueries.js │ └── migration/ │ ├── missingEpisodesPerNow.js │ ├── schema.sql │ ├── seeds.sql │ └── setup.js ├── lib/ │ ├── getEpisodeNumber.js │ ├── getEpisodeNumber.test.js │ └── getSpotifyEpisodes.js ├── package.json ├── utils/ │ └── utils.js └── worker/ ├── tasks/ │ └── refreshDb.js └── worker.js