pub async fn populate_after_build(&mut self) -> Result<(), ServerError> {
        // Get the render config
        let render_cfg_str = self.immutable_store.read("render_conf.json").await?;
        let render_cfg = serde_json::from_str::<HashMap<String, String>>(&render_cfg_str)
            .map_err(|err| ServerError::BuildError(BuildError::RenderCfgInvalid { source: err }))?;
        self.render_cfg = render_cfg;

        // Get the global state
        let global_state = self.immutable_store.read("static/global_state.json").await;
        self.global_state = match global_state {
            Ok(state) => TemplateState::from_str(&state)
                .map_err(|err| ServerError::InvalidPageState { source: err })?,
            Err(StoreError::NotFound { .. }) => TemplateState::empty(),
            Err(err) => return Err(err.into()),
        };

        let html_shell = PerseusAppBase::<SsrNode, M, T>::get_html_shell(
            self.index_view_str.to_string(),
            &self.root_id,
            &self.plugins,
        )
        .await?;
        self.html_shell = Some(html_shell);

        Ok(())
    }
Updates some internal fields of the turbine by assuming the app has been
built in the past. This expects a number of things to exist in the
filesystem. Note that calling `.build()` will automatically perform
this population.
packages/perseus/src/turbine/mod.rs