[ music for every phone. every network. every person. ]
Works on any devices.
🌍 Built For
MP3X is designed for people often ignored by modern web design.
| Device / Condition | Status |
|---|---|
| 📱 Keypad phones (JioBharat, etc.) | ✅ Fully supported |
| 🌐 Opera Mini browser | ✅ Fully supported |
| 🛰️ Slow / 2G connections | ✅ Optimized |
| 💾 Low storage devices | ✅ Small file focused |
| 🎵 Offline music listeners | ✅ Direct download |
| ⚡ Lightweight web enthusiasts | ✅ No bloat |
✨ Philosophy
Modern music platforms became:
- Heavy JavaScript bundles
- Autoplay ads
- Account walls
- 10MB+ pages
- Unusable on slow networksMP3X follows a different path:
Open Website
↓
Select Music
↓
Download
↓
Done.
No accounts. No tracking. No complexity.
⚙️ How It Works
┌──────────────────────────────────────┐
│ │
│ You upload: Billie-Jean.mp3 │
│ ↓ │
│ GitHub Action triggers automatically │
│ ↓ │
│ generator.py scans repository root │
│ ↓ │
│ Filename parsed → "Billie Jean" │
│ ↓ │
│ index.html rebuilt with new music lis │
│ ↓ │
│ GitHub Pages publishes updated site │
│ ↓ │
│ Visitor taps link → MP3 downloads ✓ │
│ │
└──────────────────────────────────────┘
Zero manual editing. Zero playlist files. Zero database.
The website updates itself.
🧠 Smart Filename Parsing
Just name your file correctly — MP3X does the rest.
"Billie-Jean.mp3" → "Billie Jean"
"Village-Ghost-Story.mp3" → "Village Ghost Story"
"I-Thought-I-Saw-Your-Face.mp3" → "I Thought I Saw Your Face"Coming soon — tag prefix support:
"[NEW]-Ghost-Story.mp3" → 🆕 Ghost Story
"[SPECIAL]-Village-River.mp3" → ⭐ Village RiverRules applied automatically:
- Strip
.mp3extension - Replace
-with spaces - Title Case the result
- Preserve numbers
- Strip
[TAG]prefixes into metadata
🚀 Features
| Feature | Detail |
|---|---|
| ⚡ Ultra Lightweight | Pure HTML + CSS. No JS required |
| 📥 Direct MP3 Downloads | One tap. File saves instantly |
| 📱 Mobile Optimized | Works on any screen size |
| 🎹 Keypad Phone Ready | Navigable without touchscreen |
| 🌐 Opera Mini Compatible | No fetch(), no JS dependencies |
| ☁️ GitHub Pages Hosted | Free. Fast. Always online |
| 🧠 Zero Frameworks | No React. No Vue. No overhead |
| 🔋 Low Data Mode | 32–48kbps mono audio supported |
| 🤖 Auto Music Discovery | Drop MP3 → site updates itself |
| 🛠️ GitHub Actions CI | Automated static generation |
| 🔒 Safe HTML Escaping | UTF-8 filenames handled correctly |
| 📶 Offline Ready | Downloaded files play without internet |
🛠️ Tech Stack
╔════════════════════════════╗
║ FRONTEND → HTML + CSS ║
║ GENERATOR → Python 3.12 ║
║ AUTOMATION → GitHub Actions ║
║ HOSTING → GitHub Pages ║
║ BACKEND → none ║
║ DATABASE → none ║
║ SERVER → none ║
║ COST → $0.00 ║
╚════════════════════════════╝
📂 Repository Structure
mp3x/
├── index.html ← auto-updated by generator
├── generator.py ← scans MP3s, builds HTML
├── .nojekyll ← disables Jekyll on GitHub Pages
├── .github/
│ └── workflows/
│ └── update.yml ← triggers on every MP3 upload
│
├── Billie-Jean.mp3
├── Ghost-Story.mp3
└── Village-River.mp3
📡 Audio Optimization
For best compatibility with slow networks and low-end devices:
Recommended encoding:
┌──────────────┬─────────┬──────────┐
│ Bitrate │ Channels│ Best for │
├──────────────┼─────────┼──────────┤
│ 32 kbps │ Mono │ 2G / JioBharat │
│ 48 kbps │ Mono │ Slow 3G │
│ 64 kbps │ Mono │ Standard 3G │
└──────────────┴─────────┴──────────┘
🌐 Live Website
🎯 Goal
Build a music platform that remains accessible regardless of device quality, internet speed, or location.
Because music belongs to everyone — not just people with fast phones.
👤 Creator