code: func cmder(cmdch <-chan string, addconnch, delconnch <-chan *cmdConn) {
  	cmdconns := map[*w.Conn](chan bool){}
  	for {
  		select {
  		case c := <-addconnch:
  			cmdconns[c.ws] = c.respch
  		case c := <-delconnch:
  			delete(cmdconns, c.ws)
  		case c := <-cmdch:
  			cmd := fmt.Sprintf(`{"cmd": "%s"}`, c)
  			for ws, respch := range cmdconns {
  				// Error ignored because we close no matter what
  				_ = w.Message.Send(ws, cmd)
  				respch <- true
  			}
  		}
  	}
  }
docs: // cmder manages opening and closing websockets to enable autoreload on any
  // assets/ change.