VibeCoderzVibeCoderz
All Prompts
Interactive Finance Insights Feature Grid preview
featuresectioninteractiveanimateddashboardanalyticstailwind

Interactive Finance Insights Feature Grid

Интерактивная сетка финансовых данных: автоматический дайджест, умная сортировка расходов с Matter.js, прогноз ликвидности. Для дашбордов и аналитики.

Prompt

<div
  class="bg-zinc-950 font-['Inter',sans-serif] min-h-screen flex items-center justify-center p-4 sm:p-8 antialiased selection:bg-indigo-500/30 relative text-base overflow-hidden">
  <!-- Dependencies -->
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap" rel="stylesheet">
  <script src="https://code.iconify.design/iconify-icon/1.0.7/iconify-icon.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/matter-js/0.19.0/matter.min.js"></script>

  <!-- Global Noise Overlay -->
  <canvas id="noise-canvas"
    class="fixed inset-0 w-full h-full pointer-events-none z-50 opacity-20 mix-blend-overlay"></canvas>
  <script>
    (() => {
            const cvs = document.getElementById('noise-canvas');
            const gl = cvs.getContext('webgl');
            const prg = gl.createProgram();
            const vs = gl.createShader(gl.VERTEX_SHADER);
            gl.shaderSource(vs, 'attribute vec2 p;void main(){gl_Position=vec4(p,0,1);}');
            gl.compileShader(vs);
            const fs = gl.createShader(gl.FRAGMENT_SHADER);
            gl.shaderSource(fs, 'precision lowp float;uniform float t;void main(){float n=fract(sin(dot(gl_FragCoord.xy+t,vec2(12.9898,78.233)))*43758.5453);gl_FragColor=vec4(vec3(n),1.0);}');
            gl.compileShader(fs);
            gl.attachShader(prg, vs); gl.attachShader(prg, fs); gl.linkProgram(prg); gl.useProgram(prg);
            const buf = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buf);
            gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1,-1,1,-1,-1,1,1,1]), gl.STATIC_DRAW);
            const pos = gl.getAttribLocation(prg, 'p'); gl.enableVertexAttribArray(pos);
            gl.vertexAttribPointer(pos, 2, gl.FLOAT, false, 0, 0);
            const tLoc = gl.getUniformLocation(prg, 't');
            const render = (time) => {
                if(cvs.width !== innerWidth || cvs.height !== innerHeight) {
                    cvs.width = innerWidth; cvs.height = innerHeight;
                    gl.viewport(0, 0, cvs.width, cvs.height);
                }
                gl.uniform1f(tLoc, time * 0.01);
                gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
                requestAnimationFrame(render);
            };
            render(0);
        })();
  </script>

  <div class="max-w-6xl w-full grid grid-cols-1 lg:grid-cols-3 gap-6 lg:gap-8 relative z-10">

    <!-- Section 1: Insights -->
    <div class="relative h-[36rem] rounded-[2rem] overflow-hidden flex flex-col items-center pt-10 group"
      style="background: linear-gradient(180deg, #1f1f22 0%, #09090b 100%); box-shadow: inset 0 1px 2px rgba(255,255,255,0.05), inset 0 -1px 2px rgba(0,0,0,0.5), 0 25px 50px -12px rgba(0, 0, 0, 1); border: 1px solid #27272a;">
      <div class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[150%] h-[60%] z-0 opacity-30"
        style="background: radial-gradient(ellipse at center, rgba(139, 92, 246, 0.4) 0%, rgba(249, 115, 22, 0.2) 50%, transparent 70%); filter: blur(40px);">
      </div>
      <div class="relative z-10 flex items-center gap-2 px-3 py-1.5 rounded-full text-xs text-zinc-300 mb-8"
        style="background: linear-gradient(180deg, #27272a 0%, #18181b 100%); box-shadow: inset 0 1px 1px rgba(255,255,255,0.1), inset 0 -1px 1px rgba(0,0,0,0.5), 0 4px 6px rgba(0,0,0,0.5); border: 1px solid #000;">
        <iconify-icon icon="solar:chart-square-linear" width="16" height="16"></iconify-icon>
        <span>Evaluate</span>
      </div>
      <h2 class="relative z-10 text-2xl font-normal tracking-tight text-white mb-3 text-center px-6">Automated Weekly
        Digest</h2>
      <p class="relative z-10 text-sm font-light text-zinc-400 text-center max-w-[85%] leading-relaxed">AI-driven
        summary of core portfolio movements and unusual activities.</p>
      <div class="absolute bottom-10 w-full flex flex-col items-center z-10">
        <div class="relative w-full h-24 mb-6 flex justify-center">
          <div
            class="absolute bottom-4 -ml-24 w-10 h-10 rounded-full flex items-center justify-center text-zinc-400 transition-transform duration-700 group-hover:-translate-y-2"
            style="background: linear-gradient(180deg, #27272a 0%, #18181b 100%); box-shadow: inset 0 1px 1px rgba(255,255,255,0.15), inset 0 -1px 1px rgba(0,0,0,0.8), 0 10px 15px rgba(0,0,0,0.8); border: 1px solid #000;">
            <iconify-icon icon="solar:wallet-linear" width="20" height="20"></iconify-icon>
          </div>
          <div
            class="absolute bottom-8 -ml-8 w-12 h-12 rounded-full flex items-center justify-center text-indigo-400 z-10 transition-transform duration-700 group-hover:-translate-y-3"
            style="background: linear-gradient(180deg, #27272a 0%, #18181b 100%); box-shadow: inset 0 1px 1px rgba(255,255,255,0.15), inset 0 -1px 1px rgba(0,0,0,0.8), 0 15px 20px rgba(0,0,0,0.9); border: 1px solid #000;">
            <iconify-icon icon="solar:banknote-linear" width="24" height="24"></iconify-icon>
          </div>
          <div
            class="absolute bottom-4 ml-12 w-10 h-10 rounded-full flex items-center justify-center text-zinc-400 transition-transform duration-700 group-hover:-translate-y-2"
            style="background: linear-gradient(180deg, #27272a 0%, #18181b 100%); box-shadow: inset 0 1px 1px rgba(255,255,255,0.15), inset 0 -1px 1px rgba(0,0,0,0.8), 0 10px 15px rgba(0,0,0,0.8); border: 1px solid #000;">
            <iconify-icon icon="solar:chart-linear" width="20" height="20"></iconify-icon>
          </div>
        </div>
        <h3 class="text-5xl font-normal tracking-tight text-white" style="text-shadow: 0 4px 10px rgba(0,0,0,0.5);">+22%
        </h3>
        <p class="text-sm font-light text-zinc-400 mt-2">Total Return</p>
      </div>
    </div>

    <!-- Section 2: Sorting -->
    <div id="physics-card" class="relative h-[36rem] rounded-[2rem] flex flex-col items-center pt-10 overflow-hidden"
      style="background: linear-gradient(180deg, #1f1f22 0%, #09090b 100%); box-shadow: inset 0 1px 2px rgba(255,255,255,0.05), inset 0 -1px 2px rgba(0,0,0,0.5), 0 25px 50px -12px rgba(0, 0, 0, 1); border: 1px solid #27272a;">
      <div class="absolute bottom-0 left-0 w-full h-[60%] z-0 pointer-events-none"
        style="background: linear-gradient(to top, rgba(109, 40, 217, 0.4) 0%, transparent 100%);"></div>
      <div
        class="relative z-20 flex items-center gap-2 px-3 py-1.5 rounded-full text-xs text-zinc-300 mb-8 pointer-events-none"
        style="background: linear-gradient(180deg, #27272a 0%, #18181b 100%); box-shadow: inset 0 1px 1px rgba(255,255,255,0.1), inset 0 -1px 1px rgba(0,0,0,0.5), 0 4px 6px rgba(0,0,0,0.5); border: 1px solid #000;">
        <iconify-icon icon="solar:layers-linear" width="16" height="16"></iconify-icon>
        <span>Sort</span>
      </div>
      <h2
        class="relative z-20 text-2xl font-normal tracking-tight text-white mb-3 text-center px-4 pointer-events-none">
        Intelligent Sorting</h2>
      <div id="physics-container" class="absolute inset-0 w-full h-full z-10 overflow-hidden">
        <div
          class="physics-tag absolute text-white px-4 py-2 rounded-full flex items-center gap-2 text-sm font-light cursor-grab active:cursor-grabbing"
          style="background: linear-gradient(180deg, #27272a 0%, #18181b 100%); border: 1px solid #000;"><iconify-icon
            icon="solar:city-linear"></iconify-icon>Taxes & Fees</div>
        <div
          class="physics-tag absolute text-white px-4 py-2 rounded-full flex items-center gap-2 text-sm font-light cursor-grab active:cursor-grabbing"
          style="background: linear-gradient(180deg, #27272a 0%, #18181b 100%); border: 1px solid #000;"><iconify-icon
            icon="solar:settings-linear"></iconify-icon>Shipping</div>
        <div
          class="physics-tag absolute text-white px-4 py-2 rounded-full flex items-center gap-2 text-sm font-light cursor-grab active:cursor-grabbing"
          style="background: linear-gradient(180deg, #27272a 0%, #18181b 100%); border: 1px solid #000;"><iconify-icon
            icon="solar:wallet-money-linear"></iconify-icon>Income</div>
        <div
          class="physics-tag absolute text-white px-4 py-2 rounded-full flex items-center gap-2 text-sm font-light cursor-grab active:cursor-grabbing"
          style="background: linear-gradient(180deg, #27272a 0%, #18181b 100%); border: 1px solid #000;"><iconify-icon
            icon="solar:bolt-linear"></iconify-icon>Utilities</div>
        <div
          class="physics-tag absolute text-white px-4 py-2 rounded-full flex items-center gap-2 text-sm font-light cursor-grab active:cursor-grabbing"
          style="background: linear-gradient(180deg, #27272a 0%, #18181b 100%); border: 1px solid #000;"><iconify-icon
            icon="solar:home-2-linear"></iconify-icon>Rent</div>
      </div>
      <script>
        window.addEventListener('load', () => {
                    const { Engine, Runner, Bodies, Composite, Mouse, MouseConstraint } = Matter;
                    const engine = Engine.create();
                    const container = document.getElementById('physics-container');
                    const tags = container.querySelectorAll('.physics-tag');
                    let width = container.offsetWidth, height = container.offsetHeight;
                    const ground = Bodies.rectangle(width/2, height + 25, width, 50, { isStatic: true });
                    const leftWall = Bodies.rectangle(-25, height/2, 50, height, { isStatic: true });
                    const rightWall = Bodies.rectangle(width + 25, height/2, 50, height, { isStatic: true });
                    Composite.add(engine.world, [ground, leftWall, rightWall]);
                    const bodies = Array.from(tags).map((tag, i) => {
                        const b = Bodies.rectangle(Math.random()*width, -100-(i*50), tag.offsetWidth, tag.offsetHeight, { restitution: 0.6, chamfer: { radius: 15 } });
                        Composite.add(engine.world, b);
                        return { elem: tag, body: b };
                    });
                    const mouse = Mouse.create(container);
                    Composite.add(engine.world, MouseConstraint.create(engine, { mouse, constraint: { stiffness: 0.2, render: { visible: false } } }));
                    Runner.run(Runner.create(), engine);
                    (function update() {
                        bodies.forEach(b => {
                            b.elem.style.transform = `translate(${b.body.position.x - b.elem.offsetWidth/2}px, ${b.body.position.y - b.elem.offsetHeight/2}px) rotate(${b.body.angle}rad)`;
                        });
                        requestAnimationFrame(update);
                    })();
                });
      </script>
    </div>

    <!-- Section 3: Forecast -->
    <div class="relative h-[36rem] rounded-[2rem] flex flex-col items-center pt-10 px-4 overflow-hidden"
      style="background: linear-gradient(180deg, #1f1f22 0%, #09090b 100%); box-shadow: inset 0 1px 2px rgba(255,255,255,0.05), 0 25px 50px -12px rgba(0, 0, 0, 1); border: 1px solid #27272a;">
      <div class="flex items-center gap-2 px-3 py-1.5 rounded-full text-xs text-zinc-300 mb-8"
        style="background: linear-gradient(180deg, #27272a 0%, #18181b 100%); border: 1px solid #000;">
        <iconify-icon icon="solar:target-linear" width="16" height="16"></iconify-icon>
        <span>Predict</span>
      </div>
      <h2 class="text-2xl font-normal tracking-tight text-white mb-3 text-center">Liquidity Projections</h2>
      <div class="mt-8 w-full flex-1 rounded-t-3xl p-6 flex flex-col relative overflow-hidden group"
        style="background: linear-gradient(135deg, #6d28d9 0%, #4c1d95 100%); border: 1px solid #5b21b6; border-bottom: none;">
        <div class="flex items-baseline gap-1 mt-2">
          <span class="text-2xl font-light text-white/80">+</span>
          <h3 class="text-4xl font-normal tracking-tight text-white">$7,250</h3>
        </div>
        <div class="mt-auto w-full h-40 relative">
          <svg width="100%" height="100%" viewBox="0 0 200 100" preserveAspectRatio="none"
            class="absolute bottom-0 left-0">
            <g stroke="rgba(255,255,255,0.15)" stroke-width="2" stroke-linecap="round">
              <line x1="20" y1="70" x2="20" y2="100" />
              <line x1="60" y1="50" x2="60" y2="100" />
              <line x1="100" y1="80" x2="100" y2="100" />
              <line x1="140" y1="30" x2="140" y2="100" />
              <line x1="180" y1="20" x2="180" y2="100" />
            </g>
            <line x1="180" y1="20" x2="180" y2="100" stroke="#fef08a" stroke-width="2" stroke-linecap="round"
              class="transition-all duration-700 group-hover:stroke-[3px]" />
            <circle cx="180" cy="20" r="3" fill="#fef08a" />
          </svg>
        </div>
        <div class="flex items-center justify-between mt-4 border-t border-white/10 pt-4">
          <span class="text-xs font-light text-white/80">30 Day Forecast</span>
          <span class="text-xs font-normal text-white px-2 py-1 rounded-full bg-black/40 border border-white/10">+11%</span>
        </div>
      </div>
    </div>
  </div>
</div>
All Prompts