Skip to content

Repository files navigation

GaneshAI · गणेशोत्सव Radio

A little mandap on the internet: Marathi festival nostalgia, dhol-tasha energy, and one beautifully simple radio screen.

Open the live GaneshAI experience View GaneshAI on GitHub Buildless static web project

Open the live experience · View the source · Follow Mangesh Raut

Home preview

GaneshAI desktop home screen with Ganesh festival artwork and liquid-glass music player

Ganeshotsav Radio — a little mandap on the internet.

View the mobile composition

GaneshAI mobile home screen with a spacious liquid-glass music player

The story

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.

Why GaneshAI

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.

What is included

  • 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 Ya as 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.

Listen

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.

2026 project history

9 August 2026 — The idea takes shape

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.

9 August 2026 — The experience becomes Ganesh-specific

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.

10 August 2026 — Public 2026 release

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.

10 August 2026 — Alignment and thirty-track listening run

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.

How it works

  1. index.html defines the semantic page shell, player controls, source links, queue disclosure, and metadata.
  2. styles.css provides the full-viewport composition, liquid-glass surfaces, responsive layout, focus states, and reduced-motion behavior.
  3. songs.js contains the curated track metadata and YouTube video IDs.
  4. app.js loads the official YouTube IFrame API, maps its state into the custom player, and manages progress, queue selection, shuffle, keyboard controls, and playback errors.
  5. The site is served as static files from GitHub Pages. There is no application server, database, build pipeline, or local audio storage.

Run locally

Use any local HTTP server. Python is enough:

python3 -m http.server 8080

Then 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.

Project map

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

Curate the queue

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.

Deploy

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/.

Verification

The 2026 release was checked with:

node --check app.js
node --check songs.js

The 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.

Design notes and credits

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.

Music, platform marks, and linked artwork remain subject to their respective owners and platform terms. This repository does not redistribute the songs.

License

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.

Releases

Packages

Contributors

Languages