// Fix image URLs on page load (for existing pages with GitHub URLs) (function() { function normalizeImageUrl(imageUrl) { if (!imageUrl) return null; if (imageUrl.startsWith('data:')) return imageUrl; const baseUrl = window.location.origin; if (imageUrl.includes('raw.githubusercontent.com')) { const urlParts = imageUrl.split('/'); const filename = urlParts[urlParts.length - 1]; if (filename.startsWith('blog-')) { return baseUrl + '/images/blog/' + filename; } const blogIndex = urlParts.findIndex(part => part === 'blog'); if (blogIndex > -1 && blogIndex < urlParts.length - 1) { return baseUrl + '/images/blog/' + urlParts[urlParts.length - 1]; } return imageUrl; } if (imageUrl.startsWith('http://') || imageUrl.startsWith('https://')) return imageUrl; if (imageUrl.startsWith('/')) { if (imageUrl.startsWith('/images/blog/') || imageUrl.startsWith('/valleytainment_final_working_v2/images/blog/')) { return baseUrl + imageUrl; } return baseUrl + imageUrl; } if (!imageUrl.startsWith('/') && !imageUrl.includes('://')) { if (imageUrl.match(/\.(jpg|jpeg|png|gif|webp|svg)$/i)) { return baseUrl + '/images/blog/' + imageUrl; } return baseUrl + '/images/blog/' + imageUrl; } return imageUrl; } function fixImageUrls() { const postImages = document.querySelectorAll('.post-image, .featured-image-section img'); postImages.forEach(img => { const originalSrc = img.src; const normalizedSrc = normalizeImageUrl(originalSrc); if (normalizedSrc && normalizedSrc !== originalSrc) { console.log('๐Ÿ”„ Normalizing image URL:', originalSrc, 'โ†’', normalizedSrc); img.src = normalizedSrc; } img.addEventListener('error', function() { console.log('โŒ Image failed to load:', this.src); if (originalSrc.includes('raw.githubusercontent.com')) { const urlParts = originalSrc.split('/'); const filename = urlParts[urlParts.length - 1]; const fallbackUrl = window.location.origin + '/images/blog/' + filename; if (this.src !== fallbackUrl) { console.log('๐Ÿ”„ Trying fallback URL:', fallbackUrl); this.src = fallbackUrl; return; } } this.style.display = 'none'; const placeholder = document.createElement('div'); placeholder.className = 'post-image-placeholder'; placeholder.style.cssText = 'width: 100%; height: 400px; background: linear-gradient(135deg, rgba(0, 255, 221, 0.2), rgba(147, 112, 219, 0.2)); display: flex; align-items: center; justify-content: center; color: rgba(0, 255, 221, 0.6); font-size: 4rem;'; placeholder.textContent = '๐Ÿ“'; this.parentNode.insertBefore(placeholder, this.nextSibling); }); }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', fixImageUrls); } else { fixImageUrls(); } })();

Welcome To The Valley

By Vibe Lord 2 min read
There was never really a plan. No big rollout, no business pitch, no overnight idea. It just kind of became. Valleytainment grew out of that raw, familiar space where passion meets necessity โ€” a bunch of people who love music, art, and culture deciding to build something for ourselves because nobody else was going to do it the way we needed it done. No shortcuts, no industry templates. Just vibes, vision, and a decade of shared drive. Music has always been the heartbeat of it all. For me personally, itโ€™s damn near everything outside of family. Itโ€™s peace when lifeโ€™s loud, therapy when things get heavy, connection when words fall short. Itโ€™s spiritual. Every song thatโ€™s ever pulled me through a moment โ€” good or bad โ€” became a reminder of how powerful this thing really is. That same energy is what fuels the Valleytainment. Itโ€™s community. Itโ€™s relatability. Itโ€™s passion. Itโ€™s the belief that music isnโ€™t just background noise โ€” itโ€™s a language that speaks to the realest parts of who we are. This blog is an extension of that. A space where we can talk about what moves us โ€” the albums that surprise us, the local artists you need to know, the shows that shake the room, the conversations that remind us why we fell in love with hip hop in the first place. It wonโ€™t be a press release feed or a highlight reel. Itโ€™ll be human. Balanced. Real. Weโ€™ve been doing this together for over a decade โ€” learning, evolving, messing up, and getting better every time. And now weโ€™re here, ready to open the door a little wider and invite you in. So if you love music the way we do โ€” not for the trends, but for the truth โ€” welcome home. Welcome to the Valley. -Vibelord About Valleytainment Valleytainment is a collective of artists, creatives, and community builders based in Pittsburgh, PA. Founded on DIY values and a shared love for authentic expression, Valleytainment aims to uplift independent voices and push culture forward through music, media, and movement.
// Fix image URLs on page load (for existing pages with GitHub URLs) (function() { function normalizeImageUrl(imageUrl) { if (!imageUrl) return null; if (imageUrl.startsWith('data:')) return imageUrl; const baseUrl = window.location.origin; if (imageUrl.includes('raw.githubusercontent.com')) { const urlParts = imageUrl.split('/'); const filename = urlParts[urlParts.length - 1]; if (filename.startsWith('blog-')) { return baseUrl + '/images/blog/' + filename; } const blogIndex = urlParts.findIndex(part => part === 'blog'); if (blogIndex > -1 && blogIndex < urlParts.length - 1) { return baseUrl + '/images/blog/' + urlParts[urlParts.length - 1]; } return imageUrl; } if (imageUrl.startsWith('http://') || imageUrl.startsWith('https://')) return imageUrl; if (imageUrl.startsWith('/')) { if (imageUrl.startsWith('/images/blog/') || imageUrl.startsWith('/valleytainment_final_working_v2/images/blog/')) { return baseUrl + imageUrl; } return baseUrl + imageUrl; } if (!imageUrl.startsWith('/') && !imageUrl.includes('://')) { if (imageUrl.match(/\.(jpg|jpeg|png|gif|webp|svg)$/i)) { return baseUrl + '/images/blog/' + imageUrl; } return baseUrl + '/images/blog/' + imageUrl; } return imageUrl; } function fixImageUrls() { const postImages = document.querySelectorAll('.post-image, .featured-image-section img'); postImages.forEach(img => { const originalSrc = img.src; const normalizedSrc = normalizeImageUrl(originalSrc); if (normalizedSrc && normalizedSrc !== originalSrc) { console.log('๐Ÿ”„ Normalizing image URL:', originalSrc, 'โ†’', normalizedSrc); img.src = normalizedSrc; } img.addEventListener('error', function() { console.log('โŒ Image failed to load:', this.src); if (originalSrc.includes('raw.githubusercontent.com')) { const urlParts = originalSrc.split('/'); const filename = urlParts[urlParts.length - 1]; const fallbackUrl = window.location.origin + '/images/blog/' + filename; if (this.src !== fallbackUrl) { console.log('๐Ÿ”„ Trying fallback URL:', fallbackUrl); this.src = fallbackUrl; return; } } this.style.display = 'none'; const placeholder = document.createElement('div'); placeholder.className = 'post-image-placeholder'; placeholder.style.cssText = 'width: 100%; height: 400px; background: linear-gradient(135deg, rgba(0, 255, 221, 0.2), rgba(147, 112, 219, 0.2)); display: flex; align-items: center; justify-content: center; color: rgba(0, 255, 221, 0.6); font-size: 4rem;'; placeholder.textContent = '๐Ÿ“'; this.parentNode.insertBefore(placeholder, this.nextSibling); }); }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', fixImageUrls); } else { fixImageUrls(); } })();