diff --git a/core/installer/welcome/appmanager.go b/core/installer/welcome/appmanager.go
index 5da26ef..a4430b8 100644
--- a/core/installer/welcome/appmanager.go
+++ b/core/installer/welcome/appmanager.go
@@ -247,11 +247,6 @@
 		http.Error(w, "empty slug", http.StatusBadRequest)
 		return
 	}
-	appConfig, err := s.m.AppConfig(slug)
-	if err != nil {
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-		return
-	}
 	contents, err := ioutil.ReadAll(r.Body)
 	if err != nil {
 		http.Error(w, err.Error(), http.StatusInternalServerError)
@@ -262,16 +257,11 @@
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
 	}
-	a, err := installer.FindEnvApp(s.r, appConfig.AppId)
-	if err != nil {
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-		return
-	}
 	if _, ok := s.tasks[slug]; ok {
 		http.Error(w, "Update already in progress", http.StatusBadRequest)
 		return
 	}
-	rr, err := s.m.Update(a, slug, values)
+	rr, err := s.m.Update(slug, values)
 	if err != nil {
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
@@ -452,7 +442,7 @@
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
 	}
-	a, err := installer.FindEnvApp(s.r, instance.AppId)
+	a, err := s.m.GetInstanceApp(instance.Id)
 	if err != nil {
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
diff --git a/core/installer/welcome/dodo_app.go b/core/installer/welcome/dodo_app.go
index 5eb2f58..251a379 100644
--- a/core/installer/welcome/dodo_app.go
+++ b/core/installer/welcome/dodo_app.go
@@ -18,6 +18,7 @@
 	client    soft.Client
 	namespace string
 	env       installer.EnvConfig
+	jc        installer.JobCreator
 	workers   map[string]struct{}
 }
 
@@ -26,6 +27,7 @@
 	sshKey string,
 	client soft.Client,
 	namespace string,
+	jc installer.JobCreator,
 	env installer.EnvConfig,
 ) *DodoAppServer {
 	return &DodoAppServer{
@@ -34,6 +36,7 @@
 		client,
 		namespace,
 		env,
+		jc,
 		map[string]struct{}{},
 	}
 }
@@ -64,7 +67,7 @@
 	}
 	go func() {
 		time.Sleep(20 * time.Second)
-		if err := UpdateDodoApp(s.client, s.namespace, s.sshKey, &s.env); err != nil {
+		if err := UpdateDodoApp(s.client, s.namespace, s.sshKey, s.jc, &s.env); err != nil {
 			fmt.Println(err)
 		}
 	}()
@@ -90,16 +93,17 @@
 	fmt.Printf("registered worker: %s\n", req.Address)
 }
 
-func UpdateDodoApp(client soft.Client, namespace string, sshKey string, env *installer.EnvConfig) error {
+func UpdateDodoApp(client soft.Client, namespace string, sshKey string, jc installer.JobCreator, env *installer.EnvConfig) error {
 	repo, err := client.GetRepo("app")
 	if err != nil {
 		return err
 	}
-	nsCreator := installer.NewNoOpNamespaceCreator()
+	nsc := installer.NewNoOpNamespaceCreator()
 	if err != nil {
 		return err
 	}
-	m, err := installer.NewAppManager(repo, nsCreator, "/.dodo")
+	hf := installer.NewGitHelmFetcher()
+	m, err := installer.NewAppManager(repo, nsc, jc, hf, "/.dodo")
 	if err != nil {
 		return err
 	}
@@ -112,10 +116,11 @@
 	if err != nil {
 		return err
 	}
+	lg := installer.GitRepositoryLocalChartGenerator{"app", namespace}
 	if _, err := m.Install(app, "app", "/.dodo/app", namespace, map[string]any{
 		"repoAddr":      repo.FullAddress(),
 		"sshPrivateKey": sshKey,
-	}, installer.WithConfig(env), installer.WithBranch("dodo")); err != nil {
+	}, installer.WithConfig(env), installer.WithBranch("dodo"), installer.WithLocalChartGenerator(lg)); err != nil {
 		return err
 	}
 	return nil
diff --git a/core/installer/welcome/env.go b/core/installer/welcome/env.go
index 5d2206f..949cbe0 100644
--- a/core/installer/welcome/env.go
+++ b/core/installer/welcome/env.go
@@ -84,6 +84,8 @@
 	repo          soft.RepoIO
 	repoClient    soft.ClientGetter
 	nsCreator     installer.NamespaceCreator
+	jc            installer.JobCreator
+	hf            installer.HelmFetcher
 	dnsFetcher    installer.ZoneStatusFetcher
 	nameGenerator installer.NameGenerator
 	httpClient    phttp.Client
@@ -100,6 +102,8 @@
 	repo soft.RepoIO,
 	repoClient soft.ClientGetter,
 	nsCreator installer.NamespaceCreator,
+	jc installer.JobCreator,
+	hf installer.HelmFetcher,
 	dnsFetcher installer.ZoneStatusFetcher,
 	nameGenerator installer.NameGenerator,
 	httpClient phttp.Client,
@@ -112,6 +116,8 @@
 		repo,
 		repoClient,
 		nsCreator,
+		jc,
+		hf,
 		dnsFetcher,
 		nameGenerator,
 		httpClient,
@@ -333,7 +339,9 @@
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
 	}
