Add cached data.json file; abstract all JS code into separate main.js asset; abstract CSS into separate asset; add popup