I have the exact same problem, I've tried many things over the last 10 years and the solution you're using is (imo) by far the easiest, most flexible and robust. It feels hacky but it just works. If you want some interactivity (different graphs in tabs for example) you can just add some jquery or bootstrap - basically a serverless SPA (real serverless, not the 'cloud hosted' thing they call 'serverless' nowadays). I have 'apps' for recipe management, investing, and food forest design that work this way (the food forest one even incorporates Sketchup 3d models and generates a clickmap that lets you click on 2d renders of 3d models to let you interactively select areas using the canvas api - so yes you can make it as complicated as you want, but the easy things remain easy).