diff --git a/core/installer/server/appmanager/server.go b/core/installer/server/appmanager/server.go
index f4b543b..91594ce 100644
--- a/core/installer/server/appmanager/server.go
+++ b/core/installer/server/appmanager/server.go
@@ -10,7 +10,6 @@
 	"html/template"
 	"net"
 	"net/http"
-	"path/filepath"
 	"strconv"
 	"strings"
 	"sync"
@@ -188,14 +187,11 @@
 		http.Error(w, err.Error(), http.StatusBadRequest)
 		return
 	}
-	appDir := filepath.Join("/dodo-app", req.Id)
-	namespace := "dodo-app-testttt" // TODO(gio)
-	if _, err := s.m.Install(app, req.Id, appDir, namespace, map[string]any{
-		"managerAddr": "", // TODO(gio)
-		"appId":       req.Id,
-	}); err != nil {
+	if instanceId, err := s.install(app, map[string]any{}); err != nil {
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
+	} else {
+		fmt.Fprintf(w, "/tasks/%s", instanceId)
 	}
 }
 
@@ -330,6 +326,36 @@
 	}
 }
 
+func (s *Server) install(app installer.EnvApp, values map[string]any) (string, error) {
+	env, err := s.m.Config()
+	if err != nil {
+		return "", err
+	}
+	suffixGen := installer.NewFixedLengthRandomSuffixGenerator(3)
+	suffix, err := suffixGen.Generate()
+	if err != nil {
+		return "", err
+	}
+	instanceId := app.Slug() + suffix
+	appDir := fmt.Sprintf("/apps/%s", instanceId)
+	namespace := fmt.Sprintf("%s%s%s", env.NamespacePrefix, app.Namespace(), suffix)
+	t := tasks.NewInstallTask(s.h, func() (installer.ReleaseResources, error) {
+		rr, err := s.m.Install(app, instanceId, appDir, namespace, values)
+		if err == nil {
+			ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
+			go s.reconciler.Reconcile(ctx)
+		}
+		return rr, err
+	})
+	if _, ok := s.tasks[instanceId]; ok {
+		panic("MUST NOT REACH!")
+	}
+	s.tasks[instanceId] = &taskForward{t, fmt.Sprintf("/instance/%s", instanceId), 0}
+	t.OnDone(s.cleanTask(instanceId, 0))
+	go t.Start()
+	return instanceId, nil
+}
+
 func (s *Server) handleAppInstall(w http.ResponseWriter, r *http.Request) {
 	s.l.Lock()
 	defer s.l.Unlock()
@@ -343,42 +369,16 @@
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
 	}
-	a, err := installer.FindEnvApp(s.r, slug)
+	app, err := installer.FindEnvApp(s.r, slug)
 	if err != nil {
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
 	}
-	env, err := s.m.Config()
-	if err != nil {
+	if instanceId, err := s.install(app, values); err != nil {
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
-	}
-	suffixGen := installer.NewFixedLengthRandomSuffixGenerator(3)
-	suffix, err := suffixGen.Generate()
-	if err != nil {
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-		return
-	}
-	instanceId := a.Slug() + suffix
-	appDir := fmt.Sprintf("/apps/%s", instanceId)
-	namespace := fmt.Sprintf("%s%s%s", env.NamespacePrefix, a.Namespace(), suffix)
-	t := tasks.NewInstallTask(s.h, func() (installer.ReleaseResources, error) {
-		rr, err := s.m.Install(a, instanceId, appDir, namespace, values)
-		if err == nil {
-			ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
-			go s.reconciler.Reconcile(ctx)
-		}
-		return rr, err
-	})
-	if _, ok := s.tasks[instanceId]; ok {
-		panic("MUST NOT REACH!")
-	}
-	s.tasks[instanceId] = &taskForward{t, fmt.Sprintf("/instance/%s", instanceId), 0}
-	t.OnDone(s.cleanTask(instanceId, 0))
-	go t.Start()
-	if _, err := fmt.Fprintf(w, "/tasks/%s", instanceId); err != nil {
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-		return
+	} else {
+		fmt.Fprintf(w, "/tasks/%s", instanceId)
 	}
 }
 
