📝 About & Dev Log

OverNormal Player

AI-native music discovery and curation platform

v1.0.0-alpha April 2026 Production WCAG 2.1 AA OverNormal Studios

🎵 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

🎯 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:

🌟 Philosophy

📬 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
[23:30] FEAT
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
[22:00] UI
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
[21:45] UI
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
[21:30] FIX
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
[22:00] UI
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)
[21:30] FEAT
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
[19:30] FEAT
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
[18:00] FIX
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
[16:45] DOCS
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
[16:00] DOCS
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
[20:15] PERF
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
[16:23] FIX
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
[14:05] FIX
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
[09:47] PERF
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
[18:34] FEAT
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
[15:12] UI
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
[11:20] FEAT
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
[16:45] DOCS
"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
[13:28] PERF
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
[14:56] UI
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
[17:10] UI
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

🛠️ Technology Stack

Frontend

🟨
Vanilla JavaScript
ES6+, no framework overhead
🎨
HTML5 Drag & Drop
Native browser APIs
🎯
CSS Variables
Dynamic theming system
📱
Bootstrap 5.3
Grid system & utilities
🔤
Inter & Poppins
Google Fonts typography
Font Awesome 6.4
Icon library

Backend

🐘
PHP 8.2
Procedural, modern syntax
📄
JSON File Storage
Lightweight data persistence
🔒
Atomic flock()
Concurrent write safety
🔥
Firebase Auth
Google authentication
🌐
Apache 2.4
mod_rewrite routing
REST APIs
Custom endpoints

Integrations

🎵
Suno AI CDN
AI-generated music streaming
🎬
YouTube Data API
Video integration
🇹🇭
Thai Rhyme API
Linguistic tools

Design

🎨
OverNormal Brand
Custom color system
📐
Mobile-First
Responsive design
WCAG 2.1 AA
Accessibility compliant
🌙
Dark Theme
Eye-friendly UI

📊 Architecture Highlights

🔐 Security & Performance