Infinite scroll on every list
The lists in Harmoneya used to render every row at once. Fine for thirty rows, sluggish for three hundred.
Now we render the first twenty, then load more as you scroll near the bottom. Filtering and sorting still operate over the full dataset — only the rendered slice grows. The data layer is unchanged, which means everything keeps working offline.
You’ll notice it most on the Transactions and Projects pages once they fill up.