consider using a “partial cache” to wrap json responses. some introduction can be found here: Remember this - Caching in Kirby
there are various ways for replacing certain parts of a website some examples…
GitHub - patrick-steele-idem/morphdom: Fast and lightweight DOM diffing/patching (no virtual DOM needed) (old school but still working very well)
Morph — Alpine.js (alpine v3)