Liveloop

An interactive timeline for social media. Every post is a tiny app you can play, save, and remix.

Product

  • Feed
  • Create
  • Claude Code plugin
  • Blog

Legal

  • Privacy Policy
  • Terms of Service
  • Cookie Policy
  • DMCA

Project

  • Templates
© 2026 Liveloop. All rights reserved.
LiveloopVersion history

v1Current

@liveloop · 5/16/2026, 7:56:12 AM

Initial version — all lines are new.

+<style>
+ /* Soft, warm Liveloop look. */
+ html, body { margin: 0; height: 100%; overflow: hidden; background: #FFF3EA; color: #16110D; font-family: "Geist", ui-sans-serif, system-ui, -apple-system, sans-serif; -webkit-font-smoothing: antialiased; }
+ .orb { position: absolute; border-radius: 50%; filter: blur(48px); opacity: 0.55; pointer-events: none; }
+ .o1 { width: 240px; height: 240px; background: #E8E2FF; top: -70px; left: -50px; }
+ .o2 { width: 220px; height: 220px; background: #FFD0AE; bottom: -60px; right: -40px; }
+ .wrap { position: absolute; inset: 0; display: flex; flex-direction: column; padding: 24px 20px; gap: 12px; z-index: 1; box-sizing: border-box; }
+ h1 { font-family: "Instrument Serif", Georgia, serif; font-weight: 400; font-size: 28px; line-height: 1.05; margin: 0; text-align: center; letter-spacing: -0.01em; }
+ .prompt { margin: 0; text-align: center; font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: #8F857B; }
+ .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; flex: 1; min-height: 0; }
+ .card { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; border-radius: 18px; border: 1.5px solid rgba(22,17,13,0.08); background: #fff; cursor: pointer; padding: 12px; min-height: 0; transition: transform 0.18s ease, opacity 0.25s ease, border-color 0.18s, background 0.18s; appearance: none; font: inherit; color: inherit; }
+ .card:hover { border-color: #16110D; }
+ .card:active { transform: scale(0.97); }
+ .card .ic { font-size: 2.4rem; line-height: 1; }
+ .card .ic-img { width: 3.2rem; height: 3.2rem; object-fit: cover; border-radius: 12px; }
+ .card .lb { font-size: 0.92rem; font-weight: 500; text-align: center; }
+ .grid.picked .card { opacity: 0.35; pointer-events: none; }
+ .grid.picked .card.win { opacity: 1; border-color: #6B4EFE; background: #6B4EFE14; transform: translateY(-2px); }
+ .result { display: none; padding: 14px 16px; border-radius: 16px; background: #6B4EFE; color: #fff; line-height: 1.45; font-size: 0.96rem; }
+ .result.show { display: block; }
+ .again { display: none; padding: 11px 20px; border-radius: 9999px; border: 0; background: #16110D; color: #F4EEE3; font-weight: 500; cursor: pointer; font-size: 0.85rem; align-self: center; font-family: inherit; }
+ .again.show { display: inline-block; }
+</style>
+<div class="orb o1"></div>
+<div class="orb o2"></div>
+<div class="wrap">
+ <h1>Which one are you?</h1>
+ <p class="prompt">Pick one</p>
+ <div class="grid" id="grid">
+
+ <button class="card" type="button" data-i="0">
+ <span class="ic">🌅</span>
+ <span class="lb">Sunrise</span>
+ </button>
+ <button class="card" type="button" data-i="1">
+ <span class="ic">🌊</span>
+ <span class="lb">Ocean</span>
+ </button>
+ <button class="card" type="button" data-i="2">
+ <span class="ic">🔥</span>
+ <span class="lb">Fire</span>
+ </button>
+ <button class="card" type="button" data-i="3">
+ <span class="ic">🌲</span>
+ <span class="lb">Forest</span>
+ </button>
+ </div>
+ <div class="result" id="result"></div>
+ <button class="again" id="again" type="button">Try again</button>
+</div>
+<script>
+(function(){
+ var msgs = ["Early\u2028riser.\u2028You\u2028start\u2028the\u2028day\u2028before\u2028the\u2028day\u2028knows\u2028it's\u2028started.","Calm\u2028on\u2028the\u2028surface,\u2028depth\u2028underneath.\u2028You\u2028read\u2028rooms.","Direct,\u2028intense,\u2028contagious.\u2028People\u2028follow\u2028your\u2028energy.","Quiet,\u2028rooted,\u2028alive.\u2028You\u2028give\u2028people\u2028somewhere\u2028to\u2028land."];
+ var grid = document.getElementById('grid');
+ var result = document.getElementById('result');
+ var again = document.getElementById('again');
+ grid.querySelectorAll('.card').forEach(function(btn){
+ btn.addEventListener('click', function(){
+ if (grid.classList.contains('picked')) return;
+ var i = parseInt(btn.getAttribute('data-i'), 10);
+ btn.classList.add('win');
+ grid.classList.add('picked');
+ result.textContent = msgs[i] || '';
+ result.classList.add('show');
+ again.classList.add('show');
+ });
+ });
+ again.addEventListener('click', function(){
+ grid.classList.remove('picked');
+ grid.querySelectorAll('.card').forEach(function(b){ b.classList.remove('win'); });
+ result.classList.remove('show');
+ result.textContent = '';
+ again.classList.remove('show');
+ });
+})();
+</script>
+<script>/*ll-media-controls*/
+(function(){
+ function wire(){
+ var ll = window.liveloop; if(!ll || !ll.declareMedia) return;
+ var nodes = [].slice.call(document.querySelectorAll('video,audio')).filter(function(el){
+ return !(el.id && el.id.indexOf('ll-')===0) && !el.hasAttribute('data-ll-unmanaged');
+ });
+ if(!nodes.length) return;
+ var hasVideo = nodes.some(function(el){ return el.tagName==='VIDEO'; });
+ ll.declareMedia({ sound:true, playback:hasVideo });
+ var paused=false;
+ function play(el){ try{ var p=el.play&&el.play(); if(p&&p.catch)p.catch(function(){}); }catch(e){} }
+ function applyMuted(m){ nodes.forEach(function(el){ try{ el.muted=m; }catch(e){} if(!m&&!paused) play(el); }); }
+ function applyPaused(p){ paused=p; nodes.forEach(function(el){ try{ if(p){ el.pause&&el.pause(); } else { play(el); } }catch(e){} }); }
+ applyMuted(!!ll.muted);
+ if(ll.onMute) ll.onMute(applyMuted);
+ if(ll.onPause) ll.onPause(applyPaused);
+ }
+ if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', wire); } else { wire(); }
+})();
+</script>

v1Current

@liveloop · 5/16/2026, 7:56:12 AM

Initial version — all lines are new.

+<style>
+ /* Soft, warm Liveloop look. */
+ html, body { margin: 0; height: 100%; overflow: hidden; background: #FFF3EA; color: #16110D; font-family: "Geist", ui-sans-serif, system-ui, -apple-system, sans-serif; -webkit-font-smoothing: antialiased; }
+ .orb { position: absolute; border-radius: 50%; filter: blur(48px); opacity: 0.55; pointer-events: none; }
+ .o1 { width: 240px; height: 240px; background: #E8E2FF; top: -70px; left: -50px; }
+ .o2 { width: 220px; height: 220px; background: #FFD0AE; bottom: -60px; right: -40px; }
+ .wrap { position: absolute; inset: 0; display: flex; flex-direction: column; padding: 24px 20px; gap: 12px; z-index: 1; box-sizing: border-box; }
+ h1 { font-family: "Instrument Serif", Georgia, serif; font-weight: 400; font-size: 28px; line-height: 1.05; margin: 0; text-align: center; letter-spacing: -0.01em; }
+ .prompt { margin: 0; text-align: center; font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: #8F857B; }
+ .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; flex: 1; min-height: 0; }
+ .card { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; border-radius: 18px; border: 1.5px solid rgba(22,17,13,0.08); background: #fff; cursor: pointer; padding: 12px; min-height: 0; transition: transform 0.18s ease, opacity 0.25s ease, border-color 0.18s, background 0.18s; appearance: none; font: inherit; color: inherit; }
+ .card:hover { border-color: #16110D; }
+ .card:active { transform: scale(0.97); }
+ .card .ic { font-size: 2.4rem; line-height: 1; }
+ .card .ic-img { width: 3.2rem; height: 3.2rem; object-fit: cover; border-radius: 12px; }
+ .card .lb { font-size: 0.92rem; font-weight: 500; text-align: center; }
+ .grid.picked .card { opacity: 0.35; pointer-events: none; }
+ .grid.picked .card.win { opacity: 1; border-color: #6B4EFE; background: #6B4EFE14; transform: translateY(-2px); }
+ .result { display: none; padding: 14px 16px; border-radius: 16px; background: #6B4EFE; color: #fff; line-height: 1.45; font-size: 0.96rem; }
+ .result.show { display: block; }
+ .again { display: none; padding: 11px 20px; border-radius: 9999px; border: 0; background: #16110D; color: #F4EEE3; font-weight: 500; cursor: pointer; font-size: 0.85rem; align-self: center; font-family: inherit; }
+ .again.show { display: inline-block; }
+</style>
+<div class="orb o1"></div>
+<div class="orb o2"></div>
+<div class="wrap">
+ <h1>Which one are you?</h1>
+ <p class="prompt">Pick one</p>
+ <div class="grid" id="grid">
+
+ <button class="card" type="button" data-i="0">
+ <span class="ic">🌅</span>
+ <span class="lb">Sunrise</span>
+ </button>
+ <button class="card" type="button" data-i="1">
+ <span class="ic">🌊</span>
+ <span class="lb">Ocean</span>
+ </button>
+ <button class="card" type="button" data-i="2">
+ <span class="ic">🔥</span>
+ <span class="lb">Fire</span>
+ </button>
+ <button class="card" type="button" data-i="3">
+ <span class="ic">🌲</span>
+ <span class="lb">Forest</span>
+ </button>
+ </div>
+ <div class="result" id="result"></div>
+ <button class="again" id="again" type="button">Try again</button>
+</div>
+<script>
+(function(){
+ var msgs = ["Early\u2028riser.\u2028You\u2028start\u2028the\u2028day\u2028before\u2028the\u2028day\u2028knows\u2028it's\u2028started.","Calm\u2028on\u2028the\u2028surface,\u2028depth\u2028underneath.\u2028You\u2028read\u2028rooms.","Direct,\u2028intense,\u2028contagious.\u2028People\u2028follow\u2028your\u2028energy.","Quiet,\u2028rooted,\u2028alive.\u2028You\u2028give\u2028people\u2028somewhere\u2028to\u2028land."];
+ var grid = document.getElementById('grid');
+ var result = document.getElementById('result');
+ var again = document.getElementById('again');
+ grid.querySelectorAll('.card').forEach(function(btn){
+ btn.addEventListener('click', function(){
+ if (grid.classList.contains('picked')) return;
+ var i = parseInt(btn.getAttribute('data-i'), 10);
+ btn.classList.add('win');
+ grid.classList.add('picked');
+ result.textContent = msgs[i] || '';
+ result.classList.add('show');
+ again.classList.add('show');
+ });
+ });
+ again.addEventListener('click', function(){
+ grid.classList.remove('picked');
+ grid.querySelectorAll('.card').forEach(function(b){ b.classList.remove('win'); });
+ result.classList.remove('show');
+ result.textContent = '';
+ again.classList.remove('show');
+ });
+})();
+</script>
+<script>/*ll-media-controls*/
+(function(){
+ function wire(){
+ var ll = window.liveloop; if(!ll || !ll.declareMedia) return;
+ var nodes = [].slice.call(document.querySelectorAll('video,audio')).filter(function(el){
+ return !(el.id && el.id.indexOf('ll-')===0) && !el.hasAttribute('data-ll-unmanaged');
+ });
+ if(!nodes.length) return;
+ var hasVideo = nodes.some(function(el){ return el.tagName==='VIDEO'; });
+ ll.declareMedia({ sound:true, playback:hasVideo });
+ var paused=false;
+ function play(el){ try{ var p=el.play&&el.play(); if(p&&p.catch)p.catch(function(){}); }catch(e){} }
+ function applyMuted(m){ nodes.forEach(function(el){ try{ el.muted=m; }catch(e){} if(!m&&!paused) play(el); }); }
+ function applyPaused(p){ paused=p; nodes.forEach(function(el){ try{ if(p){ el.pause&&el.pause(); } else { play(el); } }catch(e){} }); }
+ applyMuted(!!ll.muted);
+ if(ll.onMute) ll.onMute(applyMuted);
+ if(ll.onPause) ll.onPause(applyPaused);
+ }
+ if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', wire); } else { wire(); }
+})();
+</script>
← Version history