diff --git a/core/installer/cmd/app_manager.go b/core/installer/cmd/app_manager.go
index cfb69a4..14d6ee0 100644
--- a/core/installer/cmd/app_manager.go
+++ b/core/installer/cmd/app_manager.go
@@ -8,6 +8,7 @@
 
 	"github.com/giolekva/pcloud/core/installer"
 	"github.com/giolekva/pcloud/core/installer/soft"
+	"github.com/giolekva/pcloud/core/installer/tasks"
 	"github.com/giolekva/pcloud/core/installer/welcome"
 
 	"github.com/go-git/go-billy/v5/memfs"
@@ -71,14 +72,17 @@
 		return err
 	}
 	log.Println("Cloned repository")
+	repoIO := installer.NewRepoIO(repo, signer)
+	config, err := repoIO.ReadConfig()
+	if err != nil {
+		return err
+	}
+	log.Println("Read config")
 	kube, err := newNSCreator()
 	if err != nil {
 		return err
 	}
-	m, err := installer.NewAppManager(
-		installer.NewRepoIO(repo, signer),
-		kube,
-	)
+	m, err := installer.NewAppManager(repoIO, kube)
 	if err != nil {
 		return err
 	}
@@ -101,6 +105,10 @@
 		appManagerFlags.port,
 		m,
 		r,
+		tasks.NewFluxcdReconciler( // TODO(gio): make reconciler address a flag
+			"http://fluxcd-reconciler.dodo-fluxcd-reconciler.svc.cluster.local",
+			config.Values.Id,
+		),
 	)
 	return s.Start()
 }
diff --git a/core/installer/tasks/env.go b/core/installer/tasks/env.go
index f5cc0c7..f5978b3 100644
--- a/core/installer/tasks/env.go
+++ b/core/installer/tasks/env.go
@@ -1,10 +1,9 @@
 package tasks
 
 import (
+	"context"
 	"fmt"
 	"net"
-	"net/http"
-	"time"
 
 	"github.com/charmbracelet/keygen"
 
@@ -61,25 +60,19 @@
 			SetupInfra(env, &st)...,
 		)...,
 	)
-	done := make(chan struct{})
+	rctx, done := context.WithCancel(context.Background())
 	t.OnDone(func(_ error) {
-		close(done)
+		done()
 	})
-	go reconcile(fmt.Sprintf("%s-flux", env.PCloudEnvName), done)
-	go reconcile(env.Name, done)
+	pr := NewFluxcdReconciler( // TODO(gio): make reconciler address a flag
+		"http://fluxcd-reconciler.dodo-fluxcd-reconciler.svc.cluster.local",
+		fmt.Sprintf("%s-flux", env.PCloudEnvName),
+	)
+	er := NewFluxcdReconciler(
+		"http://fluxcd-reconciler.dodo-fluxcd-reconciler.svc.cluster.local",
+		env.Name,
+	)
+	go pr.Reconcile(rctx)
+	go er.Reconcile(rctx)
 	return t, DNSZoneRef{"dns-zone", env.Name}
 }
-
-func reconcile(name string, quit chan struct{}) {
-	git := fmt.Sprintf("http://fluxcd-reconciler.dodo-fluxcd-reconciler.svc.cluster.local/source/git/%s/%s/reconcile", name, name)
-	kust := fmt.Sprintf("http://fluxcd-reconciler.dodo-fluxcd-reconciler.svc.cluster.local/kustomization/%s/%s/reconcile", name, name)
-	for {
-		select {
-		case <-time.After(30 * time.Second):
-			http.Get(git)
-			http.Get(kust)
-		case <-quit:
-			return
-		}
-	}
-}
diff --git a/core/installer/tasks/reconciler.go b/core/installer/tasks/reconciler.go
new file mode 100644
index 0000000..461ffc8
--- /dev/null
+++ b/core/installer/tasks/reconciler.go
@@ -0,0 +1,38 @@
+package tasks
+
+import (
+	"context"
+	"fmt"
+	"net/http"
+	"time"
+)
+
+type Reconciler interface {
+	Reconcile(ctx context.Context)
+}
+
+type fluxcdReconciler struct {
+	resources []string
+}
+
+func NewFluxcdReconciler(addr, name string) Reconciler {
+	return fluxcdReconciler{
+		resources: []string{
+			fmt.Sprintf("%s/source/git/%s/%s/reconcile", addr, name, name),
+			fmt.Sprintf("%s/kustomization/%s/%s/reconcile", addr, name, name),
+		},
+	}
+}
+
+func (r fluxcdReconciler) Reconcile(ctx context.Context) {
+	for {
+		select {
+		case <-time.After(30 * time.Second):
+			for _, res := range r.resources {
+				http.Get(res)
+			}
+		case <-ctx.Done():
+			return
+		}
+	}
+}
diff --git a/core/installer/welcome/appmanager.go b/core/installer/welcome/appmanager.go
index 033e1db..be077e0 100644
--- a/core/installer/welcome/appmanager.go
+++ b/core/installer/welcome/appmanager.go
@@ -2,6 +2,7 @@
 
 import (
 	"bytes"
+	"context"
 	"embed"
 	"encoding/json"
 	"fmt"
@@ -9,13 +10,13 @@
 	"io/ioutil"
 	"log"
 	"net/http"
-	// "net/http/httputil"
-	// "net/url"
+	"time"
 
 	"github.com/Masterminds/sprig/v3"
 	"github.com/labstack/echo/v4"
 
 	"github.com/giolekva/pcloud/core/installer"
+	"github.com/giolekva/pcloud/core/installer/tasks"
 )
 
 //go:embed appmanager-tmpl
@@ -28,20 +29,23 @@
 var appHtmlTmpl string
 
 type AppManagerServer struct {
-	port int
-	m    *installer.AppManager
-	r    installer.AppRepository[installer.StoreApp]
+	port       int
+	m          *installer.AppManager
+	r          installer.AppRepository[installer.StoreApp]
+	reconciler tasks.Reconciler
 }
 
 func NewAppManagerServer(
 	port int,
 	m *installer.AppManager,
 	r installer.AppRepository[installer.StoreApp],
+	reconciler tasks.Reconciler,
 ) *AppManagerServer {
 	return &AppManagerServer{
 		port,
 		m,
 		r,
+		reconciler,
 	}
 }
 
@@ -237,6 +241,8 @@
 		log.Printf("%s\n", err.Error())
 		return err
 	}
+	ctx, _ := context.WithTimeout(context.Background(), 2*time.Minute)
+	go s.reconciler.Reconcile(ctx)
 	return c.String(http.StatusOK, "Installed")
 }
 
@@ -261,6 +267,8 @@
 	if err := s.m.Update(a.App, slug, values); err != nil {
 		return err
 	}
+	ctx, _ := context.WithTimeout(context.Background(), 2*time.Minute)
+	go s.reconciler.Reconcile(ctx)
 	return c.String(http.StatusOK, "Installed")
 }
 
@@ -269,6 +277,8 @@
 	if err := s.m.Remove(slug); err != nil {
 		return err
 	}
+	ctx, _ := context.WithTimeout(context.Background(), 2*time.Minute)
+	go s.reconciler.Reconcile(ctx)
 	return c.String(http.StatusOK, "Installed")
 }
 
