LittLive.com
A multi-site WordPress network for a regional healthcare provider — migrated from a struggling shared host, hardened for HIPAA-adjacent workflows, and now humming on our managed infrastructure.
A custom digital radio network covering hip-hop, R&B, pop, dance, and Latin music. Premium streaming UX up front, full editorial control in back, AI-powered news automation in the middle — all built on WordPress without touching a single theme file.
RoleSole full-stack developer + designer
StatusLive on staging, production pending
TimelineMulti-phase build
WordPress 6.9PHP 8.2MySQLHotwire Turbo DriveVanilla JSAnthropic ClaudeOpenAI GPTApple iTunes APIMusicBrainzWikipedia
The brief
Build a custom multi-station radio platform on WordPress — premium streaming UX up front, full editorial control in back, with content automation so the team isn’t writing news by hand. No off-the-shelf theme. No drag-and-drop builders.
Public website
The product non-technical visitors experience.
Always-live radio
- Sticky persistent audio player that survives every page navigation via Hotwire Turbo Drive
- 39 live station tiles with cross-fading cover art and real-time now-playing
- 1-minute background cron + 25s in-tab refresh keeps every station current
- MediaSession API so lock-screen and Bluetooth controls just work
- 30-second Apple Music previews on every track page — pauses the live stream, plays the clip, auto-resumes when done
Editorial pages
- Homepage with featured stations, top artists, top tracks, fresh plays, news, DJs
- Artist + Track detail pages enriched with Wikipedia bios and MusicBrainz metadata
- Station detail pages with “now playing”, “recently played”, similar stations
- DJ profiles with bio, socials, weekly schedule, and pulsing “ON AIR NOW” badge
- Podcast pages with teaser previews and premium paywall
Discovery + navigation
- Spotify-style
⌘Ksearch modal — debounced REST, keyboard nav, persists across pages - Custom dark/neon sticky header with mobile drawer
- Mobile bottom-tab nav (Home / Stations / Search / You) coordinated with the sticky player
- Site-wide “fresh on LITT” live activity row
User accounts
A real product, not just a public site.
- Custom signup / login at clean URLs — the default
/wp-login.phpis hidden - Favorites system — heart any station, artist, track, podcast, or article
- User dashboard with favorites, recently played, and news from favorited artists
- Premium tier infrastructure with paywall card and teaser previews (Stripe hooks ready)
- Personal listening history table for stats and recommendation features
News feed (fully automated)
The platform writes its own editorial content.
- AI-powered article rewriter — switch between Claude and OpenAI in admin
- RSS + HTML scrapers with per-source schedules (hourly / 6h / daily / manual)
- Three-prong duplicate detection: URL hash + normalized title + content fingerprint
- Admin-tunable system + voice prompts so rewrites match LITT’s editorial voice
- Test-rewrite sandbox to dial in tone before going live
- “Strip outbound links” option to keep readers on-site
- Model dropdown auto-populated from each provider’s
/v1/modelsendpoint - Cross-surface on homepage, artist pages, user dashboard, and search
Custom back-office
The piece I’m most proud of — a fully branded admin that doesn’t feel like WordPress.
LITT-branded admin theme
- Dark gradient sidebar with the LITT logo, centered
- Inter font, gradient primary buttons, glassmorphic panels
- “Howdy” stripped via WordPress’s
gettextfilter — the proper way, not a regex hack - Top admin bar reduced to brand mark + “View site” + slim “+ New” + clean avatar
- WordPress update nag suppressed for non-admins
Card-grid dashboards
- Replaced the standard WP welcome screen with a content-first card grid
- Quick stats, quick-add tiles, “news awaiting review”, featured stations, recent plays
- First-login onboarding tour with role-specific steps and a “Take the tour” replay button
Custom Manage pages
- Manage Stations / Artists / Tracks / DJs / Shows / Podcasts — each with grid view, status pills, quick toggles
- Search, filter pills, pagination, inline edit forms with WP media uploader
- The WP block editor is disabled on every LITT post type — replaced with focused custom forms
Two new user roles
- Station Manager — full LITT admin, locked out of plugins / themes / users / tools / core settings
- DJ — own profile + own shows only; physically can’t view or edit another DJ’s content
- New custom capabilities (
litt_manage,litt_dj_self) so the role system grows without colliding withmanage_options - One-click role simulation via User Switching for testing
Editorial controls
Non-technical staff manage everything without touching code.
- Featured / banned toggles on stations, artists, tracks with row actions + bulk actions
- Explicit-content flag with red “E” badges everywhere a flagged station appears
- Premium content gating with admin toggle, teaser previews, and Stripe-ready paywall
- Cascade ban — banning an artist auto-hides their tracks across the entire site
- Per-station logo overrides, custom descriptions, manual featured ordering
- Site-wide settings page (social URLs, app badge links, contact email, analytics toggle)
Mobile + PWA
The site installs like a real app on phones.
- Progressive Web App manifest + service worker
- “Add to Home Screen” install banner with smart timing
- Full splash screen, standalone display mode, brand icons
- Mobile sticky player + bottom-tab nav coordinated via
safe-area-inset-bottom - Custom 404 “Off Air” page with gradient hero
Infrastructure + polish
The unglamorous work that makes the platform reliable.
- 5 custom DB tables with proper
dbDeltamigrations - Transient caching on every hot path (homepage, stations, featured queries, news models)
- Polite User-Agent and 25–90s timeouts on every outbound API call
- iTunes Search API fallback fills missing cover art at ~95% hit rate
- MusicBrainz + Wikipedia external metadata pipeline (cached 24h)
- Hidden login URL via WPS Hide Login →
/staff-login/ - All custom code lives in versioned JSON snippet files in git — zero theme edits
- WP-CLI deploy scripts with
php -lsyntax checks before any code goes live
Decisions worth calling out
Specific engineering choices that paid off — useful context for anyone considering similar work.
Hotwire Turbo Drive for SPA-style navigation without React — the sticky audio player survives every page change because of data-turbo-permanent.
Code Snippets Pro as the deployment surface — every feature ships as a versioned JSON file in git, deployed via WP-CLI over SSH, no theme touched.
Capability architecture — new litt_manage + litt_dj_self caps so admins inherit via a user_has_cap filter and existing handlers work with zero migration risk.
Dual-AI failover — admin picks Claude or GPT mid-stream; both providers’ model lists drive the dropdown.
3-prong news dedupe — URL + normalized title + first-800-char content fingerprint catches re-syndicated articles even when URL and title differ.
TinyMCE iframe theming via tiny_mce_before_init content_style — the trick most developers miss when dark-theming the WordPress classic editor.
By the numbers
39Live stations
3.7K+Artists captured
16K+Tracks logged
60PHP snippets shipped
5Custom DB tables
4External APIs
2LLM providers
0Theme files modified
What’s next
- Stripe checkout wired to the existing paywall infrastructure
- DJ Mixcloud / SoundCloud embed support on show pages
- Email digest for users with favorited artists
- Genre deep-dive landing pages
- Cross-midnight show support in the weekly schedule
Reflection
This project taught me how much you can ship on WordPress when you stop treating it like a CMS and start treating it like a PHP framework with a free admin UI. The hard parts — live streaming UX, real-time now-playing, AI content pipeline, custom roles, branded back-office — are just patterns from any modern web app, expressed through WordPress’s hooks and capability system.
The unlock was Code Snippets Pro as the deployment surface: every feature stayed in version control, code-reviewable, and deploy-scripted, without ever editing a theme file.