A 24/7 Christian radio streaming application featuring the Book of Psalms with an immersive fire visualization that dances to the Word of God.
- 24/7 Continuous Playback - Streams 64 Psalms in random order
- Seamless Crossfading - 1-second smooth transitions between tracks
- Smart Audio Processing - Compressor and limiter for consistent volume
- Seek Support - Jump to any position in the current track
- Track History - Navigate backward through previously played tracks
- 128 Frequency Bands - Real-time audio spectrum analysis
- 5 Rotating Circles - Concentric layers with alternating rotation
- Fire Color Gradients - 8 intensity levels from white-hot to ember
- Chi-Rho Symbol - Protected center with golden glow
- 640 Total Fire Bars - Hypnotic patterns responding to scripture audio
- Real-time Tracking - Counts total listening time across all users
- Smart Display - Shows as "X hours : Y minutes" or days for longer periods
- Persistent Storage - Maintained in Cloudflare KV
- Play/Stop - Large centered control with visual feedback
- Skip Forward - Jump to a new random track
- Skip Backward - Return to previous track with full metadata
- Visual Progress Bar - Animated timeline showing track position
- Now Playing Display - Extracts and displays Bible verse from filename
- Mobile Optimized - Works perfectly on all devices
- Glassmorphism UI - Modern frosted glass effects
- Animated Gradients - Subtle background animations
- SEO Optimized - Full meta tags for social sharing
- Runtime: Cloudflare Workers (Edge Computing)
- Storage: Cloudflare KV (Key-Value Store)
- Frontend: Vanilla JavaScript with Web Audio API
- Styling: Tailwind CSS (inline)
- Audio: MP3 format with timestamp indexing
- Visualization: Canvas 2D API with real-time FFT analysis
See DEPLOYMENT.md for detailed setup instructions.
- Clone the repository
git clone [repository-url]
cd radio
npm install- Configure Cloudflare KV
npx wrangler kv namespace create "RADIO_KV"- Set secrets
npx wrangler secret put UPLOAD_SECRET- Deploy
npm run deploynpm run dev
# Visit http://localhost:8787npm run deploy
# Your app will be available at https://[your-worker].workers.devnpm test # Watch mode
npm run test:run # Single runradio/
├── src/
│ ├── index.js # Main application (Worker + Frontend)
│ ├── index.test.js # Test suite
│ └── epicscripture/ # Audio files (64 Psalms)
├── wrangler.toml # Cloudflare Workers configuration
├── CLAUDE.md # AI assistant instructions
├── DEPLOYMENT.md # Deployment guide
├── chirho.png # Chi-Rho logo
└── upload scripts # Audio upload utilities
GET /- Main player interfaceGET /stream/{filename}- Stream specific audio fileGET /stream?t={seconds}- Stream with seek positionGET /playlist- Get all available tracksGET /now-playing- Current track informationGET /api/minutes- Get total listening timePOST /api/minutes?minutes=1- Increment listening counterPOST /upload- Upload new audio (requires auth)
The fire visualizer creates a mesmerizing display with:
- Frequency Response: Each bar represents a specific frequency
- Dynamic Scaling: Bars grow/shrink based on audio amplitude
- Color Intensity: 8 fire gradients from blazing white to dim embers
- Rotation Effects: 5 circles rotating at different speeds
- Alternating Direction: Creates hypnotic spiral patterns
- Upload endpoint protected with Bearer token authentication
- Secrets managed through Cloudflare Workers
- No sensitive data in repository
.envfile excluded from version control
- Edge Computing: Runs on Cloudflare's global network
- Low Latency: Audio streamed directly from KV storage
- Client-side Processing: Visualization runs in browser
- Efficient Caching: Static assets cached for 1 year
- Minimal Server Load: All heavy processing on client
- Audio Content: Epic Scripture audio narrations of Psalms
- Visualization: Inspired by the fire of the Holy Spirit
- Symbol: Chi-Rho (☧) - Ancient Christian symbol
This project is for the glory of God and the edification of His people.
Contributions are welcome! Please ensure:
- Code follows existing patterns
- Tests pass (
npm test) - No sensitive data in commits
- Comments are minimal and meaningful
For issues or questions, please open an issue on GitHub.
"Your word is a lamp to my feet and a light to my path." - Psalm 119:105
