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/15/2026, 11:18:19 PM

Initial version — all lines are new.

+<style>
+ html, body { height:100%; margin:0; font-family:system-ui,sans-serif; background:#fafafa; color:#111; }
+ .wrap { display:flex; flex-direction:column; align-items:center; justify-content:center; height:100%; gap:1rem; padding:1.5rem; text-align:center; }
+ h1 { margin:0; font-size:1.25rem; max-width:24ch; }
+ .opt { width:100%; max-width:18rem; padding:.75rem 1rem; border-radius:.75rem; border:1px solid #e4e4e7; background:#fff; cursor:pointer; font-weight:500; }
+ .opt.win { border-color:#10b981; }
+ .pct { font-size:.85rem; color:#52525b; }
+</style>
+<div class="wrap">
+ <h1>Tabs or spaces?</h1>
+ <button class="opt" data-i="0">Tabs</button>
+ <button class="opt" data-i="1">Spaces</button>
+ <div class="pct" id="pct"></div>
+</div>
+<script>
+(function(){
+ var counts=[0,0], picked=null;
+ async function load(){
+ try { var s = await window.liveloop.storage.get(); counts = s.counts || [0,0]; picked = (typeof s.picked === 'number') ? s.picked : null; } catch(e){}
+ render();
+ }
+ function render(){
+ var total = counts[0]+counts[1] || 1;
+ document.querySelectorAll('.opt').forEach(function(b,i){
+ var pct = Math.round(100*counts[i]/total);
+ b.textContent = (i===0?'Tabs':'Spaces') + (picked!==null ? ' · '+pct+'%' : '');
+ if (picked===i) b.classList.add('win');
+ });
+ document.getElementById('pct').textContent = picked!==null ? (total+' votes counted') : 'Tap a button to vote.';
+ }
+ document.querySelectorAll('.opt').forEach(function(b){
+ b.addEventListener('click', async function(){
+ if (picked!==null) return;
+ var i = parseInt(b.getAttribute('data-i'),10);
+ counts[i]++; picked = i;
+ try { await window.liveloop.storage.set({ counts: counts, picked: picked }); } catch(e){}
+ render();
+ });
+ });
+ load();
+})();
+</script>

v1Current

@liveloop · 5/15/2026, 11:18:19 PM

Initial version — all lines are new.

+<style>
+ html, body { height:100%; margin:0; font-family:system-ui,sans-serif; background:#fafafa; color:#111; }
+ .wrap { display:flex; flex-direction:column; align-items:center; justify-content:center; height:100%; gap:1rem; padding:1.5rem; text-align:center; }
+ h1 { margin:0; font-size:1.25rem; max-width:24ch; }
+ .opt { width:100%; max-width:18rem; padding:.75rem 1rem; border-radius:.75rem; border:1px solid #e4e4e7; background:#fff; cursor:pointer; font-weight:500; }
+ .opt.win { border-color:#10b981; }
+ .pct { font-size:.85rem; color:#52525b; }
+</style>
+<div class="wrap">
+ <h1>Tabs or spaces?</h1>
+ <button class="opt" data-i="0">Tabs</button>
+ <button class="opt" data-i="1">Spaces</button>
+ <div class="pct" id="pct"></div>
+</div>
+<script>
+(function(){
+ var counts=[0,0], picked=null;
+ async function load(){
+ try { var s = await window.liveloop.storage.get(); counts = s.counts || [0,0]; picked = (typeof s.picked === 'number') ? s.picked : null; } catch(e){}
+ render();
+ }
+ function render(){
+ var total = counts[0]+counts[1] || 1;
+ document.querySelectorAll('.opt').forEach(function(b,i){
+ var pct = Math.round(100*counts[i]/total);
+ b.textContent = (i===0?'Tabs':'Spaces') + (picked!==null ? ' · '+pct+'%' : '');
+ if (picked===i) b.classList.add('win');
+ });
+ document.getElementById('pct').textContent = picked!==null ? (total+' votes counted') : 'Tap a button to vote.';
+ }
+ document.querySelectorAll('.opt').forEach(function(b){
+ b.addEventListener('click', async function(){
+ if (picked!==null) return;
+ var i = parseInt(b.getAttribute('data-i'),10);
+ counts[i]++; picked = i;
+ try { await window.liveloop.storage.set({ counts: counts, picked: picked }); } catch(e){}
+ render();
+ });
+ });
+ load();
+})();
+</script>
← Version history