code: func (c *Client) CreateDashboard(ctx context.Context, d *platform.Dashboard) error {
  	err := c.db.Update(func(tx *bolt.Tx) error {
  		d.ID = c.IDGenerator.ID()
  
  		for _, cell := range d.Cells {
  			cell.ID = c.IDGenerator.ID()
  
  			if err := c.createCellView(ctx, tx, d.ID, cell.ID, nil); err != nil {
  				return err
  			}
  		}
  
  		if err := c.appendDashboardEventToLog(ctx, tx, d.ID, dashboardCreatedEvent); err != nil {
  			return err
  		}
  
  		// TODO(desa): don't populate this here. use the first/last methods of the oplog to get meta fields.
  		d.Meta.CreatedAt = c.time()
  
  		return c.putDashboardWithMeta(ctx, tx, d)
  	})
  	if err != nil {
  		return &platform.Error{
  			Err: err,
  			Op:  getOp(platform.OpCreateDashboard),
  		}
  	}
  	return nil
  }
docs: // CreateDashboard creates a platform dashboard and sets d.ID.