A little mandap on the internet: Marathi festival nostalgia, dhol-tasha energy, and one beautifully simple radio screen.
Open the live experience · View the source · Follow Mangesh Raut
Ganeshotsav Radio — a little mandap on the internet.
Ganesh Chaturthi is remembered through small, familiar details: the first drumbeat from the next lane, aarti beginning at home, marigold strings over a neighbourhood entrance, and the song everyone knows before the chorus arrives.
Ganeshotsav Radio turns that feeling into a single-screen web experience. It brings together a warm Ganesh festival illustration, a Devanagari title, a compact liquid-glass player, and a hand-curated queue of Marathi aartis, bhajans, and procession songs. The goal is deliberately modest: open one page, press play, and feel instantly at home.
This 2026 edition is a static, browser-first project built for the web rather than a full music platform. YouTube supplies the playback, while the page supplies the atmosphere, controls, and memory. The “AI” in GaneshAI is a playful identity for a modern, always-on experience; this repository does not pretend to be an AI-generated music service.
The name keeps the heart of the festival in the first word and gives the project a contemporary edge in the second. It is memorable, searchable, and honest about the product: a thoughtful digital experience around Ganeshotsav, with the music source left visible and the interface doing the storytelling.
- Full-viewport Ganeshotsav artwork with dark readability overlays and restrained festive motion.
- A focused Marathi hero title:
गणेश महोत्सव. - A liquid-glass music card with cover art, progress scrubbing, play/pause, previous/next, shuffle, mute, and playlist controls.
- A hidden-by-default “mandap queue” with 30 Ganesh festival tracks.
Ya Re Yaas the intentional opening track; shuffle is always a user action.- Responsive layouts tested at desktop and narrow mobile widths, including 320 px.
- Spotify and YouTube Music entry points for continuing the listening session on the original platforms.
- GitHub-linked creator credit for Mangesh Raut.
The in-page queue uses YouTube video IDs and metadata. The first song is Ya Re Ya, followed by a blend of dhol-tasha cuts, Marathi classics, aartis, and devotional staples.
No audio files are hosted in this repository. Playback remains on YouTube through the official YouTube IFrame Player API, and the source buttons link back to the listening platforms.
The project started as a Ganesh festival adaptation of the minimal, nostalgia-led radio sites that inspired the visual direction. The first pass established the full-screen composition, local Ganesh artwork, Marathi festival copy, fixed edge metadata, and a compact floating player.
The generic visual language was replaced with a Ganeshotsav palette, mandap lighting, devotional copy, Ganesh logo/favicon assets, and a Marathi-first track queue. The layout was tuned around the supplied desktop and mobile references instead of a long scrolling music dashboard.
The release locked Ya Re Ya as the opener, expanded the queue to 25 curated festival songs, corrected the Spotify and YouTube Music brand treatments, added the Mangesh Raut GitHub credit, and first published the site (later moved to GitHub Pages). The repository was then rebranded as ganeshai with focused GitHub topics, a release README, and visual home previews.
The player control rail was rebuilt around a three-column primary-action grid so the play button shares a true centerline on desktop and mobile. The queue now continues with five additional non-duplicate singles—Maza Bappa Aala, Bappa, Gajanana, Ganapati Tu Sarvashreshth, and Ganpati Tu Gunapati Tu—for a 30-track run. Every source was then checked through the real YouTube player; non-embeddable videos were replaced with playable festival singles. Buffering now has an explicit loading state, while repeated YouTube errors are guarded so a single failed embed cannot skip twice.
index.htmldefines the semantic page shell, player controls, source links, queue disclosure, and metadata.styles.cssprovides the full-viewport composition, liquid-glass surfaces, responsive layout, focus states, and reduced-motion behavior.songs.jscontains the curated track metadata and YouTube video IDs.app.jsloads the official YouTube IFrame API, maps its state into the custom player, and manages progress, queue selection, shuffle, keyboard controls, and playback errors.- The site is served as static files from GitHub Pages. There is no application server, database, build pipeline, or local audio storage.
Use any local HTTP server. Python is enough:
python3 -m http.server 8080Then open http://127.0.0.1:8080.
Opening index.html directly with a file:// URL is not recommended because browser security rules can prevent the YouTube iframe API from initializing correctly.
| Path | Purpose |
|---|---|
index.html |
Semantic page shell, metadata, source links, player, and queue markup |
styles.css |
Festival visual system, responsive rules, glass player, and accessibility states |
app.js |
YouTube API integration and player interaction logic |
songs.js |
30-track Ganeshotsav queue and YouTube metadata |
package.json |
Project metadata (no build step or runtime dependencies) |
ganesh-background.webp |
Optimized full-bleed Ganesh festival background used by the live page |
ganesh-background-mobile.webp |
Portrait crop optimized for narrow screens without changing the composition |
ganesh-logo.webp |
Lightweight initial player artwork before the first YouTube thumbnail loads |
favicon.png, icon-192.png, icon-512.png |
Properly sized browser, touch, and install icons |
ganesh background.png, ganesh logo.png |
Original high-resolution source artwork retained for future exports |
docs/superpowers/ |
Design brief and implementation history for the 2026 build |
CHANGELOG.md |
Release-level project history |
docs/home-preview.png |
Desktop README preview captured from the verified home screen |
docs/home-preview-mobile.png |
Mobile README preview captured at 390 px |
Add or edit a track in songs.js:
{
id: "VIDEO_ID",
youtubeId: "VIDEO_ID",
title: "Song title",
artist: "Artist",
album: "Optional album or film",
}Cover art is loaded from the corresponding YouTube thumbnail:
https://i.ytimg.com/vi/{VIDEO_ID}/hqdefault.jpg
Keep the first entry as the desired opening track. Shuffle is handled in the UI and does not change the curated order in songs.js.
The project has no build step. GitHub Pages publishes the repository root from main (workflow: .github/workflows/pages.yml).
The live site is https://mangeshraut712.github.io/ganeshai/.
The 2026 release was checked with:
node --check app.js
node --check songs.jsThe page was also opened through a local HTTP server and checked in a real browser at 1440×900, 390×844, and 320×844. The page had no horizontal overflow, the play button shared the control rail centerline, the opener was Ya Re Ya, and all 30 queue transitions matched their expected YouTube IDs before wrapping back to the opener.
The production smoke check confirms the GitHub Pages URL returns HTTP 200.
The visual direction is inspired by the minimal reskinned-radio format of saloon.wtf, Nostalgia Hits, and Vadodara Garba. This project uses its own Ganesh-specific artwork, copy, layout decisions, and playlist metadata.
- Product and implementation: Mangesh Raut
- Playback platform: YouTube
- External listening: Spotify and YouTube Music
- Festival message: गणपती बाप्पा मोरया!
Music, platform marks, and linked artwork remain subject to their respective owners and platform terms. This repository does not redistribute the songs.
No open-source license has been declared for this project yet. The repository is public for transparency and demonstration; please do not redistribute the artwork or linked music without the appropriate rights.

