← back to Consulting Rentv Com
slideshow: deck view of the deliverable at /slideshow (parses /portal into full-screen slides) + Present button; verified 19 slides render, no errors
64a81959f9a35eced71d2de5792d229518163dd7 · 2026-07-26 08:47:24 -0700 · Steve Abrams
Files touched
M build.mjsM public/portal.htmlM public/slideshow.html
Diff
commit 64a81959f9a35eced71d2de5792d229518163dd7
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sun Jul 26 08:47:24 2026 -0700
slideshow: deck view of the deliverable at /slideshow (parses /portal into full-screen slides) + Present button; verified 19 slides render, no errors
---
build.mjs | 1 +
public/portal.html | 1 +
public/slideshow.html | 9 +++++++--
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/build.mjs b/build.mjs
index 81ba964..29846ba 100644
--- a/build.mjs
+++ b/build.mjs
@@ -824,6 +824,7 @@ function initDesk(){
fetch('/portal/videos/heygen-brandfilm.mp4',{method:'HEAD'}).then(function(r){if(r.ok){var v=document.getElementById('heyfilm');v.src='/portal/videos/heygen-brandfilm.mp4';v.play();var p=document.getElementById('heyph');if(p)p.style.display='none';}}).catch(function(){});
document.querySelectorAll('.f5').forEach(function(c){var k=c.getAttribute('data-key'),src='/portal/videos/heygen-'+k+'.mp4';fetch(src,{method:'HEAD'}).then(function(r){if(r.ok){var v=c.querySelector('video');v.src=src;v.play();var p=c.querySelector('.fph');if(p)p.style.display='none';}}).catch(function(){});});
</script>
+<a href="/slideshow" style="position:fixed;bottom:20px;right:20px;z-index:60;background:#c6a765;color:#12100e;font-family:system-ui,-apple-system,sans-serif;font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;padding:11px 18px;border-radius:4px;text-decoration:none;box-shadow:0 8px 24px rgba(0,0,0,.45)">▶ Present</a>
</body></html>`;
writeFileSync(`${OUT}/portal.html`, app);
diff --git a/public/portal.html b/public/portal.html
index 41024c6..f5ab40a 100644
--- a/public/portal.html
+++ b/public/portal.html
@@ -585,4 +585,5 @@ function initDesk(){
fetch('/portal/videos/heygen-brandfilm.mp4',{method:'HEAD'}).then(function(r){if(r.ok){var v=document.getElementById('heyfilm');v.src='/portal/videos/heygen-brandfilm.mp4';v.play();var p=document.getElementById('heyph');if(p)p.style.display='none';}}).catch(function(){});
document.querySelectorAll('.f5').forEach(function(c){var k=c.getAttribute('data-key'),src='/portal/videos/heygen-'+k+'.mp4';fetch(src,{method:'HEAD'}).then(function(r){if(r.ok){var v=c.querySelector('video');v.src=src;v.play();var p=c.querySelector('.fph');if(p)p.style.display='none';}}).catch(function(){});});
</script>
+<a href="/slideshow" style="position:fixed;bottom:20px;right:20px;z-index:60;background:#c6a765;color:#12100e;font-family:system-ui,-apple-system,sans-serif;font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;padding:11px 18px;border-radius:4px;text-decoration:none;box-shadow:0 8px 24px rgba(0,0,0,.45)">▶ Present</a>
</body></html>
\ No newline at end of file
diff --git a/public/slideshow.html b/public/slideshow.html
index 4c9882c..8b22147 100644
--- a/public/slideshow.html
+++ b/public/slideshow.html
@@ -54,7 +54,12 @@
function esc(s){var d=document.createElement('div');d.textContent=s==null?'':String(s);return d.innerHTML;}
function txt(el){return el?el.textContent.replace(/\s+/g,' ').trim():'';}
- fetch('/portal').then(function(r){return r.ok?r.text():Promise.reject(r.status);}).then(function(html){
+ // The deliverable lives at /portal on template-based portals, or at / on the
+ // originals (car-wash, fantasea). Try /portal, fall back to /.
+ var deliverableUrl='/portal';
+ function load(url){return fetch(url).then(function(r){if(!r.ok)return Promise.reject(r.status);deliverableUrl=url;return r.text();});}
+ load('/portal').catch(function(){return load('/');}).then(function(html){
+ var exit=document.querySelector('.exit'); if(exit) exit.href=deliverableUrl;
var doc=new DOMParser().parseFromString(html,'text/html');
var out=[];
// Cover slide from the deliverable's hero (h1 + first hero paragraph) or title.
@@ -110,7 +115,7 @@
if(e.key==='ArrowRight'||e.key===' '||e.key==='PageDown'){e.preventDefault();next();}
else if(e.key==='ArrowLeft'||e.key==='PageUp'){e.preventDefault();prev();}
else if(e.key==='Home'){go(0);} else if(e.key==='End'){go(slides.length-1);}
- else if(e.key==='Escape'){location.href='/portal';}
+ else if(e.key==='Escape'){location.href=deliverableUrl;}
});
// touch swipe
var x0=null;
← aa47540 auto-save: 2026-07-26T08:41:50 (2 files) — server.js public/
·
back to Consulting Rentv Com
·
slideshow: XSS-safe cover head (whitelist br/span sanitizer, 9ae2327 →