[object Object]

← back to Studio Zero

5x sweep 1: add favicon (kills 404); render export buttons only when a plan exists

81d51542b21fc06023ceef07224b397fac831a9a · 2026-07-25 11:10:11 -0700 · Steve

Files touched

Diff

commit 81d51542b21fc06023ceef07224b397fac831a9a
Author: Steve <steve@designerwallcoverings.com>
Date:   Sat Jul 25 11:10:11 2026 -0700

    5x sweep 1: add favicon (kills 404); render export buttons only when a plan exists
---
 5x/sweep-1.md     | 11 +++++++++++
 public/index.html | 10 ++++++----
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/5x/sweep-1.md b/5x/sweep-1.md
new file mode 100644
index 0000000..be2c673
--- /dev/null
+++ b/5x/sweep-1.md
@@ -0,0 +1,11 @@
+# 5x sweep 1 — studio-zero (demo mode)
+Target: http://127.0.0.1:4190/  · Result: 4/7 (M1, M3, 2 clickthrough fails)
+
+## Caught + fixed
+1. M3 1 JS error = `/favicon.ico` 404 (no favicon on page). → added inline data-URI SVG favicon.
+2. Clickthrough: "Download plan" + "Copy markdown" click-timeout — the buttons rendered
+   dimmed-but-present (pointer-events:none via .done0) when 0 steps done, so Playwright's
+   click waited 5s. → now those export buttons are only RENDERED when ≥1 step is done
+   (better UX: no inert dead buttons; nothing for clickthrough to hang on).
+3. M1 "fetch failed" — M2/M3/curl all reached the server, so likely a startup race on the
+   first undici fetch. Watching next sweep; will bind explicitly if it recurs.
diff --git a/public/index.html b/public/index.html
index 2f10f11..a320f9f 100644
--- a/public/index.html
+++ b/public/index.html
@@ -4,6 +4,7 @@
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <title>Studio Zero — 0 → monetized AI YouTube channel in 90 days</title>
+<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='7' fill='%230a0a0c'/%3E%3Ccircle cx='16' cy='16' r='8' fill='%23e07b2f'/%3E%3Cpath d='M13 12l7 4-7 4z' fill='%230a0a0c'/%3E%3C/svg%3E">
 <style>
   :root{
     --bg:#0a0a0c; --panel:#121216; --panel2:#17171d; --line:#26262e;
@@ -253,12 +254,13 @@ function renderBar(){
     <span class="prog2" id="autostatus">${running?'<span class="spin"></span> '+esc(autoMsg):done+'/7 steps'}</span>
     <span class="sp"></span>
     <button class="btn ghost sm" id="autoBtn" ${running?'disabled':''}>⚡ Auto-build all 7</button>
-    <button class="btn ghost sm ${done&&!running?'':'done0'}" id="dlBtn">⤓ Download plan</button>
-    <button class="btn ghost sm ${done&&!running?'':'done0'}" id="mdBtn">⧉ Copy markdown</button>`;
+    ${done&&!running?'<button class="btn ghost sm" id="dlBtn">⤓ Download plan</button><button class="btn ghost sm" id="mdBtn">⧉ Copy markdown</button>':''}`;
   $('#pname').onchange=()=>{STATE.name=$('#pname').value.trim()||'Untitled channel';persist();};
   $('#autoBtn').onclick=()=>autoBuildAll();
-  $('#dlBtn').onclick=()=>{ if(!done||running)return; downloadFile('studio-zero-'+slugify(STATE.name)+'.html',planHTML(),'text/html'); toast('Downloaded your channel plan'); };
-  $('#mdBtn').onclick=()=>{ if(!done||running)return; copyText(planMarkdown(),'Copied full plan as Markdown'); };
+  if(done&&!running){
+    $('#dlBtn').onclick=()=>{ downloadFile('studio-zero-'+slugify(STATE.name)+'.html',planHTML(),'text/html'); toast('Downloaded your channel plan'); };
+    $('#mdBtn').onclick=()=>{ copyText(planMarkdown(),'Copied full plan as Markdown'); };
+  }
 }
 function setAuto(m){ autoMsg=m; renderBar(); }
 

← 987c6f9 chore: guard clipboard copy (toast honesty), v0.2.0 (session  ·  back to Studio Zero  ·  5x: REPORT — 2 clean sweeps (favicon + conditional export bu dfe27aa →