You basically reinvented something Elixir Streams already nails out of the box.
Streams in Elixir are lazy, chunked, and backpressure-friendly, so you can process any size dataset without loading it all into memory...whether it's a million or a trillion rows. The trick is you never try to render them all in the browser (that's where virtualization comes in).
So yeah...neat work, but battle-tested versions of this have been around for a while.