[{"data":1,"prerenderedAt":3174},["ShallowReactive",2],{"navigation":3,"/blog/case-studies/why-merch-is-the-new-royalty-check-post":734,"/blog/case-studies/why-merch-is-the-new-royalty-check-surround":1311,"/blog/case-studies/why-merch-is-the-new-royalty-check-related":1316},[4,70,207,312,721],{"title":5,"path":6,"stem":7,"children":8,"page":69},"Case Study","/blog/case-study","blog/case-study",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65],{"title":10,"path":11,"stem":12},"Ambistream – Multi-Layer Streaming Platform","/blog/case-study/ambistream-building-a-multi-layer-streaming-platform-from-a-spark-of-an-idea","blog/case-study/ambistream-building-a-multi-layer-streaming-platform-from-a-spark-of-an-idea",{"title":14,"path":15,"stem":16},"Custom Chromecast & AirPlay Casting App","/blog/case-study/chromecast-airplay-casting-app-case-study","blog/case-study/chromecast-airplay-casting-app-case-study",{"title":18,"path":19,"stem":20},"Direct Music Licensing Platform Case Study","/blog/case-study/dlm-music-catalog-case-study","blog/case-study/dlm-music-catalog-case-study",{"title":22,"path":23,"stem":24},"Assembly Instructions App - Galeco Mobile App","/blog/case-study/galeco-mobile-app-case-study","blog/case-study/galeco-mobile-app-case-study",{"title":26,"path":27,"stem":28},"MemoSonic: Building an Audio Memory Game","/blog/case-study/how-we-built-memosonic-accessible-audio-memory-game-flutter","blog/case-study/how-we-built-memosonic-accessible-audio-memory-game-flutter",{"title":30,"path":31,"stem":32},"Loyalty Program App for Shopping Mall","/blog/case-study/loyalty-program-application-case-study","blog/case-study/loyalty-program-application-case-study",{"title":34,"path":35,"stem":36},"Mobile Application for Music Catalogs","/blog/case-study/mobile-app-for-music-catalog","blog/case-study/mobile-app-for-music-catalog",{"title":38,"path":39,"stem":40},"Universal Music Data Parser for 20+ Platforms","/blog/case-study/musicdata-lab-universal-music-data-parser-case-study","blog/case-study/musicdata-lab-universal-music-data-parser-case-study",{"title":42,"path":43,"stem":44},"Panther ML/AI Pricing Recommendation Tool","/blog/case-study/panther-pricing-recommendation-tool-case-study","blog/case-study/panther-pricing-recommendation-tool-case-study",{"title":46,"path":47,"stem":48},"4D Grupa Roofing Wholesalers Platform","/blog/case-study/roofing-wholesalers-website-case-study","blog/case-study/roofing-wholesalers-website-case-study",{"title":50,"path":51,"stem":52},"Talent Alpha HR Frontend Platform","/blog/case-study/talent-alpha-hr-platform-case-study","blog/case-study/talent-alpha-hr-platform-case-study",{"title":54,"path":55,"stem":56},"Ticketing & Events Platform Development","/blog/case-study/ticketing-events-platform-case-study","blog/case-study/ticketing-events-platform-case-study",{"title":58,"path":59,"stem":60},"Turn Fans into Superfans — Roadie.co","/blog/case-study/turn-fans-into-superfans-roadie-co","blog/case-study/turn-fans-into-superfans-roadie-co",{"title":62,"path":63,"stem":64},"Walkative 2.0 Global Booking Engine","/blog/case-study/walkative-2-booking-platform-case-study","blog/case-study/walkative-2-booking-platform-case-study",{"title":66,"path":67,"stem":68},"Why Merch Is the New Royalty Check, and How Tech Is Closing the Gap","/blog/case-study/why-merch-is-the-new-royalty-check","blog/case-study/why-merch-is-the-new-royalty-check",false,{"title":71,"path":72,"stem":73,"children":74,"page":69},"Music Data","/blog/music-data","blog/music-data",[75,79,83,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191,195,199,203],{"title":76,"path":77,"stem":78},"13 Distributors, 5 File Formats, Zero Standards -The Reality of Music Royalty Data","/blog/music-data/13-distributors-5-file-formats-zero-standards-the-reality-of-music-royalty-data","blog/music-data/13-distributors-5-file-formats-zero-standards-the-reality-of-music-royalty-data",{"title":80,"path":81,"stem":82},"830 Ways to Say Spotify - Normalizing Music Streaming Data","/blog/music-data/830-ways-to-say-spotify-normalizing-music-streaming-data","blog/music-data/830-ways-to-say-spotify-normalizing-music-streaming-data",{"title":84,"path":85,"stem":86},"Why Music Companies Need AI-Powered Analytics (And How We Built One)","/blog/music-data/ai-powered-analytics-dashboard-django-clickhouse-ollama","blog/music-data/ai-powered-analytics-dashboard-django-clickhouse-ollama",{"title":88,"path":89,"stem":90},"AI Rehearsal: Spaced Repetition for Your Musical Ideas","/blog/music-data/ai-rehearsal-spaced-repetition-for-musical-ideas","blog/music-data/ai-rehearsal-spaced-repetition-for-musical-ideas",{"title":92,"path":93,"stem":94},"Audio Project Organization Is a Mess — Here's Why","/blog/music-data/audio-project-organization-mess","blog/music-data/audio-project-organization-mess",{"title":96,"path":97,"stem":98},"Why Audio Search Is Still Broken and How to Fix It with Embeddings","/blog/music-data/audio-search-broken-fix-with-embeddings","blog/music-data/audio-search-broken-fix-with-embeddings",{"title":100,"path":101,"stem":102},"AI Song Structure Analysis: Intro, Verse, Chorus","/blog/music-data/automatic-song-structure-analysis-how-ai-detects-intro-verse-chorus","blog/music-data/automatic-song-structure-analysis-how-ai-detects-intro-verse-chorus",{"title":104,"path":105,"stem":106},"The Broken Feedback Loop in Music Collaboration","/blog/music-data/broken-feedback-loop-music-collaboration","blog/music-data/broken-feedback-loop-music-collaboration",{"title":108,"path":109,"stem":110},"Building a Claude Skill for DDEX Validation: Automate Music Metadata Checks with AI","/blog/music-data/building-a-claude-skill-for-ddex-validation-music-metadata","blog/music-data/building-a-claude-skill-for-ddex-validation-music-metadata",{"title":112,"path":113,"stem":114},"Building a Custom Music Delivery Platform on the Revelator API","/blog/music-data/building-a-custom-music-delivery-platform-on-the-revelator-api","blog/music-data/building-a-custom-music-delivery-platform-on-the-revelator-api",{"title":116,"path":117,"stem":118},"Building a Suno AI Remix App with Nuxt & Firebase","/blog/music-data/building-a-suno-remix-app-with-nuxt-and-firebase","blog/music-data/building-a-suno-remix-app-with-nuxt-and-firebase",{"title":120,"path":121,"stem":122},"C2PA & DDEX: Authenticity Meets Rights in the Age of AI Music","/blog/music-data/c2pa-and-ddex-authenticity-meets-rights-in-the-age-of-ai-music","blog/music-data/c2pa-and-ddex-authenticity-meets-rights-in-the-age-of-ai-music",{"title":124,"path":125,"stem":126},"C2PA in Music: A Claude MCP for Reading Content Provenance","/blog/music-data/c2pa-in-music-mcp","blog/music-data/c2pa-in-music-mcp",{"title":128,"path":129,"stem":130},"Data Modeling in MongoDB Using Design Patterns","/blog/music-data/data-modeling-in-mongodb-with-the-usage-of-design-patterns","blog/music-data/data-modeling-in-mongodb-with-the-usage-of-design-patterns",{"title":132,"path":133,"stem":134},"Office Hours with MusicTech Lab's DDEX Expert","/blog/music-data/ddex-office-hours-musictech","blog/music-data/ddex-office-hours-musictech",{"title":136,"path":137,"stem":138},"DDEX Open Source Projects Review","/blog/music-data/ddex-open-source-projects-review","blog/music-data/ddex-open-source-projects-review",{"title":140,"path":141,"stem":142},"Extracting Data from Ableton .als and .asd Files","/blog/music-data/extracting-data-from-ableton-als-asd-files","blog/music-data/extracting-data-from-ableton-als-asd-files",{"title":144,"path":145,"stem":146},"Maciej Dulski on Sound Connections Podcast","/blog/music-data/from-startups-to-musictech-maciej-dulski-on-sound-connections-podcast","blog/music-data/from-startups-to-musictech-maciej-dulski-on-sound-connections-podcast",{"title":148,"path":149,"stem":150},"How to Transcribe Video to Text Using OpenAI Whisper","/blog/music-data/how-to-transcribe-video-to-text-using-whisper","blog/music-data/how-to-transcribe-video-to-text-using-whisper",{"title":152,"path":153,"stem":154},"Epidemic Sound MCP with Claude for Devs","/blog/music-data/how-to-use-epidemic-sound-mcp-with-claude","blog/music-data/how-to-use-epidemic-sound-mcp-with-claude",{"title":156,"path":157,"stem":158},"Hybrid Database Model in Django for Speed","/blog/music-data/hybrid-database-model-in-django-as-a-performance-booster","blog/music-data/hybrid-database-model-in-django-as-a-performance-booster",{"title":160,"path":161,"stem":162},"Introduction to generating DDEX file using Python","/blog/music-data/introduction-to-generating-ddex-file-using-python","blog/music-data/introduction-to-generating-ddex-file-using-python",{"title":164,"path":165,"stem":166},"Maintaining Music Tech Tools: The SLA Dilemma for Small Teams","/blog/music-data/maintaining-music-tech-tools-the-sla-dilemma-for-small-teams","blog/music-data/maintaining-music-tech-tools-the-sla-dilemma-for-small-teams",{"title":168,"path":169,"stem":170},"Querying Bandcamp Revenue Reports with Natural Language — Meet mtl-bandcamp-mcp","/blog/music-data/mtl-bandcamp-mcp-open-source-revenue-dashboard","blog/music-data/mtl-bandcamp-mcp-open-source-revenue-dashboard",{"title":172,"path":173,"stem":174},"mtl-metadata-mcp: Open Source Audio Metadata Embedding for Claude Code","/blog/music-data/mtl-metadata-mcp-open-source-audio-metadata-embedding","blog/music-data/mtl-metadata-mcp-open-source-audio-metadata-embedding",{"title":176,"path":177,"stem":178},"MusicTech Resources for Builders","/blog/music-data/musictech-resources-curated-insights-for-the-musictech-builders","blog/music-data/musictech-resources-curated-insights-for-the-musictech-builders",{"title":180,"path":181,"stem":182},"Poland's Creative Tech and MusicTech Rise","/blog/music-data/polands-creative-tech-sector-is-on-the-rise-and-musictech-is-part-of-it","blog/music-data/polands-creative-tech-sector-is-on-the-rise-and-musictech-is-part-of-it",{"title":184,"path":185,"stem":186},"Batch ISRC Enrichment That Turns Messy Catalogs Into Clean Data","/blog/music-data/scout-isrc-metadata-enrichment-spotify-musicbrainz","blog/music-data/scout-isrc-metadata-enrichment-spotify-musicbrainz",{"title":188,"path":189,"stem":190},"Music Self-Publishing: The Emuze.me Story","/blog/music-data/self-publishing-in-the-music-industry-a-tale-of-emuze-me","blog/music-data/self-publishing-in-the-music-industry-a-tale-of-emuze-me",{"title":192,"path":193,"stem":194},"Understanding the API First Approach","/blog/music-data/understanding-the-api-first-approach","blog/music-data/understanding-the-api-first-approach",{"title":196,"path":197,"stem":198},"The Voice Memo Graveyard Problem","/blog/music-data/voice-memo-graveyard-problem","blog/music-data/voice-memo-graveyard-problem",{"title":200,"path":201,"stem":202},"Which Database for Music Data? Redshift vs BigQuery vs ClickHouse and When to Use Each","/blog/music-data/which-database-for-music-data-redshift-vs-bigquery-vs-clickhouse","blog/music-data/which-database-for-music-data-redshift-vs-bigquery-vs-clickhouse",{"title":204,"path":205,"stem":206},"Why we decided to use wavesurfer.js","/blog/music-data/why-we-decided-to-use-wavesurfer","blog/music-data/why-we-decided-to-use-wavesurfer",{"title":208,"path":209,"stem":210,"children":211,"page":69},"Newsletter","/blog/newsletter","blog/newsletter",[212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308],{"title":213,"path":214,"stem":215},"Music Industry Tech Openings (April 2024 Update)","/blog/newsletter/music-industry-tech-openings-april-2024-update","blog/newsletter/music-industry-tech-openings-april-2024-update",{"title":217,"path":218,"stem":219},"Music Industry Tech Openings (April 2025 Update)","/blog/newsletter/music-industry-tech-openings-april-2025-update","blog/newsletter/music-industry-tech-openings-april-2025-update",{"title":221,"path":222,"stem":223},"Music Industry Tech Openings (August 2024 Update)","/blog/newsletter/music-industry-tech-openings-august-2024-update","blog/newsletter/music-industry-tech-openings-august-2024-update",{"title":225,"path":226,"stem":227},"Music Industry Tech Openings (December 2024 Update)","/blog/newsletter/music-industry-tech-openings-december-2024-update","blog/newsletter/music-industry-tech-openings-december-2024-update",{"title":229,"path":230,"stem":231},"Music Industry Tech Openings (February 2025 Update)","/blog/newsletter/music-industry-tech-openings-february-2025-update","blog/newsletter/music-industry-tech-openings-february-2025-update",{"title":233,"path":234,"stem":235},"Music Industry Tech Openings (January 2025 Update)","/blog/newsletter/music-industry-tech-openings-january-2025-update","blog/newsletter/music-industry-tech-openings-january-2025-update",{"title":237,"path":238,"stem":239},"Music Industry Tech Openings (July 2024 Update)","/blog/newsletter/music-industry-tech-openings-july-2024-update","blog/newsletter/music-industry-tech-openings-july-2024-update",{"title":241,"path":242,"stem":243},"Music Industry Tech Openings (June 2024 Update)","/blog/newsletter/music-industry-tech-openings-june-2024-update","blog/newsletter/music-industry-tech-openings-june-2024-update",{"title":245,"path":246,"stem":247},"Music Industry Tech Openings (March 2025 Update)","/blog/newsletter/music-industry-tech-openings-march-2025-update","blog/newsletter/music-industry-tech-openings-march-2025-update",{"title":249,"path":250,"stem":251},"Music Industry Tech Openings (May 2024 Update)","/blog/newsletter/music-industry-tech-openings-may-2024-update","blog/newsletter/music-industry-tech-openings-may-2024-update",{"title":253,"path":254,"stem":255},"Music Industry Tech Openings (May 2025 Update)","/blog/newsletter/music-industry-tech-openings-may-2025","blog/newsletter/music-industry-tech-openings-may-2025",{"title":257,"path":258,"stem":259},"Music Industry Tech Openings (November 2024 Update)","/blog/newsletter/music-industry-tech-openings-november-2024-update","blog/newsletter/music-industry-tech-openings-november-2024-update",{"title":261,"path":262,"stem":263},"Music Industry Tech Openings (October 2024 Update)","/blog/newsletter/music-industry-tech-openings-october-2024-update","blog/newsletter/music-industry-tech-openings-october-2024-update",{"title":265,"path":266,"stem":267},"Music Industry Tech Openings (September 2024 Update)","/blog/newsletter/music-industry-tech-openings-september-2024-update","blog/newsletter/music-industry-tech-openings-september-2024-update",{"title":269,"path":270,"stem":271},"MusicTech Insights #1 by Maciej Dulski","/blog/newsletter/musictech-insights-1-curated-by-maciej-dulski","blog/newsletter/musictech-insights-1-curated-by-maciej-dulski",{"title":273,"path":274,"stem":275},"Provenance, Not Detection, Is the Durable Answer","/blog/newsletter/musictech-insights-10-curated-by-jim-anderson","blog/newsletter/musictech-insights-10-curated-by-jim-anderson",{"title":277,"path":278,"stem":279},"What CMOs can teach us about innovation in uncertain times","/blog/newsletter/musictech-insights-10-curated-by-joanna-kurkowska","blog/newsletter/musictech-insights-10-curated-by-joanna-kurkowska",{"title":281,"path":282,"stem":283},"Feeling the MusicTech Momentum","/blog/newsletter/musictech-insights-2-curated-by-maciej-dulski","blog/newsletter/musictech-insights-2-curated-by-maciej-dulski",{"title":285,"path":286,"stem":287},"AI in Music: Hype, Hope, and a Human Touch","/blog/newsletter/musictech-insights-3-curated-by-drew-thurlow","blog/newsletter/musictech-insights-3-curated-by-drew-thurlow",{"title":289,"path":290,"stem":291},"The Music Metadata Conundrum","/blog/newsletter/musictech-insights-4-curated-by-amanda-schupf","blog/newsletter/musictech-insights-4-curated-by-amanda-schupf",{"title":293,"path":294,"stem":295},"7 Rounds in the First 10 Days of November 2025","/blog/newsletter/musictech-insights-5-curated-by-maciej-dulski","blog/newsletter/musictech-insights-5-curated-by-maciej-dulski",{"title":297,"path":298,"stem":299},"The End of an Era: It's All About to Crash","/blog/newsletter/musictech-insights-6-curated-by-sigurdur-arnason","blog/newsletter/musictech-insights-6-curated-by-sigurdur-arnason",{"title":301,"path":302,"stem":303},"Low-Code Magic Won't Solve MusicTech Reality","/blog/newsletter/musictech-insights-7-curated-by-mariusz-smenzyk","blog/newsletter/musictech-insights-7-curated-by-mariusz-smenzyk",{"title":305,"path":306,"stem":307},"The New Economics of Game Music","/blog/newsletter/musictech-insights-8-curated-by-kenny-vaughan","blog/newsletter/musictech-insights-8-curated-by-kenny-vaughan",{"title":309,"path":310,"stem":311},"Music Business Meets Direct-to-Fan","/blog/newsletter/musictech-insights-9-curated-by-yaw-asamani","blog/newsletter/musictech-insights-9-curated-by-yaw-asamani",{"title":313,"path":314,"stem":315,"children":316,"page":69},"Software Development","/blog/software-development","blog/software-development",[317,321,325,329,333,337,341,345,349,353,357,361,365,369,373,377,381,385,389,393,397,401,405,409,413,417,421,425,429,433,437,441,445,449,453,457,461,465,469,473,477,481,485,489,493,497,501,505,509,513,517,521,525,529,533,537,541,545,549,553,557,561,565,569,573,577,581,585,589,593,597,601,605,609,613,617,621,625,629,633,637,641,645,649,653,657,661,665,669,673,677,681,685,689,693,697,701,705,709,713,717],{"title":318,"path":319,"stem":320},"Benefits of Outsourcing Software Development","/blog/software-development/10-benefits-of-outsourcing-software-development-services","blog/software-development/10-benefits-of-outsourcing-software-development-services",{"title":322,"path":323,"stem":324},"10 Steps to Find the Best MVP Developers","/blog/software-development/10-steps-to-find-the-best-mvp-developers-for-your-startup-idea","blog/software-development/10-steps-to-find-the-best-mvp-developers-for-your-startup-idea",{"title":326,"path":327,"stem":328},"1,200 Looms Later: How Async Video Became My Development Superpower","/blog/software-development/1200-looms-how-async-video-became-our-development-superpower","blog/software-development/1200-looms-how-async-video-became-our-development-superpower",{"title":330,"path":331,"stem":332},"Communication Strategy in Outsourcing Projects","/blog/software-development/5-steps-to-implement-an-effective-communication-strategy-in-outsourcing-software-development-project","blog/software-development/5-steps-to-implement-an-effective-communication-strategy-in-outsourcing-software-development-project",{"title":334,"path":335,"stem":336},"7 Best Practices for Outsourcing Software Development","/blog/software-development/7-best-practices-for-outsourcing-software-development","blog/software-development/7-best-practices-for-outsourcing-software-development",{"title":338,"path":339,"stem":340},"9 Reasons Why Saleor.io Is Best for eCommerce","/blog/software-development/9-reasons-why-the-saleor-io-platform-is-the-best-choice-for-your-ecommerce-website","blog/software-development/9-reasons-why-the-saleor-io-platform-is-the-best-choice-for-your-ecommerce-website",{"title":342,"path":343,"stem":344},"A Look at Bravelab.io’s Clutch 2021 Year In Review","/blog/software-development/a-look-at-bravelab-ios-clutch-2021-year-in-review","blog/software-development/a-look-at-bravelab-ios-clutch-2021-year-in-review",{"title":346,"path":347,"stem":348},"A quick introduction to profit sharing implementation","/blog/software-development/a-quick-introduction-to-profit-sharing-implementation","blog/software-development/a-quick-introduction-to-profit-sharing-implementation",{"title":350,"path":351,"stem":352},"AI Audio Similarity Search: The Future of Sound Library Discovery","/blog/software-development/ai-audio-similarity-search-for-sound-libraries","blog/software-development/ai-audio-similarity-search-for-sound-libraries",{"title":354,"path":355,"stem":356},"Automate Repetitive Tasks for Better Results","/blog/software-development/automate-repetitive-tasks-to-improve-your-business-performance","blog/software-development/automate-repetitive-tasks-to-improve-your-business-performance",{"title":358,"path":359,"stem":360},"Automating Success: The Art of Unified Documentation","/blog/software-development/automating-success-the-art-of-unified-documentation","blog/software-development/automating-success-the-art-of-unified-documentation",{"title":362,"path":363,"stem":364},"Brave 3.0 Website Redesign, Part 2: Solution","/blog/software-development/brave-3-0-how-we-conducted-website-redesign-part-2-solution","blog/software-development/brave-3-0-how-we-conducted-website-redesign-part-2-solution",{"title":366,"path":367,"stem":368},"Brave 3.0, Part 4: Tech Stack and Recap","/blog/software-development/brave-3-0-part-4-technologies-behind-and-final-series-recap","blog/software-development/brave-3-0-part-4-technologies-behind-and-final-series-recap",{"title":370,"path":371,"stem":372},"Brave 3.0 – redesign process part 1. The Challenge","/blog/software-development/brave-3-0-redesign-process-part-1-challenge","blog/software-development/brave-3-0-redesign-process-part-1-challenge",{"title":374,"path":375,"stem":376},"Brave 3.0 – redesign process, part 3. Lesson learned","/blog/software-development/brave-3-0-redesign-process-part-3-lesson-learned","blog/software-development/brave-3-0-redesign-process-part-3-lesson-learned",{"title":378,"path":379,"stem":380},"Bravelab.io: Top Software Developer by Clutch","/blog/software-development/bravelab-io-is-recognized-as-a-top-custom-software-developer-by-clutch","blog/software-development/bravelab-io-is-recognized-as-a-top-custom-software-developer-by-clutch",{"title":382,"path":383,"stem":384},"Bravelab.io: Top Developer in Poland by Clutch","/blog/software-development/bravelab-io-named-top-software-developer-in-poland-by-clutch","blog/software-development/bravelab-io-named-top-software-developer-in-poland-by-clutch",{"title":386,"path":387,"stem":388},"MusicTech Lab Partners with LALAL.AI","/blog/software-development/bravelab-partners-with-the-audio-lalal-ai","blog/software-development/bravelab-partners-with-the-audio-lalal-ai",{"title":390,"path":391,"stem":392},"MusicTech Lab Partners with The Audio Programmer","/blog/software-development/bravelab-partners-with-the-audio-programmer","blog/software-development/bravelab-partners-with-the-audio-programmer",{"title":394,"path":395,"stem":396},"Bravelab's team about productivity","/blog/software-development/bravelabs-team-about-productivity","blog/software-development/bravelabs-team-about-productivity",{"title":398,"path":399,"stem":400},"Braveloper","/blog/software-development/braveloper","blog/software-development/braveloper",{"title":402,"path":403,"stem":404},"Bravely App: Boost Productivity with Django","/blog/software-development/bravely-app-how-to-be-more-productive-with-django-quick","blog/software-development/bravely-app-how-to-be-more-productive-with-django-quick",{"title":406,"path":407,"stem":408},"DIY MIDI Controller for Ableton with Arduino","/blog/software-development/building-a-diy-midi-controller-for-ableton-live-with-arduino","blog/software-development/building-a-diy-midi-controller-for-ableton-live-with-arduino",{"title":410,"path":411,"stem":412},"C2PA in Ableton: Making AI Music Provenance Visible Inside Your DAW","/blog/software-development/c2pa-in-ableton-max-for-live","blog/software-development/c2pa-in-ableton-max-for-live",{"title":414,"path":415,"stem":416},"Change Detection mechanism in Angular","/blog/software-development/change-detection-mechanism-in-angular","blog/software-development/change-detection-mechanism-in-angular",{"title":418,"path":419,"stem":420},"Communication Channels in Remote Work","/blog/software-development/comparison-of-the-communication-channels-in-remote-work","blog/software-development/comparison-of-the-communication-channels-in-remote-work",{"title":422,"path":423,"stem":424},"Connecting Your Max for Live Device to a Cloud API","/blog/software-development/connecting-your-max-for-live-device-to-a-cloud-api","blog/software-development/connecting-your-max-for-live-device-to-a-cloud-api",{"title":426,"path":427,"stem":428},"From Voice Memo to Studio: The Cross-Platform Problem for Creators","/blog/software-development/cross-platform-problem-for-creators","blog/software-development/cross-platform-problem-for-creators",{"title":430,"path":431,"stem":432},"Cultural transformation through the pandemic era","/blog/software-development/cultural-transformation-through-the-pandemic-era","blog/software-development/cultural-transformation-through-the-pandemic-era",{"title":434,"path":435,"stem":436},"D-Commerce Decoded: Cutting Through the Hype","/blog/software-development/d-commerce-decoded-cutting-through-the-hype","blog/software-development/d-commerce-decoded-cutting-through-the-hype",{"title":438,"path":439,"stem":440},"Dev Meeting 002: Intro to DDD","/blog/software-development/dev-meeting-002-introduction-to-domain-driven-design-ddd","blog/software-development/dev-meeting-002-introduction-to-domain-driven-design-ddd",{"title":442,"path":443,"stem":444},"Dev Meeting 003: Web3 Primer","/blog/software-development/dev-meeting-003-web3-primer","blog/software-development/dev-meeting-003-web3-primer",{"title":446,"path":447,"stem":448},"Dev Meeting 004: Introduction to Event Storming","/blog/software-development/dev-meeting-004-introduction-to-event-storming","blog/software-development/dev-meeting-004-introduction-to-event-storming",{"title":450,"path":451,"stem":452},"Dev Meeting 001: Kubernetes is a Framework","/blog/software-development/dev-meeting-kubernetes-is-a-framework","blog/software-development/dev-meeting-kubernetes-is-a-framework",{"title":454,"path":455,"stem":456},"Did You Know? 10 Developer Tips from Real Codebases","/blog/software-development/did-you-know-dev-tips-part-1","blog/software-development/did-you-know-dev-tips-part-1",{"title":458,"path":459,"stem":460},"10 Surprising MusicTech Facts (Part 2)","/blog/software-development/did-you-know-musictech-facts-part-2","blog/software-development/did-you-know-musictech-facts-part-2",{"title":462,"path":463,"stem":464},"Django-cms and GraphQL","/blog/software-development/django-cms-and-graphql","blog/software-development/django-cms-and-graphql",{"title":466,"path":467,"stem":468},"Does Zappa make it super easy?","/blog/software-development/does-zappa-make-it-super-easy","blog/software-development/does-zappa-make-it-super-easy",{"title":470,"path":471,"stem":472},"Establishing cooperation between Netlify and Bravelab","/blog/software-development/establishing-cooperation-between-netlify-and-bravelab","blog/software-development/establishing-cooperation-between-netlify-and-bravelab",{"title":474,"path":475,"stem":476},"Export Ableton Locators to JSON via Max for Live","/blog/software-development/exporting-ableton-live-locators-to-json-with-max-for-live","blog/software-development/exporting-ableton-live-locators-to-json-with-max-for-live",{"title":478,"path":479,"stem":480},"IT Outsourcing: Success and Failure Factors","/blog/software-development/factors-that-contribute-to-the-success-or-failure-of-an-it-outsourcing-project","blog/software-development/factors-that-contribute-to-the-success-or-failure-of-an-it-outsourcing-project",{"title":482,"path":483,"stem":484},"Flutter 2022 Strategy: Analyzing the Roadmap","/blog/software-development/flutter-strategy-for-2022-analyzing-the-new-flutter-roadmap","blog/software-development/flutter-strategy-for-2022-analyzing-the-new-flutter-roadmap",{"title":486,"path":487,"stem":488},"Git Better #1 — Commit Message Convention","/blog/software-development/git-better-1-see-more-with-a-commit-message-convention","blog/software-development/git-better-1-see-more-with-a-commit-message-convention",{"title":490,"path":491,"stem":492},"Hasura in action. How to use it with Django","/blog/software-development/hasura-in-action","blog/software-development/hasura-in-action",{"title":494,"path":495,"stem":496},"Holacracy why and where we are","/blog/software-development/holacracy-why-and-where-we-are","blog/software-development/holacracy-why-and-where-we-are",{"title":498,"path":499,"stem":500},"How does JavaScript work","/blog/software-development/how-does-javascript-work","blog/software-development/how-does-javascript-work",{"title":502,"path":503,"stem":504},"How important is good UX/UI design?","/blog/software-development/how-important-is-good-ux-ui-design","blog/software-development/how-important-is-good-ux-ui-design",{"title":506,"path":507,"stem":508},"How repetitive tasks impact your business","/blog/software-development/how-repetitive-tasks-impact-your-business","blog/software-development/how-repetitive-tasks-impact-your-business",{"title":510,"path":511,"stem":512},"Becoming a Vue.js Dev: Do Paid Trials Work?","/blog/software-development/how-to-become-a-vue-js-developer-and-whether-paid-trials-in-it-work-out","blog/software-development/how-to-become-a-vue-js-developer-and-whether-paid-trials-in-it-work-out",{"title":514,"path":515,"stem":516},"How to Build an MVP in 6 Steps","/blog/software-development/how-to-build-a-minimum-viable-product-mvp-in-6-steps","blog/software-development/how-to-build-a-minimum-viable-product-mvp-in-6-steps",{"title":518,"path":519,"stem":520},"How to conduct workshops for creative industry?","/blog/software-development/how-to-conduct-workshops-for-creative-industry","blog/software-development/how-to-conduct-workshops-for-creative-industry",{"title":522,"path":523,"stem":524},"How to easily create form in Angular","/blog/software-development/how-to-easily-create-form-in-angular","blog/software-development/how-to-easily-create-form-in-angular",{"title":526,"path":527,"stem":528},"How to export orders in Saleor.io to XLSX file","/blog/software-development/how-to-export-orders-in-saleor-io-to-xlsx-file","blog/software-development/how-to-export-orders-in-saleor-io-to-xlsx-file",{"title":530,"path":531,"stem":532},"Handling High Loads on E-Commerce Platforms","/blog/software-development/how-to-handle-high-loads-on-e-commerce-platform-with-ease","blog/software-development/how-to-handle-high-loads-on-e-commerce-platform-with-ease",{"title":534,"path":535,"stem":536},"How to launch Saleor.io shop instance within 40h","/blog/software-development/how-to-launch-saleor-io-shop-instance-within-40h","blog/software-development/how-to-launch-saleor-io-shop-instance-within-40h",{"title":538,"path":539,"stem":540},"First Steps to Build a Business Relationship","/blog/software-development/how-to-make-the-first-step-to-establish-a-business-relationship","blog/software-development/how-to-make-the-first-step-to-establish-a-business-relationship",{"title":542,"path":543,"stem":544},"Multi-Tenant Apps with Django and Saleor.io","/blog/software-development/how-to-manage-tenants-in-the-multitenant-app-based-on-django-tenants-and-saleor-io-platform","blog/software-development/how-to-manage-tenants-in-the-multitenant-app-based-on-django-tenants-and-saleor-io-platform",{"title":546,"path":547,"stem":548},"Notion Backup Tool Built in 3 Days with Python","/blog/software-development/how-we-built-a-notion-backup-tool-in-3-days-with-pythonvue-and-why","blog/software-development/how-we-built-a-notion-backup-tool-in-3-days-with-pythonvue-and-why",{"title":550,"path":551,"stem":552},"Important new features in Python 3.8","/blog/software-development/important-new-features-in-python-3-8","blog/software-development/important-new-features-in-python-3-8",{"title":554,"path":555,"stem":556},"Installing Proxmox on dedicated server from OVH","/blog/software-development/installing-proxmox-on-dedicated-server-from-ovh","blog/software-development/installing-proxmox-on-dedicated-server-from-ovh",{"title":558,"path":559,"stem":560},"Integrating SignNow E-Signatures into Your Django Application","/blog/software-development/integrating-signnow-e-signatures-into-your-django-application","blog/software-development/integrating-signnow-e-signatures-into-your-django-application",{"title":562,"path":563,"stem":564},"Tempus Metronome and GetSongBPM API","/blog/software-development/integrating-tempus-metronome-with-the-getsongbpm-api-what-bpm-really-means-and-how-to-use-it","blog/software-development/integrating-tempus-metronome-with-the-getsongbpm-api-what-bpm-really-means-and-how-to-use-it",{"title":566,"path":567,"stem":568},"Introducing MusicTech Poland","/blog/software-development/introducing-musictech-poland","blog/software-development/introducing-musictech-poland",{"title":570,"path":571,"stem":572},"Vue.js as a Frontend for Saleor.io","/blog/software-development/is-it-possible-to-use-vue-js-as-a-frontend-for-saleor-io-platform","blog/software-development/is-it-possible-to-use-vue-js-as-a-frontend-for-saleor-io-platform",{"title":574,"path":575,"stem":576},"Is your business ready for the cashless era?","/blog/software-development/is-your-business-ready-for-the-cashless-era","blog/software-development/is-your-business-ready-for-the-cashless-era",{"title":578,"path":579,"stem":580},"Is your face ready to buy?","/blog/software-development/is-your-face-ready-to-buy","blog/software-development/is-your-face-ready-to-buy",{"title":582,"path":583,"stem":584},"JS Frameworks: Trends and Opportunities","/blog/software-development/javascript-trending-frameworks-and-market-opportunities","blog/software-development/javascript-trending-frameworks-and-market-opportunities",{"title":586,"path":587,"stem":588},"Kanban Board: Boost Your Team Productivity","/blog/software-development/kanban-board-methodology-hack-your-companys-productivity","blog/software-development/kanban-board-methodology-hack-your-companys-productivity",{"title":590,"path":591,"stem":592},"Verified Human Cert MCP Server: Prove Your Music Is Human-Made, Right from the Terminal","/blog/software-development/mcp-verified-human-cert-open-source","blog/software-development/mcp-verified-human-cert-open-source",{"title":594,"path":595,"stem":596},"Migrating from TravisCI to Github Actions","/blog/software-development/migrating-from-travisci-to-github-actions","blog/software-development/migrating-from-travisci-to-github-actions",{"title":598,"path":599,"stem":600},"MusicTech Lab: Top Software Developer by Clutch","/blog/software-development/musictechlab-is-recognized-as-a-top-custom-software-developer-by-clutch","blog/software-development/musictechlab-is-recognized-as-a-top-custom-software-developer-by-clutch",{"title":602,"path":603,"stem":604},"MusicTech Lab x Verified Human: Building a Trust Layer for Human-Made Music","/blog/software-development/musictechlab_blog_verified_human_partnership","blog/software-development/musictechlab_blog_verified_human_partnership",{"title":606,"path":607,"stem":608},"MusicXML: Standard for Music Notation","/blog/software-development/musicxml-standard-for-music-notation-and-education","blog/software-development/musicxml-standard-for-music-notation-and-education",{"title":610,"path":611,"stem":612},"Only a few books but dozens of ideas","/blog/software-development/only-a-few-books-but-dozens-of-ideas","blog/software-development/only-a-few-books-but-dozens-of-ideas",{"title":614,"path":615,"stem":616},"Overdue Invoices and Issue Tracker Integration","/blog/software-development/overdue-invoices-integration-with-the-issue-tracking-system","blog/software-development/overdue-invoices-integration-with-the-issue-tracking-system",{"title":618,"path":619,"stem":620},"Performing SAML SSO using JWT in Django","/blog/software-development/performing-saml-sso-using-jwt-in-django","blog/software-development/performing-saml-sso-using-jwt-in-django",{"title":622,"path":623,"stem":624},"Progressive Web Apps for Mobile Development","/blog/software-development/progressive-web-apps-a-new-way-of-creating-mobile-application","blog/software-development/progressive-web-apps-a-new-way-of-creating-mobile-application",{"title":626,"path":627,"stem":628},"Recruitment System: Gmail, Jira, and CRM","/blog/software-development/recruitment-system-integrating-gmail-bravely-jira-slack-and-copper-crm","blog/software-development/recruitment-system-integrating-gmail-bravely-jira-slack-and-copper-crm",{"title":630,"path":631,"stem":632},"Scratch Me: Chrome Extension for Leads","/blog/software-development/scratch-me-a-simple-chrome-extension-which-will-increase-your-productivity","blog/software-development/scratch-me-a-simple-chrome-extension-which-will-increase-your-productivity",{"title":634,"path":635,"stem":636},"Scratch Me – integration with the Copper CRM","/blog/software-development/scratch-me-integration-with-the-copper-crm","blog/software-development/scratch-me-integration-with-the-copper-crm",{"title":638,"path":639,"stem":640},"SignNow MCP Server: E-Signatures Straight from Claude Code","/blog/software-development/signnow-mcp-server-e-signatures-from-claude-code","blog/software-development/signnow-mcp-server-e-signatures-from-claude-code",{"title":642,"path":643,"stem":644},"Music Industry Tech Openings (March 2024 Update)","/blog/software-development/technical-job-opportunities-in-the-music-industry","blog/software-development/technical-job-opportunities-in-the-music-industry",{"title":646,"path":647,"stem":648},"Thanks app – a Management 3.0 solution","/blog/software-development/thanks-app-a-management-3-0-solution","blog/software-development/thanks-app-a-management-3-0-solution",{"title":650,"path":651,"stem":652},"Colonial Pipeline Case: 7 Security Reminders","/blog/software-development/the-case-of-colonial-pipeline-and-7-security-reminders","blog/software-development/the-case-of-colonial-pipeline-and-7-security-reminders",{"title":654,"path":655,"stem":656},"The Evolution and Future of E-commerce Platforms","/blog/software-development/the-evolution-and-future-of-e-commerce-platforms","blog/software-development/the-evolution-and-future-of-e-commerce-platforms",{"title":658,"path":659,"stem":660},"The Gender Gap in the Tech Industry","/blog/software-development/the-gender-gap-in-the-tech-industry","blog/software-development/the-gender-gap-in-the-tech-industry",{"title":662,"path":663,"stem":664},"First Attempt to Implement 4DX at Bravelab.io","/blog/software-development/the-very-first-attempt-to-implement-4dx-in-bravelab-io","blog/software-development/the-very-first-attempt-to-implement-4dx-in-bravelab-io",{"title":666,"path":667,"stem":668},"The WTF Scale: IT Project Complexity","/blog/software-development/the-wtf-programming-scale-measuring-it-project-complexity","blog/software-development/the-wtf-programming-scale-measuring-it-project-complexity",{"title":670,"path":671,"stem":672},"Top 10 articles through the eyes of our developers","/blog/software-development/top-10-articles-through-the-eyes-of-our-developers","blog/software-development/top-10-articles-through-the-eyes-of-our-developers",{"title":674,"path":675,"stem":676},"Top 6 apps made with Flutter","/blog/software-development/top-6-apps-made-with-flutter","blog/software-development/top-6-apps-made-with-flutter",{"title":678,"path":679,"stem":680},"Uber 101: How Uber Made It to the Top","/blog/software-development/uber-101-how-this-ride-sharing-behemoth-made-it-to-the-top","blog/software-development/uber-101-how-this-ride-sharing-behemoth-made-it-to-the-top",{"title":682,"path":683,"stem":684},"MusicTech Lab Partners with Music Glue","/blog/software-development/unifying-artists-and-audiences-exploring-music-glue","blog/software-development/unifying-artists-and-audiences-exploring-music-glue",{"title":686,"path":687,"stem":688},"Why AI Will Defeat Traditional HR","/blog/software-development/warning-why-artificial-intelligence-will-defeat-traditional-hr","blog/software-development/warning-why-artificial-intelligence-will-defeat-traditional-hr",{"title":690,"path":691,"stem":692},"What is a Discovery Document?","/blog/software-development/what-is-discovery-document","blog/software-development/what-is-discovery-document",{"title":694,"path":695,"stem":696},"What is Flutter, and Why is it Worth Considering?","/blog/software-development/what-is-flutter-and-why-is-it-worth-considering","blog/software-development/what-is-flutter-and-why-is-it-worth-considering",{"title":698,"path":699,"stem":700},"What is a Watermarked Song?","/blog/software-development/what-is-watermarked-song","blog/software-development/what-is-watermarked-song",{"title":702,"path":703,"stem":704},"Choosing a Frontend Framework for the Web","/blog/software-development/which-framework-should-you-choose-for-the-frontend-web-platform-development","blog/software-development/which-framework-should-you-choose-for-the-frontend-web-platform-development",{"title":706,"path":707,"stem":708},"Why DAWs Are the Wrong Tool for Starting a Song","/blog/software-development/why-daws-wrong-tool-for-starting-song","blog/software-development/why-daws-wrong-tool-for-starting-song",{"title":710,"path":711,"stem":712},"Why the Programming World Loves Python","/blog/software-development/why-the-programming-world-loves-python","blog/software-development/why-the-programming-world-loves-python",{"title":714,"path":715,"stem":716},"Why We Don't Build Chat From Scratch (And Neither Should You)","/blog/software-development/why-we-dont-build-chat-from-scratch","blog/software-development/why-we-dont-build-chat-from-scratch",{"title":718,"path":719,"stem":720},"Why we use Sanity.io","/blog/software-development/why-we-use-sanity-io","blog/software-development/why-we-use-sanity-io",{"title":722,"path":723,"stem":724,"children":725,"page":69},"Sportstech","/blog/sportstech","blog/sportstech",[726,730],{"title":727,"path":728,"stem":729},"BeatBuddy Replay: Video Analysis App Challenges","/blog/sportstech/beatbuddy-replay-video-analysis-app-for-swimmers-flutter","blog/sportstech/beatbuddy-replay-video-analysis-app-for-swimmers-flutter",{"title":731,"path":732,"stem":733},"How to Create a Watch Face App for Garmin Watch","/blog/sportstech/how-to-create-watch-face-app-for-garmin-watch","blog/sportstech/how-to-create-watch-face-app-for-garmin-watch",{"id":735,"title":66,"authors":736,"badge":742,"body":744,"category":1264,"client":1265,"date":1266,"description":1267,"extension":1268,"faq":1269,"featured":69,"featuredOrder":1265,"hidden":69,"image":1282,"keyTakeaways":1284,"meta":1298,"navigation":1285,"path":67,"seo":1299,"status":1265,"stem":68,"tags":1302,"teaser":1265,"__hash__":1310},"posts/blog/case-study/why-merch-is-the-new-royalty-check.md",[737],{"name":738,"to":739,"avatar":740},"Mariusz Smenżyk","https://www.linkedin.com/in/mariusz-smenzyk/",{"src":741},"/images/people/mariusz-smenzyk2.webp",{"label":5,"color":743},"#f59e0b",{"type":745,"value":746,"toc":1251},"minimark",[747,759,764,767,845,853,856,862,866,873,876,885,905,912,919,923,926,933,958,965,969,972,975,978,1004,1007,1013,1017,1020,1023,1044,1047,1053,1057,1064,1071,1077,1081,1084,1162,1166,1169,1172,1175,1185,1189],[748,749,750,751,758],"p",{},"Selling one $35 band T-shirt generates the same revenue as ",[752,753,757],"a",{"href":754,"rel":755},"https://royaltyexchange.com/blog/how-music-streaming-platforms-calculate-payouts-per-stream-2025",[756],"nofollow","8,750 Spotify streams",". That single number explains why the smartest people in the music industry are rethinking where artist revenue actually comes from.",[760,761,763],"h2",{"id":762},"the-royalty-math-that-doesnt-work","The royalty math that doesn't work",[748,765,766],{},"Let's start with what streaming actually pays. These are real per-stream rates from 2024-2025:",[768,769,770,786],"table",{},[771,772,773],"thead",{},[774,775,776,780,783],"tr",{},[777,778,779],"th",{},"Platform",[777,781,782],{},"Per-Stream Payout",[777,784,785],{},"Per 1,000 Streams",[787,788,789,801,812,823,834],"tbody",{},[774,790,791,795,798],{},[792,793,794],"td",{},"Tidal",[792,796,797],{},"$0.012 - $0.015",[792,799,800],{},"~$12.84",[774,802,803,806,809],{},[792,804,805],{},"Apple Music",[792,807,808],{},"$0.007 - $0.01",[792,810,811],{},"~$6.20",[774,813,814,817,820],{},[792,815,816],{},"Amazon Music",[792,818,819],{},"$0.004 - $0.008",[792,821,822],{},"~$8.80",[774,824,825,828,831],{},[792,826,827],{},"Spotify",[792,829,830],{},"$0.003 - $0.005",[792,832,833],{},"~$3.00",[774,835,836,839,842],{},[792,837,838],{},"YouTube Music",[792,840,841],{},"$0.002 - $0.005",[792,843,844],{},"varies",[748,846,847,848,852],{},"At Spotify's rate, an artist needs roughly ",[849,850,851],"strong",{},"350,000 streams per month"," just to earn a U.S. minimum wage. That puts streaming income out of reach for the vast majority of working musicians.",[748,854,855],{},"Meanwhile, streaming accounts for 69% of total recorded music revenue globally. In 2024, that was $20.4 billion out of $29.6 billion (IFPI). The money is enormous at the platform level, but it gets diluted through labels, distributors, and publishers before it reaches artists.",[857,858,859],"note",{},[748,860,861],{},"Apple Music's per-stream rate is roughly 2x Spotify's, primarily because every Apple Music listener is a paying subscriber. There is no free tier diluting the pool.",[760,863,865],{"id":864},"merch-the-8x-multiplier","Merch: the 8x multiplier",[748,867,868,869,872],{},"Here's where the economics flip. According to atVenu, the industry-standard merch analytics platform, the average small to mid-cap artist makes ",[849,870,871],{},"8x more per show in gross merchandise sales"," than a year's worth of streaming royalties.",[748,874,875],{},"That's not a typo. One show's merch table versus twelve months of streams.",[748,877,878,879,884],{},"The ",[752,880,883],{"href":881,"rel":882},"https://www.atvenu.com/post/an-updated-look-at-artist-merch-trends",[756],"numbers behind this"," are straightforward:",[886,887,888,896,899,902],"ul",{},[889,890,891,892,895],"li",{},"Average merch ",[849,893,894],{},"revenue per head"," at live shows is $10.29 in 2025, up 14% from 2024",[889,897,898],{},"Average item prices increased 9% year over year",[889,900,901],{},"A single $35 T-shirt equals ~8,750 Spotify streams in artist revenue",[889,903,904],{},"A $60 hoodie equals ~15,000 streams",[748,906,907,908,911],{},"And unlike streaming, where revenue depends on algorithmic placement and playlist inclusion, merch revenue is driven by something labels can't easily replicate: ",[849,909,910],{},"direct fan connection",".",[748,913,914],{},[915,916],"img",{"alt":917,"src":918},"Fan browsing merch at a live event","/images/blog/musictechlab_blog_merch-browsing.webp",[760,920,922],{"id":921},"the-fastest-growing-segment-in-recorded-music","The fastest-growing segment in recorded music",[748,924,925],{},"This isn't just anecdotal. The industry data backs it up.",[748,927,928,929,932],{},"IFPI's Global Music Report shows that \"expanded rights\" - which includes merch, licensing, and fan experiences - grew ",[849,930,931],{},"21.5% in 2025",". That makes it the fastest-growing segment in the entire recorded music industry, outpacing streaming growth significantly.",[934,935,942,948,953],"div",{"className":936},[937,938,939,940,941],"grid","grid-cols-1","md:grid-cols-3","gap-4","my-8",[943,944],"spotlight-card",{"description":945,"icon":946,"title":947},"Global merchandise market forecast by MIDiA Research, including physical merch, digital merch, and physical music.","i-lucide-shirt","$16.3B by 2030",[943,949],{"description":950,"icon":951,"title":952},"Expanded rights (merch + licensing + fan experiences) grew 21.5% in 2025 - the fastest-growing segment in recorded music.","i-lucide-trending-up","21.5% Growth",[943,954],{"description":955,"icon":956,"title":957},"Goldman Sachs estimates an additional $4.3 billion annually from superfan monetization, assuming 20% of paid subscribers spend 2x average.","i-lucide-users","$4.3B Superfan Opportunity",[748,959,960,961,964],{},"Goldman Sachs projects global music revenues will ",[849,962,963],{},"double to $200 billion by 2035",", with superfan monetization identified as a key growth driver. Their \"Music in the Air\" report estimates the superfan opportunity alone at $4.3 billion annually.",[760,966,968],{"id":967},"fan-designed-merch-the-model-that-changes-everything","Fan-designed merch: the model that changes everything",[748,970,971],{},"Traditional merch has a problem: artists (or their labels) design it, manufacture it in bulk, ship it to warehouses, and hope it sells. That means upfront capital, inventory risk, and unsold stock sitting in boxes.",[748,973,974],{},"Fan-designed merch flips this model. Fans create designs. Artists approve them. Both parties earn from sales. And nothing gets manufactured until someone actually buys it.",[748,976,977],{},"This is the model that a growing number of platforms are building. The economics are compelling:",[886,979,980,986,992,998],{},[889,981,982,985],{},[849,983,984],{},"Zero inventory risk"," - print-on-demand means no unsold stock",[889,987,988,991],{},[849,989,990],{},"Community engagement"," - fans become co-creators, not just consumers",[889,993,994,997],{},[849,995,996],{},"Scalable catalog"," - hundreds of designs without hundreds of SKUs in a warehouse",[889,999,1000,1003],{},[849,1001,1002],{},"Global fulfillment"," - POD networks handle printing and shipping worldwide",[748,1005,1006],{},"The global print-on-demand market is now valued at $11-13 billion and growing at 23-26% CAGR. The infrastructure exists. The question is how to connect it to artist storefronts seamlessly.",[748,1008,1009],{},[915,1010],{"alt":1011,"src":1012},"Direct-to-film printing process for on-demand merch","/images/blog/musictechlab_blog_pod-printing.webp",[760,1014,1016],{"id":1015},"the-tech-stack-that-makes-it-work","The tech stack that makes it work",[748,1018,1019],{},"This is where things get practical. For fan-designed merch to work at scale, you need a pipeline that connects the design platform (where fans create and artists approve) to the storefront (where fans buy) to the fulfillment network (where products get made and shipped).",[748,1021,1022],{},"At MusicTech Lab, we're building exactly this kind of bridge. Our Shopify integration connects product catalogs from merch platforms directly to an artist's Shopify store:",[1024,1025,1026,1032,1038],"ol",{},[889,1027,1028,1031],{},[849,1029,1030],{},"Product sync"," - approved designs are automatically pushed to Shopify with correct variants (sizes, colors), pricing, and images",[889,1033,1034,1037],{},[849,1035,1036],{},"Order routing"," - when a fan purchases merch, the order data flows back to the design platform for fulfillment",[889,1039,1040,1043],{},[849,1041,1042],{},"Inventory-free catalog"," - since everything is print-on-demand, the Shopify store reflects available designs without stock management",[748,1045,1046],{},"The key technical challenge is mapping between two different product models. A design platform thinks in terms of \"approved designs with print areas.\" Shopify thinks in terms of \"products with variants and SKUs.\" The sync layer translates between them, handling variant explosion (one design x multiple sizes x multiple colors = many Shopify variants) and keeping everything in sync as designs are added, updated, or removed.",[1048,1049,1050],"tip",{},[748,1051,1052],{},"The same architecture works for any artist-to-storefront integration, not just fan-designed merch. Any catalog that lives outside Shopify - whether it's a label's product database, a print-on-demand API, or a custom merch platform - can use this pattern to keep storefronts automatically in sync.",[760,1054,1056],{"id":1055},"the-risk-fan-fatigue","The risk: fan fatigue",[748,1058,1059,1060,1063],{},"MIDiA Research found that ",[849,1061,1062],{},"39% of fans feel their fandom is being exploited",", and nearly half say merch is becoming unaffordable. As Mark Mulligan from MIDiA puts it: \"You cannot harvest fandom if you are not also nurturing it.\"",[748,1065,1066,1067,1070],{},"The takeaway: merch works best as a ",[849,1068,1069],{},"relationship channel",", not a revenue extraction tool. Fan co-creation helps here - participants spend more willingly than passive buyers.",[1072,1073,1074],"warning",{},[748,1075,1076],{},"Amazon accounts for 39% of physical music merch purchases. Selling only through your own store leaves significant demand on the table. A multi-channel approach (own store + marketplaces) captures more of the market.",[760,1078,1080],{"id":1079},"what-this-means-for-labels-managers-and-artists","What this means for labels, managers, and artists",[748,1082,1083],{},"The shift from streaming royalties to merch as a primary revenue driver isn't a trend. It's a structural change in how the music economy works. Here's what to do about it:",[934,1085,1087,1112,1137],{"className":1086},[937,938,939,940,941],[943,1088,1092],{"description":1089,"icon":1090,"title":1091},"Turn your merch into a revenue engine.","i-lucide-mic","For Artists",[886,1093,1094,1100,1106],{},[889,1095,1096,1099],{},[849,1097,1098],{},"Treat merch like your release calendar."," Regular drops, seasonal collections, and limited editions keep fans engaged",[889,1101,1102,1105],{},[849,1103,1104],{},"Consider fan co-creation."," Fans submit designs, you approve - a creative team with zero payroll",[889,1107,1108,1111],{},[849,1109,1110],{},"Go multi-channel."," Own Shopify store for margins, marketplace presence for reach",[943,1113,1117],{"description":1114,"icon":1115,"title":1116},"Optimize the merch operation.","i-lucide-briefcase","For Managers & Labels",[886,1118,1119,1125,1131],{},[889,1120,1121,1124],{},[849,1122,1123],{},"Track revenue per head."," The $10.29 average RPH in 2025 is a benchmark - if you're below it, there's room to grow",[889,1126,1127,1130],{},[849,1128,1129],{},"Invest in the tech stack."," Automated catalog sync is infrastructure, not a nice-to-have",[889,1132,1133,1136],{},[849,1134,1135],{},"Watch the affordability signal."," 39% of fans feel exploited - offer a range from $15 accessories to $60 premium items",[943,1138,1142],{"description":1139,"icon":1140,"title":1141},"Build the connective tissue.","i-lucide-code","For Music Tech Founders",[886,1143,1144,1150,1156],{},[889,1145,1146,1149],{},[849,1147,1148],{},"The integration layer is the opportunity."," Shopify, POD networks, and design tools exist - the glue between them is missing",[889,1151,1152,1155],{},[849,1153,1154],{},"Think beyond apparel."," Home decor is the fastest-growing POD category in 2026",[889,1157,1158,1161],{},[849,1159,1160],{},"Build for the long tail."," Millions of mid-tier artists have no merch operation at all",[760,1163,1165],{"id":1164},"the-bottom-line","The bottom line",[748,1167,1168],{},"Streaming built the modern music industry's distribution layer. But it didn't solve the artist revenue problem. Merch - especially tech-enabled, fan-driven, zero-inventory merch - is the strongest candidate to fill that gap.",[748,1170,1171],{},"One T-shirt equals 8,750 streams. One engaged fan community designing merch equals a sustainable revenue engine. The math has never been clearer.",[1173,1174],"hr",{},[1048,1176,1177],{},[748,1178,1179,1180,911],{},"At MusicTech Lab, we build the technology that connects music platforms to storefronts. If you're working on artist merch, direct-to-fan commerce, or Shopify integrations for the music industry, ",[752,1181,1184],{"href":1182,"rel":1183},"https://musictechlab.io/contact",[756],"let's talk",[760,1186,1188],{"id":1187},"sources","Sources",[886,1190,1191,1198,1205,1212,1220,1227,1235,1243],{},[889,1192,1193,1197],{},[752,1194,1196],{"href":754,"rel":1195},[756],"How Music Streaming Platforms Calculate Payouts Per Stream (2025)"," - Royalty Exchange",[889,1199,1200,1204],{},[752,1201,1203],{"href":881,"rel":1202},[756],"An Updated Look at Artist Merch Trends in 2025"," - atVenu",[889,1206,1207,1204],{},[752,1208,1211],{"href":1209,"rel":1210},"https://www.atvenu.com/post/how-much-money-artists-make-in-streaming-vs-merchandise-sales",[756],"How Much Money Artists Make in Streaming vs. Merchandise Sales",[889,1213,1214,1219],{},[752,1215,1218],{"href":1216,"rel":1217},"https://www.midiaresearch.com/blog/global-merchandise-market-to-hit-163-billion-by-2030-but-annual-growth-slows-to-16",[756],"Global Merchandise Market to Hit $16.3 Billion by 2030"," - MIDiA Research",[889,1221,1222,1219],{},[752,1223,1226],{"href":1224,"rel":1225},"https://www.midiaresearch.com/blog/are-we-reaching-peak-fandom",[756],"Are We Reaching Peak Fandom?",[889,1228,1229,1234],{},[752,1230,1233],{"href":1231,"rel":1232},"https://www.ifpi.org/ifpi-amidst-highly-competitive-market-global-recorded-music-revenues-grew-4-8-in-2024/",[756],"IFPI Global Music Report: Revenues Grew 4.8% in 2024"," - IFPI",[889,1236,1237,1242],{},[752,1238,1241],{"href":1239,"rel":1240},"https://www.musicbusinessworldwide.com/global-recorded-music-revenues-hit-31-7bn-in-2025-up-6-4-yoy-users-of-paid-music-subscriptions-reach-837m/",[756],"Global Recorded Music Revenues Hit $31.7B in 2025"," - Music Business Worldwide",[889,1244,1245,1250],{},[752,1246,1249],{"href":1247,"rel":1248},"https://www.goldmansachs.com/insights/articles/global-music-revenues-are-forecast-to-double-to-200-million-in-2035",[756],"Global Music Revenues Forecast to Double to $200B by 2035"," - Goldman Sachs",{"title":1252,"searchDepth":1253,"depth":1253,"links":1254},"",2,[1255,1256,1257,1258,1259,1260,1261,1262,1263],{"id":762,"depth":1253,"text":763},{"id":864,"depth":1253,"text":865},{"id":921,"depth":1253,"text":922},{"id":967,"depth":1253,"text":968},{"id":1015,"depth":1253,"text":1016},{"id":1055,"depth":1253,"text":1056},{"id":1079,"depth":1253,"text":1080},{"id":1164,"depth":1253,"text":1165},{"id":1187,"depth":1253,"text":1188},"case-study",null,"2026-03-27T00:00:00.000Z","Streaming pays fractions of a cent. Merch pays the bills. Here's how the economics of artist revenue are shifting, and why technology is the key enabler.","md",[1270,1273,1276,1279],{"question":1271,"answer":1272},"How much does one Spotify stream pay an artist?","In 2024-2025, Spotify pays approximately $0.003 to $0.005 per stream. An artist needs roughly 8,750 streams to match the revenue from selling a single $35 T-shirt.",{"question":1274,"answer":1275},"How big is the global music merch market?","MIDiA Research forecasts the global merchandise market will reach $16.3 billion by 2030. Expanded rights including merch, licensing, and fan experiences grew 21.5% in 2025, making it the fastest-growing segment in recorded music.",{"question":1277,"answer":1278},"What is fan-designed merch?","Fan-designed merch is a model where fans create designs, artists approve them, and both parties earn from sales. It combines community engagement with zero-inventory economics through print-on-demand fulfillment.",{"question":1280,"answer":1281},"How does print-on-demand work for music merch?","Print-on-demand eliminates upfront inventory risk. Products are only manufactured when a customer places an order. The global POD market is valued at $11-13 billion and growing at 23-26% CAGR, making it increasingly viable for artists at any scale.",{"src":1283},"/images/blog/musictechlab_blog_why-merch-is-the-new-royalty-check.webp",{"enabled":1285,"items":1286},true,[1287,1290,1293,1295],{"text":1288,"icon":1289},"One $35 T-shirt = 8,750 Spotify streams. Merch is structurally more efficient than streaming royalties.","i-lucide-dollar-sign",{"text":1291,"icon":1292},"Fan-designed merch eliminates inventory risk and turns fans into co-creators via print-on-demand.","i-lucide-palette",{"text":1294,"icon":1140},"The key tech challenge is the integration layer: design platforms, Shopify, POD fulfillment, with variant explosion across sizes and colors.",{"text":1296,"icon":1297},"39% of fans feel their fandom is exploited. Merch works best as a relationship channel, not extraction.","i-lucide-heart",{},{"title":1300,"description":1301},"Why Merch Is the New Royalty Check | MusicTech Lab","One T-shirt equals 8,750 Spotify streams. Learn how merch is becoming the primary revenue engine for artists and what tech makes it possible.",[1303,1304,1305,1306,1307,1308,1309],"merch","royalties","streaming","direct-to-fan","shopify","print-on-demand","musictech","wUAIrrrjDGR_U8qj-shJBayE2WRqw3SPWDhCz15eGvE",[1312,1314],{"title":62,"path":63,"stem":64,"description":1313,"children":-1},"How we built a cloud-based booking platform for the leading free walking tour company, handling thousands of weekly reservations across European cities.",{"title":76,"path":77,"stem":78,"description":1315,"children":-1},"Every month, independent labels receive royalty reports from over a dozen distributors. No two look the same. Here's what that actually looks like.",[1317,2078,2609,2874],{"id":1318,"title":76,"authors":1319,"badge":1322,"body":1325,"category":2043,"client":1265,"date":2044,"description":1315,"extension":1268,"faq":2045,"featured":1285,"featuredOrder":1830,"hidden":69,"image":2055,"keyTakeaways":2057,"meta":2071,"navigation":1285,"path":77,"seo":2072,"status":1265,"stem":78,"tags":2075,"teaser":1265,"__hash__":2077,"score":1842},"posts/blog/music-data/13-distributors-5-file-formats-zero-standards-the-reality-of-music-royalty-data.md",[1320],{"name":738,"to":739,"avatar":1321},{"src":741},{"label":1323,"color":1324},"Distribution","#0ea5e9",{"type":745,"value":1326,"toc":2035},[1327,1330,1333,1337,1340,1632,1639,1643,1646,1666,1669,1673,1676,1679,1690,1695,1701,1705,1708,1808,1811,1815,1818,2003,2006,2017,2024,2028,2031],[748,1328,1329],{},"Every month, an independent label receives royalty reports from over a dozen distributors. Not a single one looks the same.",[748,1331,1332],{},"This isn't a hypothetical. This is what a real download folder looks like when you work with music royalty data at scale.",[760,1334,1336],{"id":1335},"the-wall-of-files","The wall of files",[748,1338,1339],{},"Here's a small sample of actual filenames from a single label's monthly data intake -anonymised, but otherwise untouched:",[768,1341,1342,1358],{},[771,1343,1344],{},[774,1345,1346,1349,1352,1355],{},[777,1347,1348],{},"Distributor",[777,1350,1351],{},"Example Filename",[777,1353,1354],{},"Format",[777,1356,1357],{},"File Size",[787,1359,1360,1377,1393,1409,1425,1440,1455,1468,1483,1498,1514,1529,1544,1559,1574,1588,1602,1617],{},[774,1361,1362,1365,1371,1374],{},[792,1363,1364],{},"FUGA",[792,1366,1367],{},[1368,1369,1370],"code",{},"FUGA_Statement_June_2024.xlsx",[792,1372,1373],{},".xlsx",[792,1375,1376],{},"~1 MB",[774,1378,1379,1382,1387,1390],{},[792,1380,1381],{},"ADA",[792,1383,1384],{},[1368,1385,1386],{},"SR1_Distribution_Aug_24_-_00054061_-_2024-8.xlsb",[792,1388,1389],{},".xlsb",[792,1391,1392],{},"~70 KB",[774,1394,1395,1398,1403,1406],{},[792,1396,1397],{},"Ingrooves",[792,1399,1400],{},[1368,1401,1402],{},"20240801-1496-DS-GBP_Digital_Sales.csv",[792,1404,1405],{},".csv",[792,1407,1408],{},"up to 226 MB",[774,1410,1411,1414,1419,1422],{},[792,1412,1413],{},"The Orchard",[792,1415,1416],{},[1368,1417,1418],{},"The_Orchard20240821_Jun2024_fullreport_catalogue_US.xls",[792,1420,1421],{},".xls",[792,1423,1424],{},"up to 700 MB",[774,1426,1427,1430,1435,1437],{},[792,1428,1429],{},"Bandcamp",[792,1431,1432],{},[1368,1433,1434],{},"bandcamp_rev_report_20240801-20240831.csv",[792,1436,1405],{},[792,1438,1439],{},"~6 KB",[774,1441,1442,1445,1450,1452],{},[792,1443,1444],{},"MVD",[792,1446,1447],{},[1368,1448,1449],{},"MVD_Statement_DigitalSales_2024-07.xls",[792,1451,1421],{},[792,1453,1454],{},"~12 KB",[774,1456,1457,1459,1464,1466],{},[792,1458,1444],{},[792,1460,1461],{},[1368,1462,1463],{},"MVD_Statement_DigitalSales_2024-07.xlsx",[792,1465,1373],{},[792,1467,1454],{},[774,1469,1470,1473,1478,1480],{},[792,1471,1472],{},"Emerald",[792,1474,1475],{},[1368,1476,1477],{},"Emerald_202408_DSR.csv",[792,1479,1405],{},[792,1481,1482],{},"~46 MB",[774,1484,1485,1488,1493,1495],{},[792,1486,1487],{},"Safari Records",[792,1489,1490],{},[1368,1491,1492],{},"Safari_Records_202408_DSR.xlsx",[792,1494,1373],{},[792,1496,1497],{},"~2 MB",[774,1499,1500,1503,1508,1511],{},[792,1501,1502],{},"ADA (legacy)",[792,1504,1505],{},[1368,1506,1507],{},"ADAOCT1.XLS",[792,1509,1510],{},".XLS",[792,1512,1513],{},"up to 150 MB",[774,1515,1516,1519,1524,1526],{},[792,1517,1518],{},"MAC",[792,1520,1521],{},[1368,1522,1523],{},"MAC_Developments_iTunes_August_2024.xlsx",[792,1525,1373],{},[792,1527,1528],{},"~49 KB",[774,1530,1531,1534,1539,1542],{},[792,1532,1533],{},"Absolute",[792,1535,1536],{},[1368,1537,1538],{},"Absolute_2024021.CSV",[792,1540,1541],{},".CSV",[792,1543,1408],{},[774,1545,1546,1549,1554,1556],{},[792,1547,1548],{},"Qello",[792,1550,1551],{},[1368,1552,1553],{},"DetailedSheet_Records_Ltd_20240801_20240831.xlsx",[792,1555,1373],{},[792,1557,1558],{},"~10 KB",[774,1560,1561,1564,1569,1571],{},[792,1562,1563],{},"SFM",[792,1565,1566],{},[1368,1567,1568],{},"sfmaug2024.xlsx",[792,1570,1373],{},[792,1572,1573],{},"~2.5 MB",[774,1575,1576,1579,1584,1586],{},[792,1577,1578],{},"BOFM",[792,1580,1581],{},[1368,1582,1583],{},"BOFM_Aug2024.xlsx",[792,1585,1373],{},[792,1587,1573],{},[774,1589,1590,1593,1598,1600],{},[792,1591,1592],{},"Dome Records",[792,1594,1595],{},[1368,1596,1597],{},"Dome_Records_202408_DSR.csv",[792,1599,1405],{},[792,1601,1376],{},[774,1603,1604,1607,1612,1614],{},[792,1605,1606],{},"MDR",[792,1608,1609],{},[1368,1610,1611],{},"MDR_May-2024_65634.92_Records.xlsx",[792,1613,1373],{},[792,1615,1616],{},"~500 KB",[774,1618,1619,1622,1627,1629],{},[792,1620,1621],{},"Merlin",[792,1623,1624],{},[1368,1625,1626],{},"Merlin_Nov24_eg.for.jack.xlsx",[792,1628,1373],{},[792,1630,1631],{},"~703 KB",[748,1633,1634,1635,1638],{},"That's ",[849,1636,1637],{},"18 adapters across 500+ files per year"," -each with its own naming convention, file format, and internal structure. From a 6 KB Bandcamp CSV to a single Orchard report that can reach 700 MB.",[760,1640,1642],{"id":1641},"spot-the-pattern","Spot the pattern",[748,1644,1645],{},"Go ahead, try. You won't find one.",[934,1647,1650,1654,1658,1662],{"className":1648},[937,938,1649,940,941],"md:grid-cols-2",[943,1651],{"description":1652,"title":1653},"`.xlsx` · `.xlsb` · `.xls` · `.XLS` · `.csv` · `.CSV`","5 file formats",[943,1655],{"description":1656,"title":1657},"`2024-07` · `202408` · `Aug_24` · `August_2024` · `20240801-20240831` · `2024021`","6 date conventions in filenames",[943,1659],{"description":1660,"title":1661},"Some distributors send both `.xls` and `.xlsx` versions of the exact same data.","Same report, multiple formats",[943,1663],{"description":1664,"title":1665},"camelCase, ALLCAPS, underscores, hyphens, internal reference numbers, random hash suffixes.","No naming standard",[748,1667,1668],{},"And that's just the filenames. Open these files and you'll find different column names for the same data, different date formats inside the cells, different encodings, and multi-sheet workbooks where each sheet follows its own rules.",[760,1670,1672],{"id":1671},"why-this-matters","Why this matters",[748,1674,1675],{},"Someone has to make sense of all this. Every month.",[748,1677,1678],{},"For most independent labels, that means hours of manual work -copying data between spreadsheets, reformatting dates, matching column names, fixing encoding issues that turn artist names into garbled text.",[748,1680,1681,1682,1685,1686,1689],{},"The cost isn't just time. It's ",[849,1683,1684],{},"delayed royalty payments"," to artists. It's ",[849,1687,1688],{},"reporting errors"," that erode trust. It's the finance team spending their week on data cleanup instead of analysis.",[857,1691,1692],{},[748,1693,1694],{},"One distributor changed their report format mid-year without notice. The same filename pattern, but completely different column structure inside. Manual processes break silently when this happens.",[748,1696,1697],{},[915,1698],{"alt":1699,"src":1700},"Someone working on a laptop with spreadsheet data","/images/blog/musictechlab_blog_royalty-data-spreadsheet-laptop.webp",[760,1702,1704],{"id":1703},"how-teams-try-to-solve-this","How teams try to solve this",[748,1706,1707],{},"There's more than one way to tackle this problem. Here's how the most common approaches compare:",[768,1709,1710,1729],{},[771,1711,1712],{},[774,1713,1714,1717,1720,1723,1726],{},[777,1715,1716],{},"Approach",[777,1718,1719],{},"Setup effort",[777,1721,1722],{},"Maintenance",[777,1724,1725],{},"Handles format changes",[777,1727,1728],{},"Scales with new sources",[787,1730,1731,1750,1770,1789],{},[774,1732,1733,1738,1741,1744,1747],{},[792,1734,1735],{},[849,1736,1737],{},"Manual spreadsheets",[792,1739,1740],{},"None",[792,1742,1743],{},"Hours every month",[792,1745,1746],{},"Breaks silently",[792,1748,1749],{},"Every new source = more hours",[774,1751,1752,1758,1761,1764,1767],{},[792,1753,1754,1757],{},[849,1755,1756],{},"Generic ETL tools"," (Fivetran, Airbyte)",[792,1759,1760],{},"Medium",[792,1762,1763],{},"Low",[792,1765,1766],{},"Limited - connectors are generic",[792,1768,1769],{},"Only if a connector exists",[774,1771,1772,1777,1780,1783,1786],{},[792,1773,1774],{},[849,1775,1776],{},"Custom Python scripts",[792,1778,1779],{},"High",[792,1781,1782],{},"High - fragile, hard to maintain",[792,1784,1785],{},"Depends on the developer",[792,1787,1788],{},"Every new source = new script",[774,1790,1791,1796,1799,1802,1805],{},[792,1792,1793],{},[849,1794,1795],{},"Adapter-based pipeline",[792,1797,1798],{},"High upfront",[792,1800,1801],{},"Low - each adapter is isolated",[792,1803,1804],{},"Adapter update, no side effects",[792,1806,1807],{},"Add an adapter, done",[748,1809,1810],{},"Generic ETL tools work well for standardised APIs and databases. But music royalty data doesn't come from APIs - it comes from email attachments, FTP servers, and distributor portals. Each source is its own special case. That's why an adapter-based approach wins here: each distributor gets its own parser, isolated from the rest, easy to update when formats change.",[760,1812,1814],{"id":1813},"one-clean-dataset","One clean dataset",[748,1816,1817],{},"Here's what the pipeline looks like in practice:",[1819,1820,1824],"pre",{"className":1821,"code":1822,"language":1823,"meta":1252,"style":1252},"language-mermaid shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","flowchart LR\n    subgraph sources[\"Raw Files\"]\n        A[\".xlsx\"]\n        B[\".xlsb\"]\n        C[\".xls\"]\n        D[\".csv\"]\n    end\n\n    subgraph adapters[\"Adapter Layer\"]\n        E[\"FUGA\"]\n        F[\"ADA\"]\n        G[\"Orchard\"]\n        H[\"Bandcamp\"]\n        I[\"+ 14 more\"]\n    end\n\n    subgraph output[\"Unified Output\"]\n        J[(\"Clean dataset\")]\n    end\n\n    A --> E\n    B --> F\n    C --> G\n    D --> H\n\n    E --> J\n    F --> J\n    G --> J\n    H --> J\n    I --> J\n","mermaid",[1368,1825,1826,1835,1840,1846,1852,1858,1864,1870,1876,1882,1888,1894,1900,1906,1912,1917,1922,1928,1934,1939,1944,1950,1956,1962,1968,1973,1979,1985,1991,1997],{"__ignoreMap":1252},[1827,1828,1831],"span",{"class":1829,"line":1830},"line",1,[1827,1832,1834],{"class":1833},"sTEyZ","flowchart LR\n",[1827,1836,1837],{"class":1829,"line":1253},[1827,1838,1839],{"class":1833},"    subgraph sources[\"Raw Files\"]\n",[1827,1841,1843],{"class":1829,"line":1842},3,[1827,1844,1845],{"class":1833},"        A[\".xlsx\"]\n",[1827,1847,1849],{"class":1829,"line":1848},4,[1827,1850,1851],{"class":1833},"        B[\".xlsb\"]\n",[1827,1853,1855],{"class":1829,"line":1854},5,[1827,1856,1857],{"class":1833},"        C[\".xls\"]\n",[1827,1859,1861],{"class":1829,"line":1860},6,[1827,1862,1863],{"class":1833},"        D[\".csv\"]\n",[1827,1865,1867],{"class":1829,"line":1866},7,[1827,1868,1869],{"class":1833},"    end\n",[1827,1871,1873],{"class":1829,"line":1872},8,[1827,1874,1875],{"emptyLinePlaceholder":1285},"\n",[1827,1877,1879],{"class":1829,"line":1878},9,[1827,1880,1881],{"class":1833},"    subgraph adapters[\"Adapter Layer\"]\n",[1827,1883,1885],{"class":1829,"line":1884},10,[1827,1886,1887],{"class":1833},"        E[\"FUGA\"]\n",[1827,1889,1891],{"class":1829,"line":1890},11,[1827,1892,1893],{"class":1833},"        F[\"ADA\"]\n",[1827,1895,1897],{"class":1829,"line":1896},12,[1827,1898,1899],{"class":1833},"        G[\"Orchard\"]\n",[1827,1901,1903],{"class":1829,"line":1902},13,[1827,1904,1905],{"class":1833},"        H[\"Bandcamp\"]\n",[1827,1907,1909],{"class":1829,"line":1908},14,[1827,1910,1911],{"class":1833},"        I[\"+ 14 more\"]\n",[1827,1913,1915],{"class":1829,"line":1914},15,[1827,1916,1869],{"class":1833},[1827,1918,1920],{"class":1829,"line":1919},16,[1827,1921,1875],{"emptyLinePlaceholder":1285},[1827,1923,1925],{"class":1829,"line":1924},17,[1827,1926,1927],{"class":1833},"    subgraph output[\"Unified Output\"]\n",[1827,1929,1931],{"class":1829,"line":1930},18,[1827,1932,1933],{"class":1833},"        J[(\"Clean dataset\")]\n",[1827,1935,1937],{"class":1829,"line":1936},19,[1827,1938,1869],{"class":1833},[1827,1940,1942],{"class":1829,"line":1941},20,[1827,1943,1875],{"emptyLinePlaceholder":1285},[1827,1945,1947],{"class":1829,"line":1946},21,[1827,1948,1949],{"class":1833},"    A --> E\n",[1827,1951,1953],{"class":1829,"line":1952},22,[1827,1954,1955],{"class":1833},"    B --> F\n",[1827,1957,1959],{"class":1829,"line":1958},23,[1827,1960,1961],{"class":1833},"    C --> G\n",[1827,1963,1965],{"class":1829,"line":1964},24,[1827,1966,1967],{"class":1833},"    D --> H\n",[1827,1969,1971],{"class":1829,"line":1970},25,[1827,1972,1875],{"emptyLinePlaceholder":1285},[1827,1974,1976],{"class":1829,"line":1975},26,[1827,1977,1978],{"class":1833},"    E --> J\n",[1827,1980,1982],{"class":1829,"line":1981},27,[1827,1983,1984],{"class":1833},"    F --> J\n",[1827,1986,1988],{"class":1829,"line":1987},28,[1827,1989,1990],{"class":1833},"    G --> J\n",[1827,1992,1994],{"class":1829,"line":1993},29,[1827,1995,1996],{"class":1833},"    H --> J\n",[1827,1998,2000],{"class":1829,"line":1999},30,[1827,2001,2002],{"class":1833},"    I --> J\n",[748,2004,2005],{},"Every file goes through its format-specific adapter - handling encoding, column mapping, date parsing, and multi-sheet logic. What comes out the other side is one consistent dataset: same columns, same date format, same encoding. Ready for analysis, reporting, and artist payouts.",[748,2007,2008,2009,2012,2013,2016],{},"But consistent columns are only the beginning. The data inside those files is ",[752,2010,2011],{"href":81},"just as messy"," - 830 raw values that need mapping to 19 canonical names before you can run a single meaningful query. And once the data is truly clean, it opens the door to ",[752,2014,2015],{"href":85},"AI-powered analytics"," where business users ask questions in plain English and get charts back in seconds.",[748,2018,2019,2020,2023],{},"That's what we build at MusicTech Lab. Not another dashboard on top of messy data - but the ",[849,2021,2022],{},"data layer underneath"," that turns chaos into clarity.",[760,2025,2027],{"id":2026},"looks-familiar","Looks familiar?",[748,2029,2030],{},"If your monthly royalty workflow involves more spreadsheet wrangling than actual analysis, we should talk. We've built data pipelines for independent labels handling exactly this kind of complexity - and we can do the same for you.",[2032,2033,2034],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":1252,"searchDepth":1253,"depth":1253,"links":2036},[2037,2038,2039,2040,2041,2042],{"id":1335,"depth":1253,"text":1336},{"id":1641,"depth":1253,"text":1642},{"id":1671,"depth":1253,"text":1672},{"id":1703,"depth":1253,"text":1704},{"id":1813,"depth":1253,"text":1814},{"id":2026,"depth":1253,"text":2027},"music-data","2026-02-27T00:00:00.000Z",[2046,2049,2052],{"question":2047,"answer":2048},"Why do music distributors use different file formats?","There is no industry-wide standard for royalty report delivery. Each distributor built their own reporting system independently, resulting in different file formats, column names, date conventions, and encodings.",{"question":2050,"answer":2051},"What file formats are used in music royalty reporting?","Common formats include XLSX (modern Excel), XLSB (binary Excel), XLS (legacy Excel), and CSV with various encodings (UTF-8, UTF-16, ISO-8859-1). Some distributors send the same report in multiple formats.",{"question":2053,"answer":2054},"How can labels automate royalty data processing?","By building format-aware adapters that recognise each distributor's file structure and automatically normalise everything into a single, clean dataset -eliminating manual cleanup and reducing errors.",{"src":2056},"/images/blog/musictechlab_blog_13-distributors-5-file-formats-zero-standards.webp",{"enabled":1285,"items":2058},[2059,2062,2065,2068],{"text":2060,"icon":2061},"18 adapters parse 500+ files per year from 13 distributors in 5 different formats.","i-lucide-blocks",{"text":2063,"icon":2064},"File sizes range from 6 KB (Bandcamp) to 700 MB (The Orchard) with zero naming standards.","i-lucide-file-text",{"text":2066,"icon":2067},"Adapter-based pipelines isolate each source, making format changes safe and side-effect-free.","i-lucide-layers",{"text":2069,"icon":2070},"Manual spreadsheet processing delays royalty payments and introduces silent reporting errors.","i-lucide-alert-triangle",{},{"title":2073,"description":2074},"Music Royalty Data Chaos: 13 Distributors, 5 Formats | MusicTech Lab","See the real complexity of music royalty reporting -different file formats, naming conventions, and schemas from every distributor. Learn how automation solves it.",[2043,1309,1304,1305,2076],"metadata","RALDAG90DAM9IgwQPuVrQkFWVhTDlAAddo9XQWvnld4",{"id":2079,"title":10,"authors":1265,"badge":2080,"body":2082,"category":1264,"client":2587,"date":2590,"description":2591,"extension":1268,"faq":1265,"featured":1285,"featuredOrder":1952,"hidden":69,"image":2592,"keyTakeaways":2594,"meta":2604,"navigation":1285,"path":2605,"seo":2606,"status":1265,"stem":12,"tags":2607,"teaser":1265,"__hash__":2608,"score":1842},"posts/blog/case-study/ambistream-building-a-multi-layer-streaming-platform-from-a-spark-of-an-idea.md",{"label":5,"color":2081},"#E91E63",{"type":745,"value":2083,"toc":2574},[2084,2087,2096,2106,2115,2118,2120,2124,2177,2179,2183,2233,2235,2239,2298,2300,2304,2307,2426,2428,2432,2437,2443,2454,2457,2462,2464,2468,2472,2475,2480,2482,2486,2512,2514,2518,2525,2531,2533,2537,2540,2569,2572],[748,2085,2086],{},"Before Ambistream had a roadmap, a name, or even an interface, it began with a simple question at MusicTech Lab:",[2088,2089,2090],"blockquote",{},[748,2091,2092],{},[2093,2094,2095],"em",{},"“What if video could be controlled like a musical instrument?”",[748,2097,2098,2099,2102,2103,2105],{},"A Flutter app prototype.",[2100,2101],"br",{},"\nA Chromecast on a table.",[2100,2104],{},"\nA folder full of rehearsal and training videos.",[748,2107,2108,2109,911,2112,2114],{},"One button: ",[849,2110,2111],{},"PLAY ON TV",[2100,2113],{},"\nAnd it worked - barely, but enough to start something bigger.",[748,2116,2117],{},"This is the story of how Ambistream grew from a curiosity into a fully-fledged streaming engine powering creative, educational, and athletic scenarios.",[1173,2119],{},[760,2121,2123],{"id":2122},"platform-components","Platform Components",[934,2125,2128,2133,2138,2143,2148,2153,2157,2162,2167,2172],{"className":2126},[937,938,1649,2127,940,941],"lg:grid-cols-3",[943,2129],{"description":2130,"icon":2131,"title":2132},"Django-based engine for sessions, media, metadata","i-lucide-server","Backend API",[943,2134],{"description":2135,"icon":2136,"title":2137},"Nuxt 3 platform for scene management and control","i-lucide-layout-dashboard","Web Frontend",[943,2139],{"description":2140,"icon":2141,"title":2142},"Flutter app for iOS/Android with casting capabilities","i-lucide-smartphone","Mobile Application",[943,2144],{"description":2145,"icon":2146,"title":2147},"Dedicated cast app for synchronised playback","i-lucide-cast","Custom Chromecast Receiver",[943,2149],{"description":2150,"icon":2151,"title":2152},"Native remote playback for Apple devices","i-lucide-airplay","AirPlay Integration",[943,2154],{"description":2155,"icon":2067,"title":2156},"Layered video + Lottie animations + UI","Overlay Engine",[943,2158],{"description":2159,"icon":2160,"title":2161},"FFmpeg-based transcoding for HLS and MP4","i-lucide-film","Media Pipeline",[943,2163],{"description":2164,"icon":2165,"title":2166},"Google Cloud Run, Firebase Hosting","i-lucide-cloud","Cloud Infrastructure",[943,2168],{"description":2169,"icon":2170,"title":2171},"Tools for uploading, organising and configuring scenes","i-lucide-settings","Admin Panel",[943,2173],{"description":2174,"icon":2175,"title":2176},"Sentry, UptimeRobot, Cloud Logging","i-lucide-activity","Analytics & Monitoring",[1173,2178],{},[760,2180,2182],{"id":2181},"core-features","Core Features",[934,2184,2186,2190,2195,2200,2204,2209,2214,2219,2224,2228],{"className":2185},[937,938,1649,940,941],[943,2187],{"description":2188,"icon":2067,"title":2189},"Combine video with Lottie animations in real time","Layered Playback",[943,2191],{"description":2192,"icon":2193,"title":2194},"Timeline-based overlay configuration","i-lucide-clapperboard","Scene Builder",[943,2196],{"description":2197,"icon":2198,"title":2199},"Control playback from phone to external display","i-lucide-tablet-smartphone","Remote Controller",[943,2201],{"description":2202,"icon":2146,"title":2203},"Seamless streaming to TVs and monitors","Chromecast / AirPlay Casting",[943,2205],{"description":2206,"icon":2207,"title":2208},"Loops, slow-motion, segment markers","i-lucide-repeat","Playback Controls",[943,2210],{"description":2211,"icon":2212,"title":2213},"Upload and manage assets","i-lucide-folder-open","Media Library",[943,2215],{"description":2216,"icon":2217,"title":2218},"Synchronised playback across devices","i-lucide-monitor-smartphone","Device Sync",[943,2220],{"description":2221,"icon":2222,"title":2223},"Local caching on mobile","i-lucide-wifi-off","Offline Mode (PoC)",[943,2225],{"description":2226,"icon":956,"title":2227},"Role-based access and user management","User Accounts & Permissions",[943,2229],{"description":2230,"icon":2231,"title":2232},"Experimental real-time streaming using WebRTC","i-lucide-zap","Low-Latency Mode",[1173,2234],{},[760,2236,2238],{"id":2237},"technologies-used","Technologies Used",[934,2240,2245,2249,2254,2257,2261,2266,2270,2275,2279,2283,2288,2293],{"className":2241},[937,2242,939,2243,2244,941],"grid-cols-2","lg:grid-cols-4","gap-3",[943,2246],{"description":2247,"icon":2141,"title":2248},"Mobile & controller","Flutter",[943,2250],{"description":2251,"icon":2252,"title":2253},"Web platform","i-lucide-globe","Nuxt 3",[943,2255],{"description":2132,"icon":2131,"title":2256},"Django",[943,2258],{"description":2259,"icon":2165,"title":2260},"Scalable backend","Cloud Run",[943,2262],{"description":2263,"icon":2264,"title":2265},"Frontend hosting","i-lucide-flame","Firebase",[943,2267],{"description":2268,"icon":2160,"title":2269},"Transcoding","FFmpeg",[943,2271],{"description":2272,"icon":2273,"title":2274},"Animations","i-lucide-sparkles","Lottie",[943,2276],{"description":2277,"icon":2146,"title":2278},"Cast receiver","Chromecast SDK",[943,2280],{"description":2281,"icon":2151,"title":2282},"Apple devices","AirPlay",[943,2284],{"description":2285,"icon":2286,"title":2287},"Containers","i-lucide-container","Docker",[943,2289],{"description":2290,"icon":2291,"title":2292},"CI/CD","i-lucide-git-branch","GitHub Actions",[943,2294],{"description":2295,"icon":2296,"title":2297},"Error tracking","i-lucide-bug","Sentry",[1173,2299],{},[760,2301,2303],{"id":2302},"architecture-layered-rendering-engine","Architecture: Layered Rendering Engine",[748,2305,2306],{},"The core innovation behind Ambistream is its layered rendering approach — video, animations, and UI controls are separate layers composed in real time:",[1819,2308,2310],{"className":1821,"code":2309,"language":1823,"meta":1252,"style":1252},"graph TB\n    subgraph Controller[\"📱 Mobile Controller\"]\n        A[Flutter App] --> B[Playback Commands]\n    end\n\n    subgraph Backend[\"☁️ Cloud Backend\"]\n        C[Django API] --> D[Media Pipeline]\n        D --> E[HLS / MP4 Transcoding]\n    end\n\n    subgraph Display[\"📺 Display Device\"]\n        F[Video Layer]\n        G[Lottie Animation Layer]\n        H[UI Overlay Layer]\n        F --> I[Composited Output]\n        G --> I\n        H --> I\n    end\n\n    B -->|WebSocket / REST| C\n    B -->|Cast Protocol| Display\n    E -->|Stream| F\n    C -->|Scene Config| G\n    C -->|Controls| H\n",[1368,2311,2312,2317,2322,2327,2331,2335,2340,2345,2350,2354,2358,2363,2368,2373,2378,2383,2388,2393,2397,2401,2406,2411,2416,2421],{"__ignoreMap":1252},[1827,2313,2314],{"class":1829,"line":1830},[1827,2315,2316],{"class":1833},"graph TB\n",[1827,2318,2319],{"class":1829,"line":1253},[1827,2320,2321],{"class":1833},"    subgraph Controller[\"📱 Mobile Controller\"]\n",[1827,2323,2324],{"class":1829,"line":1842},[1827,2325,2326],{"class":1833},"        A[Flutter App] --> B[Playback Commands]\n",[1827,2328,2329],{"class":1829,"line":1848},[1827,2330,1869],{"class":1833},[1827,2332,2333],{"class":1829,"line":1854},[1827,2334,1875],{"emptyLinePlaceholder":1285},[1827,2336,2337],{"class":1829,"line":1860},[1827,2338,2339],{"class":1833},"    subgraph Backend[\"☁️ Cloud Backend\"]\n",[1827,2341,2342],{"class":1829,"line":1866},[1827,2343,2344],{"class":1833},"        C[Django API] --> D[Media Pipeline]\n",[1827,2346,2347],{"class":1829,"line":1872},[1827,2348,2349],{"class":1833},"        D --> E[HLS / MP4 Transcoding]\n",[1827,2351,2352],{"class":1829,"line":1878},[1827,2353,1869],{"class":1833},[1827,2355,2356],{"class":1829,"line":1884},[1827,2357,1875],{"emptyLinePlaceholder":1285},[1827,2359,2360],{"class":1829,"line":1890},[1827,2361,2362],{"class":1833},"    subgraph Display[\"📺 Display Device\"]\n",[1827,2364,2365],{"class":1829,"line":1896},[1827,2366,2367],{"class":1833},"        F[Video Layer]\n",[1827,2369,2370],{"class":1829,"line":1902},[1827,2371,2372],{"class":1833},"        G[Lottie Animation Layer]\n",[1827,2374,2375],{"class":1829,"line":1908},[1827,2376,2377],{"class":1833},"        H[UI Overlay Layer]\n",[1827,2379,2380],{"class":1829,"line":1914},[1827,2381,2382],{"class":1833},"        F --> I[Composited Output]\n",[1827,2384,2385],{"class":1829,"line":1919},[1827,2386,2387],{"class":1833},"        G --> I\n",[1827,2389,2390],{"class":1829,"line":1924},[1827,2391,2392],{"class":1833},"        H --> I\n",[1827,2394,2395],{"class":1829,"line":1930},[1827,2396,1869],{"class":1833},[1827,2398,2399],{"class":1829,"line":1936},[1827,2400,1875],{"emptyLinePlaceholder":1285},[1827,2402,2403],{"class":1829,"line":1941},[1827,2404,2405],{"class":1833},"    B -->|WebSocket / REST| C\n",[1827,2407,2408],{"class":1829,"line":1946},[1827,2409,2410],{"class":1833},"    B -->|Cast Protocol| Display\n",[1827,2412,2413],{"class":1829,"line":1952},[1827,2414,2415],{"class":1833},"    E -->|Stream| F\n",[1827,2417,2418],{"class":1829,"line":1958},[1827,2419,2420],{"class":1833},"    C -->|Scene Config| G\n",[1827,2422,2423],{"class":1829,"line":1964},[1827,2424,2425],{"class":1833},"    C -->|Controls| H\n",[1173,2427],{},[760,2429,2431],{"id":2430},"the-story-from-spark-to-platform","The Story: From Spark to Platform",[2433,2434,2436],"h3",{"id":2435},"it-started-with-a-question","It started with a question",[748,2438,2439,2440],{},"In 2023, while working on several MusicTech Lab products, one theme kept coming up:\n",[849,2441,2442],{},"creators and coaches needed better, smarter playback tools.",[886,2444,2445,2448,2451],{},[889,2446,2447],{},"Musicians needed visual cues over their training videos.",[889,2449,2450],{},"Swimming and sports coaches needed slow-motion loops.",[889,2452,2453],{},"Stage performers wanted remote-controlled scenes and overlays.",[748,2455,2456],{},"But existing video players couldn’t do any of this. So we built a tiny PoC — Flutter, Chromecast, one big button, one video. It played. It glitched. But it proved the idea possible.",[748,2458,2459],{},[849,2460,2461],{},"The spark was lit.",[1173,2463],{},[2433,2465,2467],{"id":2466},"the-journey","The Journey",[2469,2470],"project-timeline",{":items":2471},"[{\"title\":\"R&D — The Deep Dive\",\"description\":\"Explored HLS, DASH, MP4, WebRTC. Tested on old Android TVs and new 4K displays. Discovered Lottie as the key to lightweight, animatable overlays. The layered rendering engine was born: Video → Lottie → UI.\",\"icon\":\"i-lucide-microscope\"},{\"title\":\"MVP — Building the First Version\",\"description\":\"Built a Flutter controller, Nuxt dashboard, Django backend, and custom Chromecast receiver. For the first time: phone controlled TV precisely, videos synced across devices, and overlays played in time with footage.\",\"icon\":\"i-lucide-hammer\"},{\"title\":\"Real Use-Cases Emerge\",\"description\":\"Adopted by coaches, instructors, and creators — music training with tempo cues, swimming coaching with slow-motion replays, live events with remote-controlled scenes, and step-by-step educational overlays.\",\"icon\":\"i-lucide-users\"},{\"title\":\"Scaling Up\",\"description\":\"Multi-device sync, reliable casting for Android/iOS, Cloud Run deployment, automated transcoding pipelines, Scene Builder with timelines, analytics, monitoring, and offline caching prototype.\",\"icon\":\"i-lucide-rocket\"},{\"title\":\"Ambistream 2.0 — The Vision\",\"description\":\"Preparing for broader release as a white-label solution, multi-tenant platform, production-grade streaming engine, and customisable scene editor — a toolkit for creators, athletes, teachers, and performers.\",\"icon\":\"i-lucide-sparkles\"}]",[748,2473,2474],{},"The system started from a spark — now it’s a cornerstone product in the MusicTech Lab ecosystem. And the story continues, frame by frame.",[1048,2476,2477],{},[748,2478,2479],{},"Ambistream is a MusicTech Lab internal product — built from a spark of an idea into a production-ready streaming engine. It demonstrates how iterative development can turn a simple PoC into a multi-platform system.",[1173,2481],{},[760,2483,2485],{"id":2484},"services-deliverables","Services & Deliverables",[934,2487,2489,2493,2498,2503,2505,2508],{"className":2488},[937,938,939,940,941],[943,2490],{"description":2491,"icon":1140,"title":2492},"Backend, frontend, mobile app, and API","Full-Stack Development",[943,2494],{"description":2495,"icon":2496,"title":2497},"From PoC to production-grade platform","i-lucide-flask-conical","R&D & Prototyping",[943,2499],{"description":2500,"icon":2501,"title":2502},"Vision, roadmap, and feature prioritisation","i-lucide-compass","Product Strategy",[943,2504],{"description":2164,"icon":2165,"title":2166},[943,2506],{"description":2159,"icon":2160,"title":2507},"Video Pipeline",[943,2509],{"description":2510,"icon":1292,"title":2511},"Controller and dashboard flows","UI/UX",[1173,2513],{},[760,2515,2517],{"id":2516},"client-testimonial","Client Testimonial",[2088,2519,2520],{},[748,2521,2522],{},[2093,2523,2524],{},"“Ambistream allowed us to build a synchronised, multi-layer playback system we simply couldn’t find on the market. The combination of mobile control, casting, and overlays created entirely new possibilities for training and creative work.”",[748,2526,2527,2530],{},[849,2528,2529],{},"Ambistream Team","\nNew York, USA",[1173,2532],{},[760,2534,2536],{"id":2535},"summary-streaming-innovation-creative-control","Summary: Streaming Innovation & Creative Control",[748,2538,2539],{},"Ambistream shows that even highly complex media systems can be developed iteratively:",[934,2541,2544,2549,2554,2559,2564],{"className":2542},[937,2242,2543,2244,941],"md:grid-cols-5",[943,2545],{"description":2546,"icon":2547,"title":2548},"Spark of an idea","i-lucide-lightbulb","PoC",[943,2550],{"description":2551,"icon":2552,"title":2553},"Deep technical dive","i-lucide-microscope","R&D",[943,2555],{"description":2556,"icon":2557,"title":2558},"First working version","i-lucide-hammer","MVP",[943,2560],{"description":2561,"icon":2562,"title":2563},"Real customers","i-lucide-rocket","Production",[943,2565],{"description":2566,"icon":2567,"title":2568},"Broader release","i-lucide-building","White-label",[748,2570,2571],{},"The platform is now used for training, creative performance, live educational formats, and internal production workflows.",[2032,2573,2034],{},{"title":1252,"searchDepth":1253,"depth":1253,"links":2575},[2576,2577,2578,2579,2580,2584,2585,2586],{"id":2122,"depth":1253,"text":2123},{"id":2181,"depth":1253,"text":2182},{"id":2237,"depth":1253,"text":2238},{"id":2302,"depth":1253,"text":2303},{"id":2430,"depth":1253,"text":2431,"children":2581},[2582,2583],{"id":2435,"depth":1842,"text":2436},{"id":2466,"depth":1842,"text":2467},{"id":2484,"depth":1253,"text":2485},{"id":2516,"depth":1253,"text":2517},{"id":2535,"depth":1253,"text":2536},{"name":2588,"logo":2589,"colorLogo":1285},"Ambistream","/images/logos/ambistream.webp","2025-01-01T00:00:00.000Z","How a late-night experiment grew into a multi-platform streaming engine with overlays, remote control, and Chromecast/AirPlay support.",{"src":2593},"/images/blog/musictechlab_blog_ambistream-streaming-platform.webp",{"enabled":1285,"items":2595},[2596,2598,2600,2602],{"text":2597,"icon":2067},"Multi-layer streaming engine combines video, Lottie animations, and UI overlays in real time.",{"text":2599,"icon":2562},"Started as a single-button Flutter PoC and grew into a production platform.",{"text":2601,"icon":2146},"Supports Chromecast and AirPlay casting with phone-as-remote-controller design.",{"text":2603,"icon":956},"Used by coaches, musicians, and performers for training and live event scenarios.",{},"/blog/case-studies/ambistream-building-a-multi-layer-streaming-platform-from-a-spark-of-an-idea",{"title":10,"description":2591},[1264,1309],"B64OkdTDsJdr_qBvySu0HCAHEVSrkHKCtW4dmc28UYI",{"id":2610,"title":58,"authors":2611,"badge":2614,"body":2615,"category":1264,"client":2854,"date":2856,"description":2857,"extension":1268,"faq":1265,"featured":69,"featuredOrder":1265,"hidden":69,"image":2858,"keyTakeaways":2860,"meta":2869,"navigation":1285,"path":2870,"seo":2871,"status":1265,"stem":60,"tags":2872,"teaser":1265,"__hash__":2873,"score":1842},"posts/blog/case-study/turn-fans-into-superfans-roadie-co.md",[2612],{"name":738,"to":739,"avatar":2613},{"src":741},{"label":5,"color":2081},{"type":745,"value":2616,"toc":2843},[2617,2620,2622,2626,2629,2646,2649,2655,2657,2661,2664,2677,2682,2684,2688,2691,2707,2709,2713,2731,2733,2737,2758,2760,2764,2771,2773,2777,2780,2810,2815,2817,2821,2824,2826,2830],[748,2618,2619],{},"Independent artists often face myriad challenges in the vast and ever-evolving music industry landscape. From establishing a solid online presence to effectively managing fanbases, the journey to success can seem daunting. However, with the emergence of innovative platforms like Roadie.co, artists can now access tools and resources to help them confidently navigate this complex terrain.",[1173,2621],{},[760,2623,2625],{"id":2624},"navigating-the-digital-stage","Navigating the Digital Stage",[748,2627,2628],{},"One of the most crucial aspects of an artist's career is their online presence. In today's digital age, having a professional website is essential for showcasing music and live shows.",[934,2630,2632,2636,2641],{"className":2631},[937,938,939,940,941],[943,2633],{"description":2634,"icon":2252,"title":2635},"Create attractive, customizable websites that reflect your unique style and sound.","Website Builder",[943,2637],{"description":2638,"icon":2639,"title":2640},"Add and schedule tour dates through an intuitive admin interface.","i-lucide-calendar","Tour Management",[943,2642],{"description":2643,"icon":2644,"title":2645},"Link your own domain for a professional online presence.","i-lucide-link","Custom Domains",[748,2647,2648],{},"Roadie.co simplifies the process of adding and scheduling new tour dates and releases — no more tedious tasks or complicated procedures, allowing artists to focus on what they do best: creating music.",[748,2650,2651],{},[915,2652],{"alt":2653,"src":2654},"Roadie.co partnership","/images/blog/musictechlab_blog_roadie-partnership.webp",[1173,2656],{},[760,2658,2660],{"id":2659},"data-driven-release-management","Data-Driven Release Management",[748,2662,2663],{},"When it comes to releasing new music, strategic planning is critical. Each track, EP, or album release deserves its dedicated page, and that's precisely what Roadie.co provides.",[934,2665,2667,2672],{"className":2666},[937,938,1649,940,941],[943,2668],{"description":2669,"icon":2670,"title":2671},"Create personalized pages for every track, EP, or album — easy to share with fans.","i-lucide-disc-3","Release Pages",[943,2673],{"description":2674,"icon":2675,"title":2676},"Gain insights into fanbase behaviour — website visits, social media engagement, and more.","i-lucide-bar-chart-3","Analytics",[1048,2678,2679],{},[748,2680,2681],{},"What sets Roadie.co apart is its commitment to data-driven decision-making. Artists can make informed decisions that drive success and maximize their impact.",[1173,2683],{},[760,2685,2687],{"id":2686},"fandom","Fandom",[748,2689,2690],{},"Building a loyal fanbase is essential for long-term success in the music industry. While social media platforms are valuable for reaching fans, they can be fickle and ever-changing.",[934,2692,2694,2699,2703],{"className":2693},[937,938,939,940,941],[943,2695],{"description":2696,"icon":2697,"title":2698},"Build one-on-one connections with fans and convert show attendees into subscribers.","i-lucide-mail","Mailing Lists",[943,2700],{"description":2701,"icon":2064,"title":2702},"Craft professional newsletters with easy-to-use templates.","Email Templates",[943,2704],{"description":2705,"icon":1297,"title":2706},"Cultivate a dedicated fanbase that stands the test of time.","Superfan Cultivation",[1173,2708],{},[760,2710,2712],{"id":2711},"mission-vision-and-values","Mission, Vision and Values",[934,2714,2716,2721,2726],{"className":2715},[937,938,939,940,941],[943,2717],{"description":2718,"icon":2719,"title":2720},"Clear, honest approach to how the platform works and what it costs.","i-lucide-eye","Transparency",[943,2722],{"description":2723,"icon":2724,"title":2725},"Artists own their data. Cancel anytime and take your data with you.","i-lucide-database","Data Ownership",[943,2727],{"description":2728,"icon":2729,"title":2730},"No lock-in. Transfer data and cancel subscriptions at any time.","i-lucide-move","Flexibility",[1173,2732],{},[760,2734,2736],{"id":2735},"the-future","The Future",[934,2738,2740,2745,2750,2754],{"className":2739},[937,938,1649,940,941],[943,2741],{"description":2742,"icon":2743,"title":2744},"Dedicated pages for press materials and media kits.","i-lucide-newspaper","Press Release Pages",[943,2746],{"description":2747,"icon":2748,"title":2749},"Track and showcase career milestones and achievements.","i-lucide-trophy","Career Highlights",[943,2751],{"description":2752,"icon":2496,"title":2753},"Artists can access new tools and features before anyone else.","Early Access",[943,2755],{"description":2756,"icon":2562,"title":2757},"The platform evolves to meet the changing needs of artists.","Constant Evolution",[1173,2759],{},[760,2761,2763],{"id":2762},"the-maker","The Maker",[748,2765,2766,2767,2770],{},"Behind Roadie.co is ",[849,2768,2769],{},"Joep",", an artist manager and founder passionate about supporting independent artists. Having witnessed firsthand the struggles faced by emerging talent, Joep set out to create a platform that would level the playing field and give artists the tools they need to succeed.",[1173,2772],{},[760,2774,2776],{"id":2775},"the-tech-challenge","The Tech Challenge",[748,2778,2779],{},"MusicTech Lab's cooperation with Roadie started because building a multi-tenant platform is complex. Roadie.co's challenge was to design, set up, and implement an environment and infrastructure for the new version of the platform release. The main thing was to be able to use artists' custom domains and pass all the traffic from the domain to the appropriate tenant/artist.",[934,2781,2783,2788,2793,2798,2802,2806],{"className":2782},[937,938,939,940,941],[943,2784],{"description":2785,"icon":2786,"title":2787},"Talked to Roadie.co's developer and gathered the necessary data. Sent a ballpark estimate with a list of tasks.","i-lucide-search","Discovery",[943,2789],{"description":2790,"icon":2791,"title":2792},"Installed the platform locally to understand backend, API, and frontend workings.","i-lucide-monitor","Platform Analysis",[943,2794],{"description":2795,"icon":2796,"title":2797},"Assessed scalability for immediate needs and future growth.","i-lucide-scale","Scalability Assessment",[943,2799],{"description":2800,"icon":2547,"title":2801},"Proposed the optimal solution by weighing pros and cons, considering limitations versus practicality.","Solution Design",[943,2803],{"description":2804,"icon":2131,"title":2805},"Helped choose the best hosting provider and set up server and domain routing.","Hosting & Routing",[943,2807],{"description":2808,"icon":2291,"title":2809},"Implemented continuous integration and deployment pipelines.","CI/CD Pipelines",[857,2811,2812],{},[748,2813,2814],{},"Through this collaborative effort, MusicTech Lab helped successfully implement Roadie.co's updated platform, ensuring enhanced functionality and scalability to meet the evolving needs of artists and users alike.",[1173,2816],{},[760,2818,2820],{"id":2819},"navigating-the-road-to-success","Navigating the Road to Success",[748,2822,2823],{},"Roadie.co is more than just a platform — it's a game-changer for releasing artists and their teams. With its intuitive features, data-driven approach, and unwavering commitment to transparency, Roadie.co empowers artists to reach new heights of success in the music industry.",[1173,2825],{},[760,2827,2829],{"id":2828},"links","Links",[934,2831,2835],{"className":2832},[2833,2834,2244,941],"flex","flex-wrap",[2836,2837],"u-button",{"color":2838,"label":2839,"target":2840,"to":2841,"variant":2842},"primary","Roadie.co","_blank","https://roadie.co/","subtle",{"title":1252,"searchDepth":1253,"depth":1253,"links":2844},[2845,2846,2847,2848,2849,2850,2851,2852,2853],{"id":2624,"depth":1253,"text":2625},{"id":2659,"depth":1253,"text":2660},{"id":2686,"depth":1253,"text":2687},{"id":2711,"depth":1253,"text":2712},{"id":2735,"depth":1253,"text":2736},{"id":2762,"depth":1253,"text":2763},{"id":2775,"depth":1253,"text":2776},{"id":2819,"depth":1253,"text":2820},{"id":2828,"depth":1253,"text":2829},{"name":2839,"logo":2855},"/images/logos/roadie.svg","2024-03-15T00:00:00.000Z","How Roadie.co helps independent artists build websites, manage tours, release music, and grow their fanbase with data-driven tools and email marketing.",{"src":2859},"/images/blog/musictechlab_blog_turn-fans-into-superfans-roadie-co.webp",{"enabled":1285,"items":2861},[2862,2864,2866],{"text":2863,"icon":2252},"Multi-tenant platform with custom domain routing for independent artist websites.",{"text":2865,"icon":2724},"Artists own their data with full portability and no lock-in.",{"text":2867,"icon":2868},"Built-in tour management, release pages, mailing lists, and analytics for musicians.","i-lucide-music",{},"/blog/case-studies/turn-fans-into-superfans-roadie-co",{"title":58,"description":2857},[1264,1309],"2ijydv3IbdmuLJ2Yqvmbx5Ngu03UAHzZ2OLfJJRvSJM",{"id":2875,"title":34,"authors":1265,"badge":2876,"body":2877,"category":1264,"client":3149,"date":3152,"description":3153,"extension":1268,"faq":1265,"featured":1285,"featuredOrder":1964,"hidden":69,"image":3154,"keyTakeaways":3156,"meta":3168,"navigation":1285,"path":3169,"seo":3170,"status":1265,"stem":36,"tags":3171,"teaser":1265,"__hash__":3173,"score":1842},"posts/blog/case-study/mobile-app-for-music-catalog.md",{"label":5,"color":2081},{"type":745,"value":2878,"toc":3139},[2879,2882,2884,2888,2905,2907,2911,2942,2944,2948,2955,2975,2977,2979,3032,3034,3038,3045,3060,3069,3071,3073,3078,3084,3091,3093,3097,3116,3118,3120],[748,2880,2881],{},"Content creators, music publishers, and producers need their catalogs where their audience is — on mobile. Our white-label mobile app for music catalogs was built to solve exactly that: a ready-to-deploy Flutter application that brings music libraries to iOS and Android with a professional audio player, playlists, search, downloads, and more.",[1173,2883],{},[760,2885,2887],{"id":2886},"the-problem","The Problem",[934,2889,2891,2895,2900],{"className":2890},[937,938,939,940,941],[943,2892],{"description":2893,"title":2894,"icon":2141},"Customers live on Spotify, Apple Music, and Tidal — but many music businesses are still desktop-first, missing mobile-native users entirely.","Clients Are Mobile",[943,2896],{"description":2897,"title":2898,"icon":2899},"Revenues from big platforms keep shrinking. Diversifying through direct-to-fan channels and cultivating super-fans is no longer optional.","Shrinking Platform Revenue","i-lucide-trending-down",[943,2901],{"description":2902,"title":2903,"icon":2904},"While other industries embraced digital tools, many music businesses still deal with paper contracts, email chains, and outdated processes.","Analog Practices","i-lucide-file-stack",[1173,2906],{},[760,2908,2910],{"id":2909},"features","Features",[934,2912,2914,2919,2924,2928,2932,2937],{"className":2913},[937,938,939,940,941],[943,2915],{"description":2916,"title":2917,"icon":2918},"Built-in media player using iOS/Android native audio services. Background playback, lock screen controls, waveform visualisation, and stem switching.","Audio Player","i-lucide-play-circle",[943,2920],{"description":2921,"title":2922,"icon":2923},"Staff-curated and user-created playlists. Organise, customise, and share collections of tracks.","Playlists","i-lucide-list-music",[943,2925],{"description":2926,"title":2927,"icon":2786},"Filter by genre, artist, album, duration, mood, theme, BPM, and custom tags. Sort results and apply multiple filters simultaneously.","Advanced Search",[943,2929],{"description":2930,"title":2931,"icon":1297},"Mark and quickly access preferred songs, albums, or artists. Synced across devices via the backend API.","Favourites",[943,2933],{"description":2934,"title":2935,"icon":2936},"Save music locally for offline listening. Background download manager with progress tracking and storage management.","Downloads","i-lucide-download",[943,2938],{"description":2939,"title":2940,"icon":2941},"Share tracks and playlists with friends via native share sheets. Deep linking support for direct track access.","Sharing","i-lucide-share-2",[1173,2943],{},[760,2945,2947],{"id":2946},"architecture","Architecture",[748,2949,2950,2951,2954],{},"The app follows a ",[849,2952,2953],{},"feature-first architecture"," with clean separation of concerns. Each feature module contains its own UI, BLoC/Cubit state management, repository layer, and models.",[934,2956,2958,2962,2966,2970],{"className":2957},[937,938,1649,940,941],[943,2959],{"description":2960,"title":2961,"icon":2067},"Audio Player, Auth (login, sign-up, reset password, social auth), Browse & Search, Favourites, Playlists, Account Management, Downloads, Filters (genre, mood, theme, BPM).","Feature Modules",[943,2963],{"description":2964,"title":2965,"icon":2868},"Native audio service integration with `just_audio` and `audio_service`. Background playback, waveform rendering with `flutter_audio_waveforms`, volume control, and stem switching for multi-track playback.","Audio Engine",[943,2967],{"description":2968,"title":2969,"icon":2724},"Hasura GraphQL API with `hasura_connect`. Sanity CMS for content. Secure token storage with `flutter_secure_storage`. Offline caching with `background_downloader`.","Data Layer",[943,2971],{"description":2972,"title":2973,"icon":2974},"Email/password, Google Sign-In, Apple Sign-In. Email verification flow. Password reset with validation. Secure storage for tokens and credentials.","Auth & Security","i-lucide-shield-check",[1173,2976],{},[760,2978,2238],{"id":2237},[934,2980,2982,2985,2989,2994,2998,3002,3006,3011,3015,3017,3022,3027],{"className":2981},[937,2242,939,2243,2244,941],[943,2983],{"description":2984,"title":2248,"icon":2141},"Cross-platform app",[943,2986],{"description":2987,"title":2988,"icon":2061},"State management","BLoC / Cubit",[943,2990],{"description":2991,"title":2992,"icon":2993},"API layer","Hasura + GraphQL","i-lucide-plug",[943,2995],{"description":2996,"title":2997,"icon":2064},"Content management","Sanity CMS",[943,2999],{"description":3000,"title":3001,"icon":2868},"Audio playback","just_audio",[943,3003],{"description":3004,"title":3005,"icon":2175},"Background audio","audio_service",[943,3007],{"description":3008,"title":3009,"icon":3010},"Social auth","Sign-In (Google/Apple)","i-lucide-lock",[943,3012],{"description":3013,"title":3014,"icon":2557},"CI/CD builds","Codemagic",[943,3016],{"description":2295,"title":2297,"icon":2296},[943,3018],{"description":3019,"title":3020,"icon":3021},"i18n support","easy_localization","i-lucide-languages",[943,3023],{"description":3024,"title":3025,"icon":3026},"Navigation","auto_route","i-lucide-route",[943,3028],{"description":3029,"title":3030,"icon":3031},"Immutable models","Freezed","i-lucide-snowflake",[1173,3033],{},[760,3035,3037],{"id":3036},"white-label-approach","White-Label Approach",[748,3039,3040,3041,3044],{},"The app is designed as a ",[849,3042,3043],{},"white-label product"," — fully brandable and customisable for different music businesses.",[934,3046,3048,3052,3056],{"className":3047},[937,938,939,940,941],[943,3049],{"description":3050,"title":3051,"icon":1292},"Custom logos, colours, typography, and visual identity. The app looks and feels like your own product.","Your Brand",[943,3053],{"description":3054,"title":3055,"icon":2170},"External config file for API keys, environment settings, and feature flags. No code changes needed for basic customisation.","Configurable",[943,3057],{"description":3058,"title":3059,"icon":2562},"Expect your branded app published on Google Play and App Store within approximately 4 weeks.","Fast to Market",[857,3061,3062],{},[748,3063,3064,3065,3068],{},"The basic white-label package starts at ",[849,3066,3067],{},"€8,700"," — including the app, marketplace submission for iOS and Android, and initial setup support. Custom features and integrations are scoped separately.",[1173,3070],{},[760,3072,2517],{"id":2516},[2088,3074,3075],{},[748,3076,3077],{},"Our goal was to build a music platform enabling us to charge our customers in a subscription model and as one-off payments. MusicTech Lab's developers were super engaged. Thanks to their effort, we prepared MVP and started working on the marketing. The first biggest technology milestone was achieved during five months.",[748,3079,3080,3083],{},[849,3081,3082],{},"Paweł Przetacznik"," — CIO, IMS S.A",[748,3085,3086],{},[752,3087,3090],{"href":3088,"rel":3089},"https://clutch.co/profile/musictech-lab#review-2063393",[756],"See full review on Clutch",[1173,3092],{},[760,3094,3096],{"id":3095},"faq","FAQ",[934,3098,3100,3104,3108,3112],{"className":3099},[937,938,1649,940,941],[943,3101],{"description":3102,"title":3103},"More than half the world (54%) uses mobile devices, surpassing desktop. Most music consumption happens on mobile — Spotify, YouTube Music, Tidal, Apple Music. Reach your audience where they already are.","Why should I move my business to mobile?",[943,3105],{"description":3106,"title":3107},"Within approximately 4 weeks. The timeline may vary based on customisations. Your app will be fully white-labelled with your logos, colours, and brand elements.","When can I expect my app published?",[943,3109],{"description":3110,"title":3111},"Yes. We start with the core features and customise to your requirements. No need to include every \"nice-to-have\" upfront — we add features iteratively as needed.","Can I adjust the app to my needs?",[943,3113],{"description":3114,"title":3115},"The basic package starts at €8,700 — including the app, marketplace submission, and initial support. Custom features, integrations, and ongoing maintenance are scoped separately.","What does the investment look like?",[1173,3117],{},[760,3119,2829],{"id":2828},[934,3121,3123,3127,3131,3136],{"className":3122},[2833,2834,2244,941],[2836,3124],{"color":2838,"label":3125,"to":3126,"variant":2842,"target":2840},"iOS App","https://apps.apple.com/us/app/closer-music/id1637404510",[2836,3128],{"color":2838,"label":3129,"to":3130,"variant":2842,"target":2840},"Google Play","https://play.google.com/store/apps/details?id=com.closermusic",[2836,3132],{"color":3133,"label":3134,"to":3135,"variant":2842,"target":2840},"neutral","Web Platform","https://www.closermusic.com",[2836,3137],{"color":3133,"label":3138,"to":19,"variant":2842},"Full Platform Case Study",{"title":1252,"searchDepth":1253,"depth":1253,"links":3140},[3141,3142,3143,3144,3145,3146,3147,3148],{"id":2886,"depth":1253,"text":2887},{"id":2909,"depth":1253,"text":2910},{"id":2946,"depth":1253,"text":2947},{"id":2237,"depth":1253,"text":2238},{"id":3036,"depth":1253,"text":3037},{"id":2516,"depth":1253,"text":2517},{"id":3095,"depth":1253,"text":3096},{"id":2828,"depth":1253,"text":2829},{"name":3150,"logo":3151},"Closer Music","/images/logos/closermusic.webp","2023-06-01T00:00:00.000Z","A white-label Flutter mobile app for music catalogs — built for publishers, producers, and music lovers. Audio player, playlists, search, downloads, and offline mode.",{"src":3155},"/images/case-studies/musictechlab_mobile-app-for-music-catalog.webp",{"enabled":1285,"items":3157},[3158,3160,3163,3166],{"text":3159,"icon":2141},"White-label Flutter music app ready for App Store and Google Play in 4 weeks.",{"text":3161,"icon":3162},"Basic package starts at 8,700 EUR including app, store submission, and setup support.","i-lucide-coins",{"text":3164,"icon":3165},"Features include offline downloads, background playback, and advanced search filters.","i-lucide-headphones",{"text":3167,"icon":1140},"Cross-platform codebase with BLoC state management and Hasura GraphQL API.",{},"/blog/case-studies/mobile-app-for-music-catalog",{"title":34,"description":3153},[1264,1309,3172],"mobile","1KZGlKLGCro32dTNOJZFDqpMbdm5t9AkyAlT2rlK7LM",1780305146722]