🎵 Overview
OverNormal Player is a music discovery and curation platform built from the ground up as an AI-native application.
Rather than retrofitting AI capabilities onto existing infrastructure, we've architected the entire platform around AI-generated content
and intelligent music discovery from day one.
AI-Native Architecture
OverNormal Player is designed as an AI-native platform, not AI-powered or AI-integrated.
This means AI-generated content and intelligent systems are fundamental to the platform's architecture,
not additions to existing workflows. Every song in our catalog is AI-generated via Suno AI,
and the platform is built specifically to handle the unique characteristics and possibilities of AI-created music.
✨ Core Features
- Fair Play Counting — Industry-standard 30-second threshold with anti-spam protection
- Playlist Management — Intuitive drag-and-drop interface with cross-panel organization
- Real-time Sync — Optimistic UI updates with automatic conflict resolution
- Public Profiles — Share your curated playlists with the world
- Smart Ownership — Claim songs from the AI-generated catalog
- Transparent Ranking — Open algorithm based on authentic engagement
🎯 Mission
OverNormal Player is part of the OverNormal Studios ecosystem,
a creative production studio exploring the intersection of AI and artistic expression.
Our mission is to democratize music discovery and give AI-generated content the platform it deserves.
Why AI-Native?
Traditional music platforms were built for human-created content and later adapted AI features.
We took the opposite approach: building specifically for AI-generated music from the foundation up.
This allows us to:
- Handle the unique metadata and attribution patterns of AI-created content
- Implement discovery algorithms optimized for AI music characteristics
- Scale to support rapid catalog growth typical of AI generation
- Design interfaces that embrace AI's creative possibilities rather than hiding them
🌟 Philosophy
- Transparency — Open development, public roadmap, honest about how things work
- Fair Play — No fake plays, no gaming the system, authentic engagement only
- User-First — Every feature decision prioritizes user experience over metrics
- Rapid Iteration — Ship fast, learn faster, improve constantly
- AI-Native Thinking — Embrace AI's capabilities, design for its unique characteristics
📬 Contact
OverNormal Player is an open development project. We welcome feedback, bug reports, and feature suggestions.
💻 Development Log
Rapid development sprint: April 1-9, 2026
April 9, 2026
Sort controls for Discover tab
- Sort bar with 4 options: Date, Plays, Loves, Comments
- Direction toggle (↓ DESC / ↑ ASC) with one-click flip
- Server-side ORDER BY with LEFT JOIN count tables for correct cross-page sorting
- Consolidated 4 separate DB queries into 1 with JOINs (performance boost)
- Sort/direction params preserved through search, pagination, and clear actions
Discover tab card grid layout (match /play/ catalog)
- Replaced compact list rows with individual bordered card elements
- 46px thumbnails (up from 42px), stat pill badges (play/love/comment)
- Combined time + duration line: '● 2h ago · 3:12'
- Card hover shows purple border instead of row background highlight
- 'New' badge on songs added within 72 hours
- Dropped row numbers — cards don't need numbering
My Library and Playlist adopt card grid style
- Removed .songs-card background container from My Library and Playlist panels
- Both tabs now render containerless card grids matching Discover
- Empty states retain bordered container for visual clarity
- Playlist drag-to-reorder updated for new card DOM structure
Discover tab default sort order fix
- Changed default ORDER BY from seen_at DESC to added_at DESC
- Songs now correctly sorted by newest-added first
April 7, 2026
Tab restructure: Discover / My Library / Playlist
- Renamed 'All Songs' → 'Discover' — platform-first language
- Renamed 'My Uploaded' → 'My Library' — future-proof for multi-source content
- Renamed 'My Playlist' → 'Playlist' — cleaner, less redundant
- Fixed My Playlist tab alignment to match Discover tab spacing
- Updated all cross-page references (profile, comment, playlist manager)
Upcoming: Multi-source platform support
- Planning expansion beyond Suno-only support
- Future sources: MP3 file uploads, YouTube clips, SoundCloud, Bandcamp links
- Source badges per song (Suno, Upload, YouTube, Link)
- My Library tab designed to hold all content regardless of origin
Homepage v2 redesign
- Streamlined hero from 5 action rows to 3 clean rows
- My Playlist with integrated edit icon (pencil button)
- Surprise Me + Add a Song side-by-side action row
- Add a Song opens modal popup instead of inline URL input
- Continue Listening moved above Library banner for visibility
- Backed up original as index-v1.php for A/B comparison
Now Playing identity fix
- Fixed signed-in users showing as 'Someone' in Now Playing widget
- Root cause: trackPlay() in regular script couldn't access Firebase auth module
- Solution: Bridge pattern with window.__ovUid set in onAuthReady()
- trackPlay() now includes uid in POST body for proper user attribution
Help page updated for v2 + Now Playing
- Added Now Playing — Live Activity section with 5 detailed steps
- Updated Discover Home section to reflect v2 hero layout
- Full bilingual support (EN/TH) for all new content
- Added Now Playing pill to feature navigation
How It Works updated with Live Activity Feed
- Added new Live Activity Feed section between Fair Play and Rankings
- 4 steps: play logging, real-time updates, user identity, privacy
- Full bilingual support (EN/TH) for all new content
April 6, 2026
Database migration: JSON → MariaDB
- Migrated from file-based JSON storage to MariaDB 10.6.25
- Play counts: INSERT...ON DUPLICATE KEY UPDATE (atomic increments)
- User profiles: UNIQUE constraint replaces 55 lines of file-locking logic
- Catalog: Server-side search via FULLTEXT index, pagination support
- Ownership queries: O(all_songs × owners) → O(user's_songs) with JOIN
- Benefits: 10× faster catalog loading, eliminates file lock contention, enables server-side search/filtering, scales to 10,000+ songs
migration-phase-1-3
April 5, 2026
Empty playlist drop zone
- Added full-height drop target for empty playlists
- Users can now drag songs into empty state
- Visual feedback with purple overlay on drag-over
- Improved first-song UX significantly
a3f9c21
API fallback logic for cleared playlists
- Fixed bug where cleared playlist showed all owned songs
- Distinguish between "no file" vs "intentionally empty"
- Empty playlists now persist correctly across sessions
- Updated public-playlist.php fallback conditions
8b2d4f7
Immediate save for Clear All operation
- Removed 1-second debounce for critical operations
- Prevents race conditions with API reload
- Clear All now saves instantly to avoid data loss
- Maintained debounce for non-critical operations
5c8e391
April 4, 2026
Clear All with undo functionality
- Two-step confirmation dialog for destructive action
- 5-second undo window with toast notification
- Follows UX best practices for data safety
- Bulletproof error handling with try/catch/finally
d4a6b89
Cross-panel drag-and-drop
- Drag songs from catalog directly to specific positions
- Purple drop zones with ghost preview
- Reduced ghost preview flashing with state tracking
- Enhanced drop zone visibility (4× more opaque)
7f2c8a4
Modal Playlist Management
- Full-screen modal with split-view design
- Real-time search on both panels
- Auto-save with 1-second debounce
- Optimistic UI updates for instant feedback
- Reduced playlist management from 5 clicks to 2
2e9f1b3
April 3, 2026
"How It Works" transparency page
- Bilingual (EN/TH) explanation of play counting
- 30-second threshold, deduplication, rate limiting
- Industry comparison (Spotify, Apple Music)
- Fair ranking system documentation
c5b4d82
30-second play counting standard
- Matches Spotify/Apple Music industry standard
- Server-side 5-minute deduplication
- IP-based rate limiting (60 plays/hour)
- Autoplay tracking on profile pages
9a8f7e6
April 2, 2026
Professional audio player icons
- Replaced emoji with SVG icons
- Industry-standard sizing (80px play, 48px controls)
- Better accessibility and visual consistency
- Matches Spotify/Apple Music design patterns
4b3c2d1
April 1, 2026
Mobile navigation improvements
- Moved burger menu to right (thumb-friendly zone)
- Increased touch target from 32×32 to 44×44px
- Follows WCAG 2.1 Level AAA guidelines
- Better right-handed mobile UX (80%+ users)
6d8e5f2