This started as a hackathon project with two of my friends. We had a weekend to build something, decided on a podcast player, and split the work across frontend, backend, and database. After the hackathon we kept going - adding proper authentication, a playback system, and the ability to upload and store audio.
Features
- Upload and store podcast audio in the database
- Stream or download episodes directly
- Player controls with progress tracking
- Favourites with login system
Key decisions
- React Context for the audio player — the player is a single shared instance that persists across route changes; Context is the right scope for exactly this pattern without pulling in a state management library for what is genuinely a global singleton
- MongoDB for audio metadata — the metadata schema from different podcast feeds varies enough that a document model fits better than forcing it into fixed columns; flexible documents let us store whatever a feed provides without schema migrations
- Explicit ownership over pair programming — splitting frontend, backend, and database across three people with clear interfaces let us work in parallel without merge conflicts; the boundary between layers was defined before any code was written