installer: call reconciler on app install/update/remove
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
-		}
-	}
-}