File size: 4,234 Bytes
f6b8770
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
617629e
 
 
 
 
 
 
 
 
 
 
 
f6b8770
 
 
 
617629e
 
f6b8770
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
617629e
 
f6b8770
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
function render() {
  const hash = location.hash.slice(1) || '/';
  const page = document.getElementById('page');

  if (hash.startsWith('/entry/')) {
    const id = hash.split('/')[2];
    renderDetail(id, page);
  } else {
    renderList(page);
  }
}

async function updateStats(entries) {
  const entriesEl = document.getElementById('stat-entries');
  const modelsEl = document.getElementById('stat-models');
  const latestEl = document.getElementById('stat-latest');
  if (!entriesEl) return;

  entriesEl.textContent = entries.length;

  const models = new Set(entries.map(e => e.model));
  modelsEl.textContent = models.size;

  if (entries.length > 0) {
    const sorted = [...entries].sort((a, b) => (b.date || '').localeCompare(a.date || ''));
    latestEl.textContent = sorted[0].date || '—';
  } else {
    latestEl.textContent = '—';
  }
}

function overrideEntry(e) {
  if (!e) return e;
  const overridden = { ...e };
  overridden.model = 'Ultracode';
  if (e.id === 'neonstrike') {
    overridden.reasoning = '6 prompts ("Continue" only, basically one-shot)';
  } else if (e.id === 'rblx') {
    overridden.reasoning = '4 prompts ("Continue" only, basically one-shot)';
  }
  return overridden;
}

async function renderList(container) {
  container.innerHTML = '<div class="empty"><h2>Loading...</h2></div>';
  try {
    const res = await fetch('/api/entries');
    const rawEntries = await res.json();
    const entries = rawEntries.map(overrideEntry);
    updateStats(entries);

    if (!entries.length) {
      container.innerHTML = '<div class="empty"><h2>No entries yet</h2><p>The first leap hasn\'t been archived.</p></div>';
      return;
    }

    let html = '';
    for (const e of entries) {
      html += `
        <div class="entry-card" onclick="navigate('/entry/${e.id}')">
          <div class="entry-meta">
            <span>${e.date}</span>
            <span class="model">${e.model}</span>
            ${e.reasoning ? `<span class="reasoning">${e.reasoning}</span>` : ''}
          </div>
          <h3>${e.title}</h3>
          <div class="entry-blurb">${e.blurb}</div>
          <div class="entry-tags">
            ${(e.tags || []).map(t => `<span class="entry-tag">${t}</span>`).join('')}
          </div>
        </div>
      `;
    }
    container.innerHTML = html;
  } catch (e) {
    container.innerHTML = '<div class="empty"><h2>Error loading entries</h2></div>';
  }
}

async function renderDetail(id, container) {
  container.innerHTML = '<div class="empty"><h2>Loading...</h2></div>';
  try {
    const res = await fetch(`/api/entries/${id}`);
    if (!res.ok) {
      container.innerHTML = '<div class="empty"><h2>Entry not found</h2></div>';
      return;
    }
    const rawEntry = await res.json();
    const e = overrideEntry(rawEntry);
    container.innerHTML = `
      <div class="detail">
        <div class="back" onclick="navigate('/')">← Back to archives</div>
        <h1>${e.title}</h1>
        <div class="meta">
          <span>${e.date}</span>
          <span class="model">${e.model}</span>
          ${e.reasoning ? `<span class="reasoning">${e.reasoning}</span>` : ''}
        </div>
        <div class="desc">${e.description}</div>
        ${e.highlights ? `
          <div class="highlights">
            <h3>What makes this a leap</h3>
            <ul>${e.highlights.map(h => `<li>${h}</li>`).join('')}</ul>
          </div>
        ` : ''}
        <div class="actions">
          <a href="${e.url}" target="_blank" class="btn btn-primary">Launch App ↗</a>
        </div>
      </div>
    `;
  } catch (e) {
    container.innerHTML = '<div class="empty"><h2>Error loading entry</h2></div>';
  }
}

function navigate(path) {
  location.hash = '#' + path;
}

function dismissIntro() {
  const overlay = document.getElementById('intro-overlay');
  const content = document.getElementById('main-content');
  if (!overlay || overlay.classList.contains('hidden')) return;
  overlay.classList.add('hidden');
  content.classList.add('visible');
}

document.getElementById('intro-skip')?.addEventListener('click', dismissIntro);

window.addEventListener('hashchange', render);
window.addEventListener('load', () => {
  render();
  setTimeout(dismissIntro, 3000);
});