Skip to content

Define TinyVectors field-based feel contract #40

Description

Problem

The Phase A gel-physics rewrite made the background feel over-engineered: too coherent under input, too noisy/flashy in rendering, and then too still after coefficient tuning. TinyVectors needs a product-level feel contract before more physics changes.

TinyVectors is an expressive Svelte/SvelteKit background system, not a physics demo. Inputs should bias an already-pleasant ambient flow; they should not seize control of the blobs.

Linear: TIN-853

Feel Contract

  • Pleasant by default: idle blobs always drift/breathe subtly, never freeze and never jitter.
  • Inputs are bias fields: device gravity, pointer, and scroll influence the existing flow instead of replacing it.
  • Gravity is a slow directional bias: tilt should make blobs lean/pool/drift, not behave like marbles falling.
  • Pointer is local and soft: nearby blobs should react more than distant blobs, with no event capture by the visual layer.
  • Scroll is transient: scroll should create a decaying impulse/stickiness, not permanent acceleration.
  • Gel/fluid is visual language: use low-cost inertia, soft repulsion/attraction, and shape deformation rather than a heavyweight fluid simulation.
  • App-safe by default: SSR-safe, reduced-motion aware, listener-clean, no layout jank, and small enough for in-house SvelteKit backgrounds.

Scope

  • Keep PR Integrate motion, pointer, gel, and package validation #39 on the restored pre-Phase-A physics/rendering baseline plus the useful harness/lifecycle/package work.
  • Add repo-local architecture docs for the feel contract and field model.
  • Introduce a small internal field/force seam that can be tested without changing visible behavior first.
  • Add behavior tests in tolerant terms: idle drift bounded, gravity directional bias, pointer locality, scroll impulse decay, listener lifecycle, and bundle budget.
  • Only then add direct pointer/gravity fields incrementally behind the existing public flags/config.

Non-Goals

  • Do not revive the Phase A XSPH/soft-wall/Gaussian rewrite as-is.
  • Do not ship a coefficient-only tuning patch without a contract and harness coverage.
  • Do not introduce a large physics dependency or heavy fluid solver.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions