diff --git a/apps/app-runner/server.go b/apps/app-runner/server.go
index 6a98e3a..ef14842 100644
--- a/apps/app-runner/server.go
+++ b/apps/app-runner/server.go
@@ -21,6 +21,7 @@
 	l           sync.Locker
 	port        int
 	appId       string
+	service     string
 	ready       bool
 	cmd         *exec.Cmd
 	repoAddr    string
@@ -35,12 +36,13 @@
 	currDir     string
 }
 
-func NewServer(port int, appId string, repoAddr, branch, rootDir string, signer ssh.Signer, appDir string, runCommands []Command, self string, manager string) *Server {
+func NewServer(port int, appId, service, repoAddr, branch, rootDir string, signer ssh.Signer, appDir string, runCommands []Command, self string, manager string) *Server {
 	return &Server{
 		l:           &sync.Mutex{},
 		port:        port,
 		ready:       false,
 		appId:       appId,
+		service:     service,
 		repoAddr:    repoAddr,
 		branch:      branch,
 		rootDir:     rootDir,
@@ -58,10 +60,10 @@
 	http.HandleFunc("/update", s.handleUpdate)
 	http.HandleFunc("/ready", s.handleReady)
 	http.HandleFunc("/logs", s.handleLogs)
+	go s.pingManager()
 	if err := s.run(); err != nil {
 		return err
 	}
-	go s.pingManager()
 	return http.ListenAndServe(fmt.Sprintf(":%d", s.port), nil)
 }
 
@@ -140,13 +142,12 @@
 }
 
 type pingReq struct {
+	Service string `json:"service"`
 	Address string `json:"address"`
 	Logs    string `json:"logs"`
 }
 
 func (s *Server) pingManager() {
-	// TODO(gio): do we need runnert -> manager communication?
-	return
 	defer func() {
 		go func() {
 			time.Sleep(5 * time.Second)
@@ -154,14 +155,21 @@
 		}()
 	}()
 	buf, err := json.Marshal(pingReq{
-		Address: fmt.Sprintf("%s:%d", s.self, s.port),
+		Service: s.service,
+		Address: fmt.Sprintf("http://%s:%d", s.self, s.port),
 		Logs:    s.logs.Contents(),
 	})
 	if err != nil {
 		return
 	}
-	registerWorkerAddr := fmt.Sprintf("%s/api/apps/%s/workers", s.managerAddr, s.appId)
-	http.Post(registerWorkerAddr, "application/json", bytes.NewReader(buf))
+	registerWorkerAddr := fmt.Sprintf("%s/api/project/%s/workers", s.managerAddr, s.appId)
+	resp, err := http.Post(registerWorkerAddr, "application/json", bytes.NewReader(buf))
+	if err != nil {
+		fmt.Println(err)
+	} else {
+		// check resp code
+		io.Copy(os.Stdout, resp.Body)
+	}
 }
 
 func (s *Server) kill() error {
