← back to Studio Zero
chore: guard clipboard copy (toast honesty), v0.2.0 (session close)
987c6f931a973445a5a9c1527c9c2968e16949d5 · 2026-07-25 11:01:52 -0700 · Steve
Files touched
A VERSIONM public/index.html
Diff
commit 987c6f931a973445a5a9c1527c9c2968e16949d5
Author: Steve <steve@designerwallcoverings.com>
Date: Sat Jul 25 11:01:52 2026 -0700
chore: guard clipboard copy (toast honesty), v0.2.0 (session close)
---
VERSION | 1 +
public/index.html | 8 ++++++--
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..0ea3a94
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.2.0
diff --git a/public/index.html b/public/index.html
index 19f2cfc..2f10f11 100644
--- a/public/index.html
+++ b/public/index.html
@@ -164,6 +164,10 @@ let CFG={liveMode:false,model:'demo',rate:{in:3,out:15}}, PROMPTS=[], STATE=null
const LS_PROJECTS='sz_projects', LS_CAL='sz_cal_prefs';
function toast(m){const t=$('#toast');t.textContent=m;t.classList.add('show');setTimeout(()=>t.classList.remove('show'),1800);}
+function copyText(text,okMsg){
+ if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(text).then(()=>toast(okMsg),()=>toast('Copy failed — clipboard blocked'));
+ else toast('Copy not supported here');
+}
function fmtCost(n){return '$'+Number(n||0).toFixed(4);}
function fmtWhen(iso){try{return new Date(iso).toLocaleString(undefined,{year:'numeric',month:'short',day:'numeric',hour:'numeric',minute:'2-digit'});}catch(e){return iso;}}
function uid(){return 'ch_'+Math.random().toString(36).slice(2,9);}
@@ -254,7 +258,7 @@ function renderBar(){
$('#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; navigator.clipboard.writeText(planMarkdown()); toast('Copied full plan as Markdown'); };
+ $('#mdBtn').onclick=()=>{ if(!done||running)return; copyText(planMarkdown(),'Copied full plan as Markdown'); };
}
function setAuto(m){ autoMsg=m; renderBar(); }
@@ -388,7 +392,7 @@ function renderStep(){
$('#genBtn').onclick=doGenerate;
$('#prevBtn').onclick=()=>{if(cur>0){cur--;renderStep();renderStepper();}};
$('#nextBtn').onclick=()=>{if(cur<6){cur++;renderStep();renderStepper();}};
- $('#copyBtn').onclick=()=>{navigator.clipboard.writeText(STATE.outputs[step.key].text);toast('Copied deliverable');};
+ $('#copyBtn').onclick=()=>{copyText(STATE.outputs[step.key].text,'Copied deliverable');};
}
function updateEst(){
← cceb51d studio-zero: one-click auto-build all 7 steps (chains niche→
·
back to Studio Zero
·
5x sweep 1: add favicon (kills 404); render export buttons o 81d5154 →