Awesome Radio
Awesome Radio is a personal internet radio station aggregator.
Features
- Browse radio stations by tag
- Listen while navigating
- Fully responsive UI for mobile, tablets, and desktop
- Light and dark theme automatically enabled by OS settings
- Deep linking for all UI actions
- User accounts
- Add content sources to import stations
Roadmap
- Support user favorites
- Support importing from other source types
- Support manually adding/editing/disabling stations
- Support PWA to allow user to save to home screen on mobile devices
- User profile page
- Fix: Primary drawer stays open after navigation
- Fix: Station id in deep-link url...should be station slug
- Fix: Missing form validation and error handling
- Tech Debt: Add more unit and E2E tests
Development
Tech Stack
- Remix: React SSR web framework
- SQLite: File based relational database
- Prisma: Node TS ORM
- Vitest: Unit test framework
- Cypress: Browser automation test framework
- Tailwind CSS: CSS utility framework
- DaisyUI: Component CSS library built with Tailwind
- PostCSS: CSS pre-processor
- Typescript: Typed Javascript
Project Structure Summary
.
├── .github/ Deployment workflow to fly.io
├── app/ Main app folder...contains components, routes, etc
│ ├── models Primsa DB queries
│ ├── root.tsx Root of the Remix UI
│ └── routes File based http routing
├── cypress/ Cypress E2E tests
├── prisma/ DB ORM: db migrations and seed
└── public/ Public static assets
Getting Started
- Create
.env
file from.env.example
cp .env.example .env
- Migrate & Seed the SQLite DB
npx prisma migrate deploy
npx prisma db seed
Running
npm run dev
Testing
Run unit tests
npm run test
Run E2E tests
npm run test:e2e:run
Run all checks
npm run validate
Description
Languages
TypeScript
96.2%
Dockerfile
2.1%
JavaScript
1.1%
Shell
0.5%