docs: function renderPage(routeInfo, page, model, inlineCss) {
      inlineCss = inlineCss || 'none';
  
      var subviews = {};
      var appName = routeInfo.appName;
      var jangularDeps = this.getJangularDeps();
      var isLayout = routeInfo.layout && routeInfo.layout !== 'none' &&
          routeInfo.wrapper && routeInfo.wrapper !== 'none';
  
      // passing in model with two diff aliases for diff situations
      // initialModel used by sideview to designate value from page model
      var pageDeps = _.extend({ model: model, routeInfo: routeInfo }, jangularDeps);
      var me = this;
  
      // sideview may make an additional database call, so need to call async
      return this.renderSideview(appName, model, routeInfo)
          .then(function (sideview) {
  
              // make some angular-specific modifications to the model before we render
              me.setDefaults(model, page.defaults, null);
              me.applyPresets(model, page.defaults, page.presets);
              me.attachToScope(model, page.attachToScope);
              me.addFiltersToModel(model, routeInfo.appName);
  
              // if any subviews, put them in an object
              _.each(page.subviews, function (subview, subviewName) {
                  subviews[subviewName] = me.pancakes.cook(subview, { dependencies: jangularDeps });
              });
  
              // get the view
              _.extend(pageDeps, jangularDeps, { subviews: subviews });
              var view = me.pancakes.cook(page.view, { dependencies: pageDeps });
              var renderedPage = jangular.render(view, model, { strip: routeInfo.strip, isAmp: routeInfo.isAmp });
  
              // if layout exists, need to put the page content within the layout
              if (isLayout) {
                  _.extend(pageDeps, { pageContent: renderedPage, sideviewContent: sideview });
                  renderedPage = me.renderLayout(appName, routeInfo.layout, routeInfo.isAmp, pageDeps);
              }
  
              // if page wrapper exists, put rendered page in that
              if (isLayout) {
                  _.extend(pageDeps, { pageContent: renderedPage, routeInfo: routeInfo, inlineCss: inlineCss });
                  renderedPage = me.renderLayout(appName, routeInfo.wrapper, routeInfo.isAmp, pageDeps);
              }
  
              // special one off thing for AMP pages
              if (routeInfo.isAmp && renderedPage.substring(0, 5) === '<html') {
                  renderedPage = '<!DOCTYPE html>' + renderedPage;
              }
  
              return renderedPage;
          });
  }