code: func ConsolesHandler(c *router.Context, projectID string) error {
  	// Get consoles related to this project and filter out all builders.
  	cons, err := common.GetProjectConsoles(c.Context, projectID)
  	if err != nil {
  		return err
  	}
  	if err := filterUnauthorizedBuildersFromConsoles(c.Context, cons); err != nil {
  		return errors.Annotate(err, "error authorizing user").Err()
  	}
  
  	type fullConsole struct {
  		ProjectID string
  		Def       *config.Console
  		Render    consoleRenderer
  	}
  	var consoles []fullConsole
  	summaryMap, err := buildsource.GetConsoleSummariesFromDefs(c.Context, cons, projectID)
  	if err != nil {
  		return err
  	}
  	for _, con := range cons {
  		summary, ok := summaryMap[con.ConsoleID()]
  		if !ok {
  			logging.Errorf(c.Context, "console summary for %s not found", con.ConsoleID())
  			continue
  		}
  		respConsole, err := consolePreview(c.Context, summary, &con.Def)
  		if err != nil {
  			logging.WithError(err).Errorf(c.Context, "failed to generate resp console")
  			continue
  		}
  		full := fullConsole{
  			ProjectID: con.ProjectID(),
  			Def:       &con.Def,
  			Render:    consoleRenderer{respConsole},
  		}
  		consoles = append(consoles, full)
  	}
  
  	var reload *int
  	if tReload := GetReload(c.Request, -1); tReload >= 0 {
  		reload = &tReload
  	}
  
  	templates.MustRender(c.Context, c.Writer, "pages/builder_groups.html", templates.Args{
  		"ProjectID": projectID,
  		"Consoles":  consoles,
  		"Reload":    reload,
  	})
  	return nil
  }
docs: // ConsolesHandler is responsible for taking a project name and rendering the
  // console list page (defined in ./appengine/templates/pages/builder_groups.html).