Monorepo for Aesthetic.Computer aesthetic.computer
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

girlstripes: y2k hot pink shimmying stripes with glitter

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

authored by

Jeffrey Scudder
Claude Sonnet 4.6
and committed by
aa-bridge
0e968b53 19d8fac9

+79
+79
system/public/aesthetic.computer/disks/girlstripes.mjs
··· 1 + // girlstripes, 26.04.21 2 + 3 + const { floor, sin, cos, abs, PI, random } = Math; 4 + 5 + const count = 14; 6 + let frame = 0; 7 + 8 + // Y2K hot pink palette: bubblegum, magenta, lime, baby blue, silver, white 9 + const palette = [ 10 + [255, 20, 147], // hot pink 11 + [255, 0, 200], // magenta 12 + [255, 105, 180], // bubblegum pink 13 + [200, 0, 255], // purple flash 14 + [0, 255, 180], // cyber mint 15 + [180, 255, 0], // acid lime 16 + [0, 200, 255], // baby blue 17 + [255, 255, 255], // chrome white 18 + [255, 180, 220], // pastel pink 19 + [255, 60, 100], // strawberry 20 + ]; 21 + 22 + const offsets = Array.from({ length: count }, () => random() * 1000); 23 + 24 + function paint({ wipe, ink, screen: { width: w, height: h } }) { 25 + wipe(10, 0, 20); 26 + frame += 1; 27 + 28 + const baseW = w / count; 29 + 30 + for (let i = 0; i < count; i++) { 31 + const off = offsets[i]; 32 + 33 + // Stripes bounce and shimmy — perky, energetic 34 + const bounce = sin(frame * 0.05 + off * 0.9) * 0.5 + cos(frame * 0.03 + i) * 0.3; 35 + const stripeW = floor(baseW * (0.6 + abs(bounce) * 0.8)) + 1; 36 + 37 + // Shimmy side to side fast 38 + const shimmy = sin(frame * 0.04 + off * 1.1) * baseW * 0.6; 39 + const x = floor(i * baseW + shimmy); 40 + 41 + // Fast color cycling — y2k energy 42 + const colorPhase = (frame * 0.02 + off * 0.5) % palette.length; 43 + const ci = floor(colorPhase) % palette.length; 44 + const ci2 = (ci + 1) % palette.length; 45 + const t = colorPhase - floor(colorPhase); 46 + const [r1, g1, b1] = palette[ci]; 47 + const [r2, g2, b2] = palette[ci2]; 48 + const r = floor(r1 + (r2 - r1) * t); 49 + const g = floor(g1 + (g2 - g1) * t); 50 + const b = floor(b1 + (b2 - b1) * t); 51 + 52 + // Bright pulse — glittery 53 + const pulse = abs(sin(frame * 0.08 + off * 3.1)); 54 + const alpha = 160 + floor(pulse * 95); 55 + 56 + ink(r, g, b, alpha).box(x, 0, stripeW, h, "fill"); 57 + 58 + // Sparkle highlight on leading edge 59 + const sparkle = abs(sin(frame * 0.2 + off * 5.7)); 60 + if (sparkle > 0.85) { 61 + ink(255, 255, 255, floor(sparkle * 200)).box(x, 0, 2, h, "fill"); 62 + } 63 + } 64 + 65 + // Glitter dots scattered across screen 66 + const glitterSeed = frame * 7; 67 + for (let g = 0; g < 18; g++) { 68 + const gx = floor((sin(glitterSeed * 0.017 + g * 1.3) * 0.5 + 0.5) * w); 69 + const gy = floor((cos(glitterSeed * 0.013 + g * 2.1) * 0.5 + 0.5) * h); 70 + const ga = floor(abs(sin(frame * 0.3 + g * 0.7)) * 200); 71 + ink(255, 255, 255, ga).box(gx, gy, 2, 2, "fill"); 72 + } 73 + } 74 + 75 + function meta() { 76 + return { title: "Girlstripes", desc: "Y2K hot pink stripes." }; 77 + } 78 + 79 + export { paint, meta };