<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><meta name="generator" content="Astro v5.17.3"><!-- Font: DM Sans (warm, readable sans) --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&display=swap" rel="stylesheet"><!-- Preload Critical Resources --><link rel="preload" href="/favicon.svg" as="image" type="image/svg+xml"><!-- Primary Meta Tags --><title>Muziboo</title><meta name="title" content="Muziboo"><meta name="description" content="A workshop for real music and real people. Share your sound with people who care about craft — not metrics."><meta name="robots" content="index, follow"><link rel="canonical" href="https://muziboo.com/"><!-- Open Graph / Facebook --><meta property="og:type" content="website"><meta property="og:url" content="https://muziboo.com/"><meta property="og:title" content="Muziboo"><meta property="og:description" content="A workshop for real music and real people. Share your sound with people who care about craft — not metrics."><meta property="og:image" content="https://muziboo.com/logo.png"><meta property="og:site_name" content="Muziboo"><!-- Twitter --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:url" content="https://muziboo.com/"><meta name="twitter:title" content="Muziboo"><meta name="twitter:description" content="A workshop for real music and real people. Share your sound with people who care about craft — not metrics."><meta name="twitter:image" content="https://muziboo.com/logo.png"><!-- PostHog Analytics --><script>(function(){const apiKey = "phc_BA9Y7VerhE1UwLuKt9QLBkFzBtBAlAq7SpnRdqcieth";
const apiHost = "https://eu.i.posthog.com";

	!(function (t, e) {
		var o, n, p, r;
		e.__SV ||
			((window.posthog = e),
			(e._i = []),
			(e.init = function (i, s, a) {
				function g(t, e) {
					var o = e.split(".");
					(2 == o.length && ((t = t[o[0]]), (e = o[1])),
						(t[e] = function () {
							t.push([e].concat(Array.prototype.slice.call(arguments, 0)));
						}));
				}
				(((p = t.createElement("script")).type = "text/javascript"),
					(p.crossOrigin = "anonymous"),
					(p.async = !0),
					(p.src = s.api_host + "/static/array.js"),
					(r = t.getElementsByTagName("script")[0]).parentNode.insertBefore(
						p,
						r
					));
				var u = e;
				for (
					void 0 !== a ? (u = e[a] = []) : (a = "posthog"),
						u.people = u.people || [],
						u.toString = function (t) {
							var e = "posthog";
							return (
								"posthog" !== a && (e += "." + a),
								t || (e += " (stub)"),
								e
							);
						},
						u.people.toString = function () {
							return u.toString(1) + ".people (stub)";
						},
						o =
							"capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys getNextSurveyStep onSessionId".split(
								" "
							),
						n = 0;
					n < o.length;
					n++
				)
					g(u, o[n]);
				e._i.push([i, s, a]);
			}),
			(e.__SV = 1));
	})(document, window.posthog || []);
	posthog.init(apiKey || "", {
		api_host: apiHost || "https://eu.i.posthog.com",
		defaults: "2026-01-30",
	});
})();</script><link rel="stylesheet" href="/_assets/index.CudoeXXh.css"></head> <body class="min-h-screen bg-muziboo-bg text-muziboo-text antialiased"> <a href="#main-content" class="sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-50 focus:px-4 focus:py-2 focus:bg-muziboo-gold focus:text-muziboo-bg focus:rounded-lg focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-muziboo-gold">
Skip to main content
</a>  <header class="w-full py-4 px-4 border-b border-muziboo-border bg-muziboo-bg/95 backdrop-blur sticky top-0 z-50" role="banner"> <nav class="max-w-4xl mx-auto flex items-center justify-between" aria-label="Main navigation"> <a href="/" class="flex items-center gap-3 text-muziboo-gold hover:text-muziboo-gold-muted transition-colors" aria-label="Muziboo — Home"> <img src="/logo.png" alt="" width="40" height="40" class="w-10 h-10 object-contain"> <span class="text-xl font-semibold tracking-tight">muziboo</span> </a> <div class="flex items-center gap-4"> <a href="#features" class="hidden sm:inline text-muziboo-text-muted hover:text-muziboo-gold transition-colors text-sm"> What </a> <a href="#manifesto" class="hidden sm:inline text-muziboo-text-muted hover:text-muziboo-gold transition-colors text-sm"> Manifesto </a> <div class="flex items-center gap-1" role="group" aria-label="Language"> <a href="/" class="px-2 py-1 rounded text-sm font-medium transition-colors text-muziboo-gold bg-muziboo-gold/10" aria-current="true" aria-label="Switch to EN"> EN </a><a href="/de" class="px-2 py-1 rounded text-sm font-medium transition-colors text-muziboo-text-muted hover:text-muziboo-text" aria-label="Switch to DE"> DE </a><a href="/es" class="px-2 py-1 rounded text-sm font-medium transition-colors text-muziboo-text-muted hover:text-muziboo-text" aria-label="Switch to ES"> ES </a> </div> </div> </nav> </header> <main id="main-content" role="main"> <section class="max-w-5xl mx-auto px-4 py-20 md:py-28" aria-labelledby="hero-heading"> <div class="flex flex-col md:flex-row md:items-center md:gap-12 lg:gap-16"> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();</script><script>(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>1/0*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script><astro-island uid="23VWve" prefix="r15" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{}" ssr client="load" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px)"><astro-slot> <div class="flex justify-center md:justify-end mb-8 md:mb-0"> <video src="/hero-logo.m4v" autoplay loop muted playsinline class="w-72 h-72 sm:w-80 sm:h-80 md:w-96 md:h-96 object-contain rounded-lg" aria-hidden="true"></video> </div> </astro-slot></div><!--astro:end--></astro-island> <div class="flex-1 min-w-0 order-1 md:order-2 md:text-left"> <astro-island uid="2v5DJY" prefix="r16" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{}" ssr client="load" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px)"><astro-slot> <h1 id="hero-heading" class="text-4xl md:text-5xl lg:text-6xl font-semibold text-muziboo-text mb-2 tracking-tight"> Real Music.<br>Real People. </h1> </astro-slot></div><!--astro:end--></astro-island> <astro-island uid="Z16aq1E" prefix="r17" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{&quot;delay&quot;:[0,0.15]}" ssr client="load" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px)"><astro-slot> <p class="text-muziboo-text-muted text-lg md:text-xl mt-6 mb-2"> Not a streaming platform.<br> Not a talent show.<br> <span class="text-muziboo-gold">A workshop.</span> </p> </astro-slot></div><!--astro:end--></astro-island> <astro-island uid="ZQwJBy" prefix="r18" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{&quot;delay&quot;:[0,0.25]}" ssr client="load" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px)"><astro-slot> <p class="text-muziboo-text/90 text-base md:text-lg mt-8 mb-4 md:max-w-xl"> Muziboo is a space for hobby musicians, bedroom producers, and anyone who makes music with their own hands. </p> <p class="text-muziboo-gold-muted text-sm md:text-base mb-8"> Share your sound with people who care about craft — not metrics. </p> <div class="mt-6"> <a href="#early-signup" id="hero-cta-btn" class="inline-block bg-muziboo-gold text-muziboo-bg font-semibold px-8 py-3.5 rounded-md hover:bg-muziboo-text hover:text-muziboo-bg transition-colors"> Be one of the first </a> </div> </astro-slot></div><!--astro:end--></astro-island> <astro-island uid="1f5UMk" prefix="r19" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{&quot;delay&quot;:[0,0.35]}" ssr client="load" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px)"><astro-slot> <div class="mt-10 flex gap-2 md:justify-start justify-center" aria-hidden="true"> <span class="w-8 h-10 rounded-sm bg-muziboo-bar-1 opacity-90"></span> <span class="w-8 h-6 rounded-sm bg-muziboo-bar-2 opacity-90"></span> <span class="w-8 h-12 rounded-sm bg-muziboo-bar-3 opacity-90"></span> <span class="w-8 h-14 rounded-sm bg-muziboo-bar-4 opacity-90"></span> <span class="w-8 h-9 rounded-sm bg-muziboo-bar-5 opacity-90"></span> <span class="w-8 h-16 rounded-sm bg-muziboo-bar-6 opacity-90"></span> </div> </astro-slot></div><!--astro:end--></astro-island> </div> </div> </section> <script>
	(function () {
		var ctaBtn = document.getElementById("hero-cta-btn");
		if (ctaBtn) {
			ctaBtn.addEventListener("click", function () {
				try {
					window.posthog?.capture("signup_cta_clicked", {
						location: "hero",
					});
				} catch (err) {
					window.posthog?.captureException(err);
				}
			});
		}
	})();
</script> <section id="features" class="max-w-4xl mx-auto px-4 py-20 md:py-28 border-t border-muziboo-border"> <script>(()=>{var l=(n,t)=>{let i=async()=>{await(await n())()},e=typeof t.value=="object"?t.value:void 0,s={timeout:e==null?void 0:e.timeout};"requestIdleCallback"in window?window.requestIdleCallback(i,s):setTimeout(i,s.timeout||200)};(self.Astro||(self.Astro={})).idle=l;window.dispatchEvent(new Event("astro:idle"));})();</script><astro-island uid="Z24CqdS" prefix="r20" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{&quot;delay&quot;:[0,0.1]}" ssr client="idle" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px)"><astro-slot> <h2 class="text-2xl md:text-3xl font-semibold text-muziboo-gold text-center mb-14"> A workshop, not a stage. </h2> </astro-slot></div><!--astro:end--></astro-island> <div class="grid md:grid-cols-2 gap-8 md:gap-10"> <astro-island uid="VmcRP" prefix="r21" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{&quot;delay&quot;:[0,0.1],&quot;scale&quot;:[0,true]}" ssr client="idle" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px) scale(0.9)"><astro-slot> <article class="p-6 rounded-lg border border-muziboo-border bg-muziboo-bg-softer/50 hover:border-muziboo-gold/30 transition-colors"> <div class="w-10 h-10 rounded flex items-center justify-center mb-4" style="background-color: color-mix(in srgb, var(--muziboo-bar-1) 20%, transparent);"> <span class="w-1.5 h-6 rounded-full opacity-80" style="background: var(--muziboo-bar-1);" aria-hidden="true"></span> </div> <h3 class="text-lg font-semibold text-muziboo-text mb-2"> Upload &amp; Share </h3> <p class="text-muziboo-text-muted text-sm leading-relaxed"> Demos. Fragments. Late-night recordings. Unfinished songs. Share what you are working on with people who actually listen. </p> </article> </astro-slot></div><!--astro:end--></astro-island><astro-island uid="Z1YuWWd" prefix="r22" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{&quot;delay&quot;:[0,0.15000000000000002],&quot;scale&quot;:[0,true]}" ssr client="idle" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px) scale(0.9)"><astro-slot> <article class="p-6 rounded-lg border border-muziboo-border bg-muziboo-bg-softer/50 hover:border-muziboo-gold/30 transition-colors"> <div class="w-10 h-10 rounded flex items-center justify-center mb-4" style="background-color: color-mix(in srgb, var(--muziboo-bar-2) 20%, transparent);"> <span class="w-1.5 h-6 rounded-full opacity-80" style="background: var(--muziboo-bar-2);" aria-hidden="true"></span> </div> <h3 class="text-lg font-semibold text-muziboo-text mb-2"> Human-First Culture </h3> <p class="text-muziboo-text-muted text-sm leading-relaxed"> Every track here begins with a person. Not because we reject technology — but because we believe music starts with intention. </p> </article> </astro-slot></div><!--astro:end--></astro-island><astro-island uid="11aN0O" prefix="r23" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{&quot;delay&quot;:[0,0.2],&quot;scale&quot;:[0,true]}" ssr client="idle" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px) scale(0.9)"><astro-slot> <article class="p-6 rounded-lg border border-muziboo-border bg-muziboo-bg-softer/50 hover:border-muziboo-gold/30 transition-colors"> <div class="w-10 h-10 rounded flex items-center justify-center mb-4" style="background-color: color-mix(in srgb, var(--muziboo-bar-3) 20%, transparent);"> <span class="w-1.5 h-6 rounded-full opacity-80" style="background: var(--muziboo-bar-3);" aria-hidden="true"></span> </div> <h3 class="text-lg font-semibold text-muziboo-text mb-2"> Work in Progress </h3> <p class="text-muziboo-text-muted text-sm leading-relaxed"> Music does not arrive finished. We are building tools that let you show how a song evolves — from first take to final mix. </p> </article> </astro-slot></div><!--astro:end--></astro-island><astro-island uid="1Stn8N" prefix="r24" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{&quot;delay&quot;:[0,0.25],&quot;scale&quot;:[0,true]}" ssr client="idle" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px) scale(0.9)"><astro-slot> <article class="p-6 rounded-lg border border-muziboo-border bg-muziboo-bg-softer/50 hover:border-muziboo-gold/30 transition-colors"> <div class="w-10 h-10 rounded flex items-center justify-center mb-4" style="background-color: color-mix(in srgb, var(--muziboo-bar-4) 20%, transparent);"> <span class="w-1.5 h-6 rounded-full opacity-80" style="background: var(--muziboo-bar-4);" aria-hidden="true"></span> </div> <h3 class="text-lg font-semibold text-muziboo-text mb-2"> Discover Real </h3> <p class="text-muziboo-text-muted text-sm leading-relaxed"> Focused discovery. Transparent timelines. No ranking games. No invisible systems deciding who gets heard. </p> </article> </astro-slot></div><!--astro:end--></astro-island><astro-island uid="Z1B85Bi" prefix="r25" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{&quot;delay&quot;:[0,0.30000000000000004],&quot;scale&quot;:[0,true]}" ssr client="idle" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px) scale(0.9)"><astro-slot> <article class="p-6 rounded-lg border border-muziboo-border bg-muziboo-bg-softer/50 hover:border-muziboo-gold/30 transition-colors"> <div class="w-10 h-10 rounded flex items-center justify-center mb-4" style="background-color: color-mix(in srgb, var(--muziboo-bar-5) 20%, transparent);"> <span class="w-1.5 h-6 rounded-full opacity-80" style="background: var(--muziboo-bar-5);" aria-hidden="true"></span> </div> <h3 class="text-lg font-semibold text-muziboo-text mb-2"> Feedback Threads </h3> <p class="text-muziboo-text-muted text-sm leading-relaxed"> Real conversations about the work. Constructive, public, and grounded in listening — not likes and follows. </p> </article> </astro-slot></div><!--astro:end--></astro-island><astro-island uid="Z1YW1nY" prefix="r26" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{&quot;delay&quot;:[0,0.35],&quot;scale&quot;:[0,true]}" ssr client="idle" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px) scale(0.9)"><astro-slot> <article class="p-6 rounded-lg border border-muziboo-border bg-muziboo-bg-softer/50 hover:border-muziboo-gold/30 transition-colors"> <div class="w-10 h-10 rounded flex items-center justify-center mb-4" style="background-color: color-mix(in srgb, var(--muziboo-bar-6) 20%, transparent);"> <span class="w-1.5 h-6 rounded-full opacity-80" style="background: var(--muziboo-bar-6);" aria-hidden="true"></span> </div> <h3 class="text-lg font-semibold text-muziboo-text mb-2"> Your Space </h3> <p class="text-muziboo-text-muted text-sm leading-relaxed"> Build your catalog. Tell your story. A profile that reflects your journey — not an engagement strategy. </p> </article> </astro-slot></div><!--astro:end--></astro-island> </div> </section> <section id="manifesto" class="max-w-3xl mx-auto px-4 py-20 md:py-28 border-t border-muziboo-border" aria-labelledby="manifesto-title"> <astro-island uid="Z2a8uoW" prefix="r27" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{}" ssr client="idle" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px)"><astro-slot> <h2 id="manifesto-title" class="text-xl md:text-2xl font-semibold text-muziboo-gold mb-12 text-center"> Muziboo Manifesto — 2026 </h2> </astro-slot></div><!--astro:end--></astro-island> <div class="prose prose-invert max-w-none prose-p:text-muziboo-text/95"> <astro-island uid="1HVIVb" prefix="r28" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{&quot;delay&quot;:[0,0.1]}" ssr client="idle" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px)"><astro-slot> <div class="space-y-4 text-muziboo-text/95 text-base md:text-lg leading-normal"> <p class="m-0">The internet was not built for perfection. It was built for participation.</p><p class="m-0">Before streams were counted and feeds were ranked, people shared what they were working on. Demos. Fragments. Late-night recordings. Unfinished songs.</p><p class="m-0">Music was conversation.</p><p class="m-0">Muziboo is a home for that conversation.</p><p class="m-0">We believe music is not content. It is craft.</p><p class="m-0">It is the sound of someone trying. Learning. Improving. Connecting.</p><p class="m-0">We are not here for virality. We are not here for metrics. We are not here for shortcuts.</p><p class="m-0">We are here for musicians who make music because they must.</p><p class="m-0">Bedroom producers. Garage bands. Choir singers. Guitarists who started last month. Drummers who have been playing for thirty years.</p><p class="m-0">Every note here was played by someone who cared enough to try.</p><p class="m-0">No ranking games. No artificial amplification. No invisible systems deciding who gets heard.</p><p class="m-0">Chronological. Transparent. Human.</p><p class="m-0">Muziboo is not a stage.</p><p class="m-0">It is a workshop. A rehearsal room. A community hall. A place where imperfect things are welcome.</p><p class="m-0">Because music does not begin polished.</p><p class="m-0">It begins with people.</p><p class="m-0">And people are enough.</p> </div> </astro-slot></div><!--astro:end--></astro-island> </div> </section> <section id="early-signup" class="max-w-xl mx-auto px-4 py-20 border-t border-muziboo-border" aria-labelledby="signup-title"> <astro-island uid="Z1lUCwv" prefix="r29" component-url="/_assets/ScrollReveal.Dpy_evvB.js" component-export="default" renderer-url="/_assets/client.Dc9Vh3na.js" props="{}" ssr client="idle" opts="{&quot;name&quot;:&quot;ScrollReveal&quot;,&quot;value&quot;:true}" await-children><div style="opacity:0;transform:translateY(50px)"><astro-slot> <div class="bg-muziboo-bg p-8 rounded-lg border border-muziboo-border text-center"> <h2 id="signup-title" class="text-xl md:text-2xl font-semibold text-muziboo-gold mb-6"> Join the Waitlist </h2> <div id="signup-form-container"> <form class="space-y-4 text-left" id="signup-form" action="#" method="POST"> <div> <label for="name" class="block text-sm font-medium text-muziboo-text-muted mb-1">Name</label> <input type="text" id="name" name="name" required class="w-full bg-muziboo-bg border border-muziboo-border rounded-md px-4 py-2 text-muziboo-text focus:outline-none focus:ring-2 focus:ring-muziboo-gold"> </div> <div> <label for="email" class="block text-sm font-medium text-muziboo-text-muted mb-1">Email Address</label> <input type="email" id="email" name="email" required class="w-full bg-muziboo-bg border border-muziboo-border rounded-md px-4 py-2 text-muziboo-text focus:outline-none focus:ring-2 focus:ring-muziboo-gold"> </div> <div> <label for="message" class="block text-sm font-medium text-muziboo-text-muted mb-1">What do you play? Tell us more... (Optional)</label> <textarea id="message" name="message" rows="3" class="w-full bg-muziboo-bg border border-muziboo-border rounded-md px-4 py-2 text-muziboo-text focus:outline-none focus:ring-2 focus:ring-muziboo-gold resize-none"></textarea> </div> <button type="submit" class="w-full bg-muziboo-gold text-muziboo-bg font-semibold py-3 rounded-md hover:opacity-90 transition-opacity mt-4"> Submit </button> </form> </div> <div id="signup-success-message" class="hidden py-10 fade-in"> <div class="inline-flex justify-center items-center w-16 h-16 rounded-full bg-muziboo-border mb-6"> <svg class="w-8 h-8 text-muziboo-gold" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> </svg> </div> <h3 class="text-2xl font-semibold text-muziboo-gold mb-3"> Thank you! </h3> <p class="text-muziboo-text/90 text-lg"> You&#39;ve been added to the list. We will be in touch soon. </p> </div> </div> </astro-slot></div><!--astro:end--></astro-island> </section> <script>
	(function () {
		var signupForm = document.getElementById("signup-form");
		var formContainer = document.getElementById("signup-form-container");
		var successMessage = document.getElementById("signup-success-message");

		if (!signupForm) return;

		signupForm.addEventListener("submit", function (e) {
			e.preventDefault();

			var nameInput = signupForm.querySelector('input[name="name"]');
			var emailInput = signupForm.querySelector('input[name="email"]');
			var messageInput = signupForm.querySelector('textarea[name="message"]');
			var email = emailInput ? emailInput.value.trim() : "";
			var name = nameInput ? nameInput.value.trim() : "";
			var message = messageInput ? messageInput.value.trim() : "";

			// Show success screen immediately — don't wait on PostHog
			if (formContainer && successMessage) {
				formContainer.style.display = "none";
				successMessage.classList.remove("hidden");
				successMessage.classList.add("animate-fade-in");
			}

			// Send to PostHog — works even if called before PostHog fully loads
			// because the stub queues calls made before initialisation completes
			function sendToPostHog() {
				try {
					if (email) {
						window.posthog.identify(email, {
							name: name || undefined,
							email: email,
						});
					}
					window.posthog.capture("signup_form_submitted", {
						name: name,
						email: email,
						message: message,
						has_message: !!message,
					});
				} catch (err) {
					// silently fail if posthog isn't available
				}
			}

			// If posthog is already available and initialised, send immediately
			// otherwise wait up to 3s for it to load
			if (window.posthog && window.posthog.__loaded) {
				sendToPostHog();
			} else {
				var attempts = 0;
				var interval = setInterval(function () {
					attempts++;
					if (window.posthog && window.posthog.__loaded) {
						clearInterval(interval);
						sendToPostHog();
					} else if (attempts > 30) {
						// 3 seconds passed — try anyway (stub will queue it)
						clearInterval(interval);
						sendToPostHog();
					}
				}, 100);
			}
		});
	})();
</script> </main> <footer class="w-full py-6 px-4 bg-muziboo-bg" role="contentinfo"> <div class="max-w-5xl mx-auto flex flex-col sm:flex-row items-center justify-between gap-4 text-sm"> <div class="flex items-center gap-2 text-muziboo-text-muted tracking-wide"> <span class="text-muziboo-text font-semibold tracking-tight">muziboo</span> <span aria-hidden="true">·</span> <span>EST. 2007</span> <span aria-hidden="true">·</span> <span>REBORN 2026</span> </div> <nav class="flex items-center gap-6 text-muziboo-text-muted uppercase tracking-widest" aria-label="Footer"> <a href="https://www.facebook.com/muziboo" target="_blank" rel="noopener noreferrer" class="hover:text-muziboo-gold transition-colors">FACEBOOK</a> <a href="#" class="hover:text-muziboo-gold transition-colors">PRIVACY</a> <a href="#" class="hover:text-muziboo-gold transition-colors">TERMS</a> </nav> <div class="text-muziboo-text-muted uppercase tracking-widest"> © 2026 MUZIBOO </div> </div> </footer>  </body></html>