Make a record: launching a campaign no longer starts the simulation
Deploy test site / deploy (push) Successful in 52s

After Launch the campaign page opens at day 0 with Play ready; the
artist (or presenter) starts it. The quick "Run the demo campaign" path
behaves the same; only the guided tour presses play itself.
This commit is contained in:
grabowski committed 2026-10-16 09:36:53 +07:00
1 parent e36d7b00a0
commit 83f1aa94dc
1 file changed
+2 -2
+2 -2
View File
@@ -1245,7 +1245,7 @@ function go(s){
if(changed){const y=window.scrollY,top=$("main").getBoundingClientRect().top+y-90;if(y>top)window.scrollTo({top:Math.max(0,top),behavior:TOUR?"smooth":"auto"});}
}
function approve(){if(!canApprove())return;S.gate1=true;go(3);}
function launch(){if(!canLaunch()){if(!S.gate1)go(2);return;}resetCampaign();S.mode="campaign";S.launched=true;S.launchDate=new Date(TODAY);go(5);startSim();renderAll();}
function launch(){if(!canLaunch()){if(!S.gate1)go(2);return;}resetCampaign();S.mode="campaign";S.launched=true;S.launchDate=new Date(TODAY);go(5);renderAll();}
function setFanPrice(v){S.fanPrice=v;if(S.mode==="campaign")resetCampaign();renderAll();}
function setQty(q){S.qty=Math.min(5000,Math.max(100,Math.round(q)));if(S.mode==="direct")resetCampaign();renderAll();}
function syncInputs(){
@@ -1382,7 +1382,7 @@ async function tour(){
await w(900);for(const q of [100,150,200,300,500,700,1000,700,500,300]){setQty(q);await w(280);}await w(2000);
go(4);cap(5,"No money up front: the artist sets the price for fans, and the page works out how many fans are needed: the plant's 100-copy minimum, more if the price is low.");await w(2600);
for(const v of [1000,800,650,550,500,550,650,800,1000,1200]){setFanPrice(v);await w(330);}await w(1800);
S.scen="sell";launch();
S.scen="sell";launch();await w(1200);startSim();renderAll();
cap(6,"A 30-day campaign, simulated. Fan money sits in a separate account until the goal is met; if it is missed, everyone is refunded.");
while(!S.outcome)await w(250);await w(1800);
into("#prodGrid");