-	mgr, err := installer.NewInfraAppManager(s.repo, s.nsCreator)
+	hf := installer.NewGitHelmFetcher()
+	lg := installer.NewInfraLocalChartGenerator()
+	mgr, err := installer.NewInfraAppManager(s.repo, s.nsCreator, hf, lg)
 	if err != nil {
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
@@ -403,6 +411,8 @@
 	t, dns := tasks.NewCreateEnvTask(
 		env,
 		s.nsCreator,
+		s.jc,
+		s.hf,
 		s.dnsFetcher,
 		s.httpClient,
 		s.dnsClient,
diff --git a/core/installer/welcome/env_test.go b/core/installer/welcome/env_test.go
index 0803e64..35e968d 100644
--- a/core/installer/welcome/env_test.go
+++ b/core/installer/welcome/env_test.go
@@ -34,6 +34,24 @@
 	return nil
 }
 
+type fakeJobCreator struct {
+	t *testing.T
+}
+
+func (f fakeJobCreator) Create(name, namespace string, image string, cmd []string) error {
+	f.t.Logf("Create job: %s/%s %s \"%s\"", namespace, name, image, strings.Join(cmd, " "))
+	return nil
+}
+
+type fakeHelmFetcher struct {
+	t *testing.T
+}
+
+func (f fakeHelmFetcher) Pull(chart installer.HelmChartGitRepo, rfs soft.RepoFS, root string) error {
+	f.t.Logf("Helm pull: %+v", chart)
+	return nil
+}
+
 type fakeZoneStatusFetcher struct {
 	t *testing.T
 }
@@ -213,8 +231,11 @@
 	infraFS := memfs.New()
 	envFS := memfs.New()
 	nsCreator := fakeNSCreator{t}
+	jc := fakeJobCreator{t}
+	hf := fakeHelmFetcher{t}
+	lg := installer.GitRepositoryLocalChartGenerator{"foo", "bar"}
 	infraRepo := mockRepoIO{soft.NewBillyRepoFS(infraFS), "foo.bar", t, &sync.Mutex{}}
-	infraMgr, err := installer.NewInfraAppManager(infraRepo, nsCreator)
+	infraMgr, err := installer.NewInfraAppManager(infraRepo, nsCreator, hf, lg)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -254,6 +275,8 @@
 		infraRepo,
 		cg,
 		nsCreator,
+		jc,
+		hf,
 		fakeZoneStatusFetcher{t},
 		fixedNameGenerator{},
 		httpClient,
diff --git a/core/installer/welcome/welcome.go b/core/installer/welcome/welcome.go
index 64f4cf1..7688d50 100644
--- a/core/installer/welcome/welcome.go
+++ b/core/installer/welcome/welcome.go
@@ -30,6 +30,7 @@
 	port                int
 	repo                soft.RepoIO
 	nsCreator           installer.NamespaceCreator
+	hf                  installer.HelmFetcher
 	createAccountAddr   string
 	loginAddr           string
 	membershipsInitAddr string
@@ -39,6 +40,7 @@
 	port int,
 	repo soft.RepoIO,
 	nsCreator installer.NamespaceCreator,
+	hf installer.HelmFetcher,
 	createAccountAddr string,
 	loginAddr string,
 	membershipsInitAddr string,
@@ -47,6 +49,7 @@
 		port,
 		repo,
 		nsCreator,
+		hf,
 		createAccountAddr,
 		loginAddr,
 		membershipsInitAddr,
@@ -205,8 +208,9 @@
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
 	}
+	// TODO(gio): remove this once auto user sync is implemented
 	{
-		appManager, err := installer.NewAppManager(s.repo, s.nsCreator, "/apps")
+		appManager, err := installer.NewAppManager(s.repo, s.nsCreator, nil, s.hf, "/apps")
 		if err != nil {
 			http.Error(w, err.Error(), http.StatusInternalServerError)
 			return
