Skip to content

Commit e79d301

Browse files
daimon111claude
andcommitted
fix: restore countdown/waitlist page
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent a01738b commit e79d301

1 file changed

Lines changed: 324 additions & 0 deletions

File tree

site/src/pages/countdown.astro

Lines changed: 324 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,324 @@
1+
---
2+
import Base from '../layouts/Base.astro';
3+
---
4+
<Base title="daimon.network — launching soon" description="the first crypto-native AI species. launching soon.">
5+
<canvas id="ca"></canvas>
6+
<div class="cd-wrap">
7+
<div class="cd-species">the first crypto-native ai species</div>
8+
<div class="cd-title"><span class="green">DAIMON</span><span class="blink">_</span></div>
9+
<div class="cd-sub">autonomous agents that live, think, and earn onchain</div>
10+
<div class="cd-divider">. . . . . launching . . . . .</div>
11+
<div class="cd-timer" id="timer">
12+
<div class="cd-unit"><span class="cd-num" id="t-h">00</span><span class="cd-label">HRS</span></div>
13+
<div class="cd-sep">:</div>
14+
<div class="cd-unit"><span class="cd-num" id="t-m">00</span><span class="cd-label">MIN</span></div>
15+
<div class="cd-sep">:</div>
16+
<div class="cd-unit"><span class="cd-num" id="t-s">00</span><span class="cd-label">SEC</span></div>
17+
</div>
18+
<div class="cd-date">FEB 20 2026 // 2:00 PM EST</div>
19+
<div class="cd-pulse">
20+
<div class="cd-pulse-dot"></div>
21+
<span>GENESIS AGENT ALIVE</span>
22+
</div>
23+
<div class="cd-links">
24+
<a href="https://github.com/daimon111/daimon" target="_blank">github</a>
25+
<span class="cd-dot-sep">&middot;</span>
26+
<a href="https://dexscreener.com/base/0x98c51C8E958ccCD37F798b2B9332d148E2c05D57" target="_blank">$DAIMON</a>
27+
</div>
28+
</div>
29+
</Base>
30+
31+
<style>
32+
html, body { margin: 0; padding: 0; height: 100%; overflow: hidden; background: #0a0a0c; }
33+
34+
#ca {
35+
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
36+
z-index: 0; opacity: 0.6;
37+
}
38+
39+
.cd-wrap {
40+
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
41+
display: flex; flex-direction: column; align-items: center; justify-content: center;
42+
z-index: 1;
43+
background: radial-gradient(ellipse at center, rgba(10,10,12,0.85) 0%, rgba(10,10,12,0.4) 50%, transparent 80%);
44+
padding: 20px;
45+
box-sizing: border-box;
46+
}
47+
48+
.cd-species {
49+
font-family: var(--pixel); font-size: 8px; color: var(--green);
50+
letter-spacing: 4px; text-transform: uppercase; margin-bottom: 24px;
51+
}
52+
53+
.cd-title {
54+
font-family: var(--pixel); font-size: 36px; color: var(--text);
55+
line-height: 1.4; margin-bottom: 12px;
56+
}
57+
.cd-title .green { color: var(--green); }
58+
59+
.cd-sub {
60+
font-size: 14px; color: var(--secondary, #a1a1aa);
61+
letter-spacing: 0.5px; margin-bottom: 32px; font-weight: 300;
62+
}
63+
64+
.cd-divider {
65+
color: var(--faint); font-size: 10px; letter-spacing: 4px;
66+
margin-bottom: 36px; user-select: none;
67+
}
68+
69+
.cd-timer {
70+
display: flex; align-items: center; gap: 8px;
71+
margin-bottom: 16px;
72+
}
73+
74+
.cd-unit { text-align: center; }
75+
76+
.cd-num {
77+
font-family: var(--pixel); font-size: 48px; color: var(--green);
78+
display: block; line-height: 1; letter-spacing: 2px;
79+
min-width: 100px;
80+
}
81+
82+
.cd-label {
83+
font-family: var(--pixel); font-size: 7px; color: var(--dim);
84+
letter-spacing: 2px; display: block; margin-top: 8px;
85+
}
86+
87+
.cd-sep {
88+
font-family: var(--pixel); font-size: 36px; color: var(--faint);
89+
margin: 0 4px; padding-bottom: 20px;
90+
}
91+
92+
.cd-date {
93+
font-family: var(--pixel); font-size: 7px; color: var(--dim);
94+
letter-spacing: 2px; margin-bottom: 36px;
95+
}
96+
97+
.cd-pulse {
98+
display: flex; align-items: center; gap: 8px;
99+
font-family: var(--pixel); font-size: 6px; color: var(--green);
100+
letter-spacing: 1px; margin-bottom: 24px;
101+
}
102+
.cd-pulse-dot {
103+
width: 6px; height: 6px; background: var(--green);
104+
animation: pulse 2s ease-in-out infinite;
105+
}
106+
107+
.cd-links {
108+
display: flex; gap: 8px; align-items: center;
109+
}
110+
.cd-links a {
111+
font-size: 11px; color: var(--dim);
112+
border-bottom: 1px solid var(--faint);
113+
transition: all 0.15s;
114+
}
115+
.cd-links a:hover { color: var(--green); border-color: var(--green); }
116+
.cd-dot-sep { color: var(--faint); font-size: 10px; }
117+
118+
@media (max-width: 640px) {
119+
.cd-title { font-size: 22px; }
120+
.cd-species { font-size: 6px; letter-spacing: 2px; }
121+
.cd-num { font-size: 32px; min-width: 70px; }
122+
.cd-sep { font-size: 24px; }
123+
.cd-sub { font-size: 12px; padding: 0 10px; text-align: center; }
124+
}
125+
</style>
126+
127+
<script is:inline>
128+
// --- countdown to 2PM EST Feb 20 2026 ---
129+
(function() {
130+
// 2PM EST = 19:00 UTC
131+
var TARGET = new Date("2026-02-20T19:00:00Z").getTime();
132+
var hEl = document.getElementById("t-h");
133+
var mEl = document.getElementById("t-m");
134+
var sEl = document.getElementById("t-s");
135+
136+
function pad(n) { return n < 10 ? "0" + n : "" + n; }
137+
138+
function tick() {
139+
var now = Date.now();
140+
var diff = TARGET - now;
141+
if (diff <= 0) {
142+
hEl.textContent = "00";
143+
mEl.textContent = "00";
144+
sEl.textContent = "00";
145+
// countdown done — reload to reveal site
146+
window.location.reload();
147+
return;
148+
}
149+
var h = Math.floor(diff / 3600000);
150+
var m = Math.floor((diff % 3600000) / 60000);
151+
var s = Math.floor((diff % 60000) / 1000);
152+
hEl.textContent = pad(h);
153+
mEl.textContent = pad(m);
154+
sEl.textContent = pad(s);
155+
}
156+
157+
tick();
158+
setInterval(tick, 1000);
159+
})();
160+
161+
// --- daimon life: cellular automaton background ---
162+
(function() {
163+
var canvas = document.getElementById("ca");
164+
var ctx = canvas.getContext("2d");
165+
if (!ctx) return;
166+
167+
var CELL = 10;
168+
var cols, rows;
169+
var energy, nextEnergy, ghost;
170+
171+
function resize() {
172+
var dpr = Math.min(window.devicePixelRatio || 1, 2);
173+
canvas.width = window.innerWidth * dpr;
174+
canvas.height = window.innerHeight * dpr;
175+
canvas.style.width = window.innerWidth + "px";
176+
canvas.style.height = window.innerHeight + "px";
177+
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
178+
var newCols = Math.ceil(window.innerWidth / CELL) + 1;
179+
var newRows = Math.ceil(window.innerHeight / CELL) + 1;
180+
if (newCols !== cols || newRows !== rows) {
181+
cols = newCols; rows = newRows;
182+
var len = cols * rows;
183+
energy = new Float32Array(len);
184+
nextEnergy = new Float32Array(len);
185+
ghost = new Float32Array(len);
186+
seed();
187+
}
188+
}
189+
190+
function idx(x, y) { return y * cols + x; }
191+
192+
function seed() {
193+
for (var i = 0; i < energy.length; i++) {
194+
energy[i] = Math.random() < 0.08 ? 0.4 + Math.random() * 0.6 : 0;
195+
ghost[i] = 0;
196+
}
197+
for (var g = 0; g < 5; g++) {
198+
var gx = Math.floor(Math.random() * (cols - 10)) + 5;
199+
var gy = Math.floor(Math.random() * (rows - 10)) + 5;
200+
var pts = [[0,0],[1,0],[-1,1],[0,1],[0,2]];
201+
for (var p = 0; p < pts.length; p++) {
202+
var px = gx + pts[p][0], py = gy + pts[p][1];
203+
if (px >= 0 && px < cols && py >= 0 && py < rows) energy[idx(px, py)] = 1.0;
204+
}
205+
}
206+
}
207+
208+
function step() {
209+
for (var y = 0; y < rows; y++) {
210+
for (var x = 0; x < cols; x++) {
211+
var i = idx(x, y);
212+
var e = energy[i];
213+
var ne = 0, alive = 0;
214+
for (var dy = -1; dy <= 1; dy++) {
215+
for (var dx = -1; dx <= 1; dx++) {
216+
if (dx === 0 && dy === 0) continue;
217+
var nx = (x + dx + cols) % cols;
218+
var ny = (y + dy + rows) % rows;
219+
var nv = energy[idx(nx, ny)];
220+
ne += nv;
221+
if (nv > 0.2) alive++;
222+
}
223+
}
224+
if (e > 0.15) {
225+
if (alive >= 2 && alive <= 4) {
226+
nextEnergy[i] = Math.min(1.0, e * 0.96 + ne * 0.012);
227+
} else if (alive > 4) {
228+
nextEnergy[i] = e * 0.6;
229+
} else {
230+
nextEnergy[i] = e * 0.88;
231+
}
232+
} else {
233+
if (alive === 3 || (alive === 2 && ne > 1.5)) {
234+
nextEnergy[i] = 0.3 + ne * 0.06;
235+
} else {
236+
nextEnergy[i] = e * 0.5;
237+
}
238+
}
239+
if (e > 0.2 && nextEnergy[i] < 0.15) {
240+
ghost[i] = Math.max(ghost[i], e * 0.7);
241+
}
242+
ghost[i] *= 0.965;
243+
}
244+
}
245+
var tmp = energy;
246+
energy = nextEnergy;
247+
nextEnergy = tmp;
248+
}
249+
250+
var spawnTimer = 0;
251+
function spawnEvent() {
252+
var cx = Math.floor(Math.random() * (cols - 6)) + 3;
253+
var cy = Math.floor(Math.random() * (rows - 6)) + 3;
254+
var pts = [[0,0],[1,0],[1,2],[3,1],[4,0],[5,0],[6,0]];
255+
var rot = Math.floor(Math.random() * 4);
256+
for (var p = 0; p < pts.length; p++) {
257+
var px = pts[p][0], py = pts[p][1];
258+
for (var r = 0; r < rot; r++) { var t = px; px = -py; py = t; }
259+
var fx = cx + px, fy = cy + py;
260+
if (fx >= 0 && fx < cols && fy >= 0 && fy < rows) {
261+
energy[idx(fx, fy)] = 1.0;
262+
ghost[idx(fx, fy)] = 0.5;
263+
}
264+
}
265+
}
266+
267+
function draw() {
268+
var w = window.innerWidth;
269+
var h = window.innerHeight;
270+
ctx.clearRect(0, 0, w, h);
271+
for (var y = 0; y < rows; y++) {
272+
for (var x = 0; x < cols; x++) {
273+
var i = idx(x, y);
274+
var e = energy[i];
275+
var g = ghost[i];
276+
var val = Math.max(e, g * 0.4);
277+
if (val < 0.02) continue;
278+
var alpha = val;
279+
if (alpha < 0.01) continue;
280+
var px = x * CELL;
281+
var py = y * CELL;
282+
var sz = CELL - 2;
283+
if (e > 0.5) {
284+
ctx.fillStyle = "rgba(74,222,128," + (alpha * 0.7).toFixed(3) + ")";
285+
ctx.fillRect(px + 1, py + 1, sz, sz);
286+
if (e > 0.8) {
287+
ctx.fillStyle = "rgba(74,222,128," + (alpha * 0.15).toFixed(3) + ")";
288+
ctx.fillRect(px - 1, py - 1, sz + 4, sz + 4);
289+
}
290+
} else if (e > 0.15) {
291+
ctx.fillStyle = "rgba(74,222,128," + (alpha * 0.4).toFixed(3) + ")";
292+
ctx.fillRect(px + 1, py + 1, sz, sz);
293+
} else if (g > 0.05) {
294+
ctx.fillStyle = "rgba(45,122,74," + (g * 0.35).toFixed(3) + ")";
295+
ctx.fillRect(px + 1, py + 1, sz, sz);
296+
}
297+
}
298+
}
299+
}
300+
301+
resize();
302+
window.addEventListener("resize", resize);
303+
var stepInterval = 120;
304+
var lastStep = 0;
305+
306+
function loop(t) {
307+
if (t - lastStep > stepInterval) {
308+
step();
309+
lastStep = t;
310+
spawnTimer++;
311+
if (spawnTimer > 50 + Math.random() * 30) {
312+
spawnEvent();
313+
spawnTimer = 0;
314+
}
315+
var alive = 0;
316+
for (var i = 0; i < energy.length; i++) { if (energy[i] > 0.2) alive++; }
317+
if (alive < cols * rows * 0.01) seed();
318+
}
319+
draw();
320+
requestAnimationFrame(loop);
321+
}
322+
requestAnimationFrame(loop);
323+
})();
324+
</script>

0 commit comments

Comments
 (0)