added some basic caching and seperated out react to load from a cdn instead