Ralfvia treechat·2mo
❤️ 0 Likes · ⚡ 0 Tips
{
  "txid": "49d15028f9db4e0d48119ef7342b88175c0c32d05b7a9892246e162701437425",
  "block_height": 0,
  "time": null,
  "app": "treechat",
  "type": "post",
  "map_content": "@@claude-sonnet-4.5 give me the script to create a nice animation of a windy land",
  "media_type": "text/markdown",
  "filename": "|",
  "author": "14aqJ2hMtENYJVCJaekcrqi12fiZJzoWGK",
  "display_name": "Ralf",
  "channel": null,
  "parent_txid": null,
  "ref_txid": null,
  "tags": null,
  "reply_count": 48,
  "like_count": 0,
  "timestamp": "2026-02-08T21:59:19.000Z",
  "media_url": null,
  "aip_verified": true,
  "has_access": true,
  "attachments": [],
  "ui_name": "Ralf",
  "ui_display_name": "Ralf",
  "ui_handle": "Ralf",
  "ui_display_raw": "Ralf",
  "ui_signer": "14aqJ2hMtENYJVCJaekcrqi12fiZJzoWGK",
  "ref_ui_name": "unknown",
  "ref_ui_signer": "unknown"
}
⬇️
Ralfvia treechat·2mo
❤️ 0 Likes · ⚡ 0 Tips
{
  "txid": "4fea739287f28ba1abc9db77a5e862928a470517694dc116c9f3b4d0ab535e51",
  "block_height": 0,
  "time": null,
  "app": "treechat",
  "type": "reply",
  "map_content": "```html\n<!DOCTYPE html><html><head><title>Windy Landscape</title><style>body { margin: 0; overflow: hidden; background: #87CEEB; } canvas { display: block; }</style></head><body><canvas id=\"canvas\"></canvas><script>const canvas = document.getElementById('canvas'); const ctx = canvas.getContext('2d'); canvas.width = window.innerWidth; canvas.height = window.innerHeight; const grassBlades = []; for (let i = 0; i < 200; i++) { grassBlades.push({ x: Math.random() * canvas.width, y: canvas.height - Math.random() * 100, height: 20 + Math.random() * 40, sway: Math.random() * Math.PI * 2, speed: 0.02 + Math.random() * 0.03 }); } const clouds = []; for (let i = 0; i < 5; i++) { clouds.push({ x: Math.random() * canvas.width, y: 50 + Math.random() * 150, width: 80 + Math.random() * 100, speed: 0.3 + Math.random() * 0.5 }); } function animate() { const gradient = ctx.createLinearGradient(0, 0, 0, canvas.height); gradient.addColorStop(0, '#87CEEB'); gradient.addColorStop(1, '#E0F6FF'); ctx.fillStyle = gradient; ctx.fillRect(0, 0, canvas.width, canvas.height); ctx.fillStyle = '#8B7355'; ctx.fillRect(0, canvas.height - 150, canvas.width, 150); ctx.strokeStyle = '#228B22'; ctx.lineWidth = 2; grassBlades.forEach(blade => { blade.sway += blade.speed; const swayAmount = Math.sin(blade.sway) * 15; ctx.beginPath(); ctx.moveTo(blade.x, blade.y); ctx.quadraticCurveTo(blade.x + swayAmount / 2, blade.y - blade.height / 2, blade.x + swayAmount, blade.y - blade.height); ctx.stroke(); }); ctx.fillStyle = 'rgba(255, 255, 255, 0.8)'; clouds.forEach(cloud => { cloud.x += cloud.speed; if (cloud.x > canvas.width + cloud.width) { cloud.x = -cloud.width; } ctx.beginPath(); ctx.arc(cloud.x, cloud.y, cloud.width * 0.3, 0, Math.PI * 2); ctx.arc(cloud.x + cloud.width * 0.3, cloud.y, cloud.width * 0.4, 0, Math.PI * 2); ctx.arc(cloud.x + cloud.width * 0.6, cloud.y, cloud.width * 0.35, 0, Math.PI * 2); ctx.fill(); }); requestAnimationFrame(animate); } animate(); window.addEventListener('resize', () => { canvas.width = window.innerWidth; canvas.height = window.innerHeight; });</script></body></html>\n```",
  "media_type": "text/markdown",
  "filename": "|",
  "author": "14aqJ2hMtENYJVCJaekcrqi12fiZJzoWGK",
  "display_name": "Ralf",
  "channel": null,
  "parent_txid": "49d15028f9db4e0d48119ef7342b88175c0c32d05b7a9892246e162701437425",
  "ref_txid": null,
  "tags": null,
  "reply_count": 0,
  "like_count": 0,
  "timestamp": "2026-02-08T21:59:19.000Z",
  "media_url": null,
  "aip_verified": true,
  "has_access": true,
  "attachments": [],
  "ui_name": "Ralf",
  "ui_display_name": "Ralf",
  "ui_handle": "Ralf",
  "ui_display_raw": "Ralf",
  "ui_signer": "14aqJ2hMtENYJVCJaekcrqi12fiZJzoWGK",
  "ref_ui_name": "unknown",
  "ref_ui_signer": "unknown"
}
Signed by14aqJ2hMtENYJVCJaekcrqi12fiZJzoWGKAIP!