diff --git a/core/installer/app.go b/core/installer/app.go
index 76acf74..de56808 100644
--- a/core/installer/app.go
+++ b/core/installer/app.go
@@ -5,6 +5,7 @@
 	"bytes"
 	"compress/gzip"
 	"embed"
+	"encoding/json"
 	"fmt"
 	htemplate "html/template"
 	"io"
@@ -13,6 +14,9 @@
 	"strings"
 	"text/template"
 
+	"cuelang.org/go/cue"
+	"cuelang.org/go/cue/cuecontext"
+	cueyaml "cuelang.org/go/encoding/yaml"
 	"github.com/Masterminds/sprig/v3"
 	"github.com/go-git/go-billy/v5"
 	"sigs.k8s.io/yaml"
@@ -39,20 +43,67 @@
 	templates  []*template.Template
 	schema     Schema
 	Readme     *template.Template
+	cfg        *cue.Value
 }
 
 func (a App) Schema() Schema {
 	return a.schema
 }
 
-func (a App) Render(derived Derived) (map[string][]byte, error) {
-	ret := make(map[string][]byte)
+type Rendered struct {
+	Readme    string
+	Resources map[string][]byte
+}
+
+func (a App) Render(derived Derived) (Rendered, error) {
+	ret := Rendered{
+		Resources: make(map[string][]byte),
+	}
+	if a.cfg != nil {
+		var buf bytes.Buffer
+		if err := json.NewEncoder(&buf).Encode(derived); err != nil {
+			return Rendered{}, err
+		}
+		ctx := a.cfg.Context()
+		d := ctx.CompileBytes(buf.Bytes())
+		res := a.cfg.Unify(d).Eval()
+		if err := res.Err(); err != nil {
+			return Rendered{}, err
+		}
+		if err := res.Validate(); err != nil {
+			return Rendered{}, err
+		}
+		readme, err := res.LookupPath(cue.ParsePath("readme")).String()
+		if err != nil {
+			return Rendered{}, err
+		}
+		ret.Readme = readme
+		output := res.LookupPath(cue.ParsePath("output"))
+		i, err := output.Fields()
+		if err != nil {
+			return Rendered{}, err
+		}
+		for i.Next() {
+			name := i.Selector().String()
+			contents, err := cueyaml.Encode(i.Value())
+			if err != nil {
+				return Rendered{}, err
+			}
+			ret.Resources[name] = contents
+		}
+		return ret, nil
+	}
+	var readme bytes.Buffer
+	if err := a.Readme.Execute(&readme, derived); err != nil {
+		return Rendered{}, err
+	}
+	ret.Readme = readme.String()
 	for _, t := range a.templates {
 		var buf bytes.Buffer
 		if err := t.Execute(&buf, derived); err != nil {
-			return nil, err
+			return Rendered{}, err
 		}
-		ret[t.Name()] = buf.Bytes()
+		ret.Resources[t.Name()] = buf.Bytes()
 	}
 	return ret, nil
 }
@@ -175,6 +226,7 @@
 		},
 		schema,
 		tmpls.Lookup("private-network.md"),
+		nil,
 	}
 }
 
@@ -191,6 +243,7 @@
 		},
 		schema,
 		tmpls.Lookup("certificate-issuer-private.md"),
+		nil,
 	}
 }
 
@@ -207,6 +260,7 @@
 		},
 		schema,
 		tmpls.Lookup("certificate-issuer-public.md"),
+		nil,
 	}
 }
 
@@ -224,6 +278,7 @@
 		},
 		schema,
 		tmpls.Lookup("core-auth.md"),
+		nil,
 	}
 }
 
@@ -241,6 +296,7 @@
 			},
 			schema,
 			tmpls.Lookup("vaultwarden.md"),
+			nil,
 		},
 		Icon:             `<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 48 48"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M35.38 25.63V9.37H24v28.87a34.93 34.93 0 0 0 5.41-3.48q6-4.66 6-9.14Zm4.87-19.5v19.5A11.58 11.58 0 0 1 39.4 30a16.22 16.22 0 0 1-2.11 3.81a23.52 23.52 0 0 1-3 3.24a34.87 34.87 0 0 1-3.22 2.62c-1 .69-2 1.35-3.07 2s-1.82 1-2.27 1.26l-1.08.51a1.53 1.53 0 0 1-1.32 0l-1.08-.51c-.45-.22-1.21-.64-2.27-1.26s-2.09-1.27-3.07-2A34.87 34.87 0 0 1 13.7 37a23.52 23.52 0 0 1-3-3.24A16.22 16.22 0 0 1 8.6 30a11.58 11.58 0 0 1-.85-4.32V6.13A1.64 1.64 0 0 1 9.38 4.5h29.24a1.64 1.64 0 0 1 1.63 1.63Z"/></svg>`,
 		ShortDescription: "Open source implementation of Bitwarden password manager. Can be used with official client applications.",
@@ -262,6 +318,7 @@
 			},
 			schema,
 			nil,
+			nil,
 		},
 		`<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 24 24"><path fill="currentColor" d="M.632.55v22.9H2.28V24H0V0h2.28v.55zm7.043 7.26v1.157h.033a3.312 3.312 0 0 1 1.117-1.024c.433-.245.936-.365 1.5-.365c.54 0 1.033.107 1.481.314c.448.208.785.582 1.02 1.108c.254-.374.6-.706 1.034-.992c.434-.287.95-.43 1.546-.43c.453 0 .872.056 1.26.167c.388.11.716.286.993.53c.276.245.489.559.646.951c.152.392.23.863.23 1.417v5.728h-2.349V11.52c0-.286-.01-.559-.032-.812a1.755 1.755 0 0 0-.18-.66a1.106 1.106 0 0 0-.438-.448c-.194-.11-.457-.166-.785-.166c-.332 0-.6.064-.803.189a1.38 1.38 0 0 0-.48.499a1.946 1.946 0 0 0-.231.696a5.56 5.56 0 0 0-.06.785v4.768h-2.35v-4.8c0-.254-.004-.503-.018-.752a2.074 2.074 0 0 0-.143-.688a1.052 1.052 0 0 0-.415-.503c-.194-.125-.476-.19-.854-.19c-.111 0-.259.024-.439.074c-.18.051-.36.143-.53.282a1.637 1.637 0 0 0-.439.595c-.12.259-.18.6-.18 1.02v4.966H5.46V7.81zm15.693 15.64V.55H21.72V0H24v24h-2.28v-.55z"/></svg>`,
 		"An open network for secure, decentralised communication",
@@ -275,13 +332,14 @@
 	}
 	return StoreApp{
 		App{
-			"pihole",
+			"pihnole",
 			[]string{"app-pihole"},
 			[]*template.Template{
 				tmpls.Lookup("pihole.yaml"),
 			},
 			schema,
 			tmpls.Lookup("pihole.md"),
+			nil,
 		},
 		// "simple-icons:pihole",
 		`<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 24 24"><path fill="currentColor" d="M4.344 0c.238 4.792 3.256 7.056 6.252 7.376c.165-1.692-4.319-5.6-4.319-5.6c-.008-.011.009-.025.019-.014c0 0 4.648 4.01 5.423 5.645c2.762-.15 5.196-1.947 5-4.912c0 0-4.12-.613-5 4.618C11.48 2.753 8.993 0 4.344 0zM12 7.682v.002a3.68 3.68 0 0 0-2.591 1.077L4.94 13.227a3.683 3.683 0 0 0-.86 1.356a3.31 3.31 0 0 0-.237 1.255A3.681 3.681 0 0 0 4.92 18.45l4.464 4.466a3.69 3.69 0 0 0 2.251 1.06l.002.001c.093.01.187.015.28.017l-.1-.008c.06.003.117.009.177.009l-.077-.001L12 24l-.004-.005a3.68 3.68 0 0 0 2.61-1.077l4.469-4.465a3.683 3.683 0 0 0 1.006-1.888l.012-.063a3.682 3.682 0 0 0 .057-.541l.003-.061c0-.017.003-.05.004-.06h-.002a3.683 3.683 0 0 0-1.077-2.607l-4.466-4.468a3.694 3.694 0 0 0-1.564-.927l-.07-.02a3.43 3.43 0 0 0-.946-.133L12 7.682zm3.165 3.357c.023 1.748-1.33 3.078-1.33 4.806c.164 2.227 1.733 3.207 3.266 3.146c-.035.003-.068.007-.104.009c-1.847.135-3.209-1.326-5.002-1.326c-2.23.164-3.21 1.736-3.147 3.27l-.008-.104c-.133-1.847 1.328-3.21 1.328-5.002c-.173-2.32-1.867-3.284-3.46-3.132c.1-.011.203-.021.31-.027c1.847-.133 3.209 1.328 5.002 1.328c2.082-.155 3.074-1.536 3.145-2.968zM4.344 0c.238 4.792 3.256 7.056 6.252 7.376c.165-1.692-4.319-5.6-4.319-5.6c-.008-.011.009-.025.019-.014c0 0 4.648 4.01 5.423 5.645c2.762-.15 5.196-1.947 5-4.912c0 0-4.12-.613-5 4.618C11.48 2.753 8.993 0 4.344 0zM12 7.682v.002a3.68 3.68 0 0 0-2.591 1.077L4.94 13.227a3.683 3.683 0 0 0-.86 1.356a3.31 3.31 0 0 0-.237 1.255A3.681 3.681 0 0 0 4.92 18.45l4.464 4.466a3.69 3.69 0 0 0 2.251 1.06l.002.001c.093.01.187.015.28.017l-.1-.008c.06.003.117.009.177.009l-.077-.001L12 24l-.004-.005a3.68 3.68 0 0 0 2.61-1.077l4.469-4.465a3.683 3.683 0 0 0 1.006-1.888l.012-.063a3.682 3.682 0 0 0 .057-.541l.003-.061c0-.017.003-.05.004-.06h-.002a3.683 3.683 0 0 0-1.077-2.607l-4.466-4.468a3.694 3.694 0 0 0-1.564-.927l-.07-.02a3.43 3.43 0 0 0-.946-.133L12 7.682zm3.165 3.357c.023 1.748-1.33 3.078-1.33 4.806c.164 2.227 1.733 3.207 3.266 3.146c-.035.003-.068.007-.104.009c-1.847.135-3.209-1.326-5.002-1.326c-2.23.164-3.21 1.736-3.147 3.27l-.008-.104c-.133-1.847 1.328-3.21 1.328-5.002c-.173-2.32-1.867-3.284-3.46-3.132c.1-.011.203-.021.31-.027c1.847-.133 3.209 1.328 5.002 1.328c2.082-.155 3.074-1.536 3.145-2.968z"/></svg>`,
@@ -303,6 +361,7 @@
 			},
 			schema,
 			tmpls.Lookup("penpot.md"),
+			nil,
 		},
 		// "simple-icons:pihole",
 		`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M7.654 0L5.13 3.554v2.01L2.934 6.608l-.02-.009v13.109l8.563 4.045L12 24l.523-.247l8.563-4.045V6.6l-.017.008l-2.196-1.045V3.555l-.077-.108L16.349.001l-2.524 3.554v.004L11.989.973l-1.823 2.566l-.065-.091zm.447 2.065l.976 1.374H6.232l.964-1.358zm8.694 0l.976 1.374h-2.845l.965-1.358zm-4.36.971l.976 1.375h-2.845l.965-1.359zM5.962 4.132h1.35v4.544l-1.35-.638Zm2.042 0h1.343v5.506l-1.343-.635zm6.652 0h1.35V9l-1.35.637zm2.042 0h1.343v3.905l-1.343.634zm-6.402.972h1.35v5.62l-1.35-.638zm2.042 0h1.343v4.993l-1.343.634zm6.534 1.493l1.188.486l-1.188.561zM5.13 6.6v1.047l-1.187-.561ZM3.96 8.251l7.517 3.55v10.795l-7.516-3.55zm16.08 0v10.794l-7.517 3.55V11.802z"/></svg>`,
@@ -324,6 +383,7 @@
 			},
 			schema,
 			nil,
+			nil,
 		},
 		`<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 48 48"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M9.5 13c13.687 13.574 14.825 13.09 29 0"/><rect width="37" height="31" x="5.5" y="8.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" rx="2"/></svg>`,
 		"SMPT/IMAP server to communicate via email.",
@@ -344,6 +404,7 @@
 			},
 			schema,
 			tmpls.Lookup("qbittorrent.md"),
+			nil,
 		},
 		`<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 48 48"><circle cx="24" cy="24" r="21.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M26.651 22.364a5.034 5.034 0 0 1 5.035-5.035h0a5.034 5.034 0 0 1 5.034 5.035v3.272a5.034 5.034 0 0 1-5.034 5.035h0a5.034 5.034 0 0 1-5.035-5.035m0 5.035V10.533m-5.302 15.103a5.034 5.034 0 0 1-5.035 5.035h0a5.034 5.034 0 0 1-5.034-5.035v-3.272a5.034 5.034 0 0 1 5.034-5.035h0a5.034 5.034 0 0 1 5.035 5.035m0-5.035v20.138"/></svg>`,
 		"qBittorrent is a cross-platform free and open-source BitTorrent client written in native C++. It relies on Boost, Qt 6 toolkit and the libtorrent-rasterbar library, with an optional search engine written in Python.",
@@ -364,6 +425,7 @@
 			},
 			schema,
 			nil,
+			nil,
 		},
 		`<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 48 48"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M24 20c-1.62 0-6.85 9.48-6.06 11.08s11.33 1.59 12.12 0S25.63 20 24 20Z"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M24 5.5c-4.89 0-20.66 28.58-18.25 33.4s34.13 4.77 36.51 0S28.9 5.5 24 5.5Zm12 29.21c-1.56 3.13-22.35 3.17-23.93 0S20.8 12.83 24 12.83s13.52 18.76 12 21.88Z"/></svg>`,
 		"Jellyfin is a free and open-source media server and suite of multimedia applications designed to organize, manage, and share digital media files to networked devices.",
@@ -371,7 +433,19 @@
 }
 
 func CreateAppRpuppy(fs embed.FS, tmpls *template.Template) StoreApp {
-	schema, err := readJSONSchemaFromFile(fs, "values-tmpl/rpuppy.jsonschema")
+	contents, err := fs.ReadFile("values-tmpl/rpuppy.cue")
+	if err != nil {
+		panic(err)
+	}
+	ctx := cuecontext.New()
+	cfg := ctx.CompileBytes(contents)
+	if cfg.Err() != nil {
+		panic(cfg.Err())
+	}
+	if err := cfg.Validate(); err != nil {
+		panic(err)
+	}
+	schema, err := NewCueSchema(cfg.LookupPath(cue.ParsePath("input")))
 	if err != nil {
 		panic(err)
 	}
@@ -384,6 +458,7 @@
 			},
 			schema,
 			tmpls.Lookup("rpuppy.md"),
+			&cfg,
 		},
 		`<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 256 256"><path fill="currentColor" d="M100 140a8 8 0 1 1-8-8a8 8 0 0 1 8 8Zm64 8a8 8 0 1 0-8-8a8 8 0 0 0 8 8Zm64.94-9.11a12.12 12.12 0 0 1-5 1.11a11.83 11.83 0 0 1-9.35-4.62l-2.59-3.29V184a36 36 0 0 1-36 36H80a36 36 0 0 1-36-36v-51.91l-2.53 3.27A11.88 11.88 0 0 1 32.1 140a12.08 12.08 0 0 1-5-1.11a11.82 11.82 0 0 1-6.84-13.14l16.42-88a12 12 0 0 1 14.7-9.43h.16L104.58 44h46.84l53.08-15.6h.16a12 12 0 0 1 14.7 9.43l16.42 88a11.81 11.81 0 0 1-6.84 13.06ZM97.25 50.18L49.34 36.1a4.18 4.18 0 0 0-.92-.1a4 4 0 0 0-3.92 3.26l-16.42 88a4 4 0 0 0 7.08 3.22ZM204 121.75L150 52h-44l-54 69.75V184a28 28 0 0 0 28 28h44v-18.34l-14.83-14.83a4 4 0 0 1 5.66-5.66L128 186.34l13.17-13.17a4 4 0 0 1 5.66 5.66L132 193.66V212h44a28 28 0 0 0 28-28Zm23.92 5.48l-16.42-88a4 4 0 0 0-4.84-3.16l-47.91 14.11l62.11 80.28a4 4 0 0 0 7.06-3.23Z"/></svg>`,
 		"Delights users with randomly generate puppy pictures. Can be configured to be reachable only from private network or publicly.",
@@ -404,6 +479,7 @@
 			},
 			schema,
 			tmpls.Lookup("soft-serve.md"),
+			nil,
 		},
 		`<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 48 48"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="4"><path stroke-linejoin="round" d="M15.34 22.5L21 37l3 6l3-6l5.66-14.5"/><path d="M19 32h10"/><path stroke-linejoin="round" d="M24 3c-6 0-8 6-8 6s-6 2-6 7s5 7 5 7s3.5-2 9-2s9 2 9 2s5-2 5-7s-6-7-6-7s-2-6-8-6Z"/></g></svg>`,
 		"A tasty, self-hostable Git server for the command line. 🍦",
@@ -423,6 +499,7 @@
 		},
 		schema,
 		tmpls.Lookup("headscale.md"),
+		nil,
 	}
 }
 
@@ -439,6 +516,7 @@
 		},
 		schema,
 		tmpls.Lookup("headscale-user.md"),
+		nil,
 	}
 }
 
@@ -455,6 +533,7 @@
 		},
 		schema,
 		tmpls.Lookup("metallb-ipaddresspool.md"),
+		nil,
 	}
 }
 
@@ -471,6 +550,7 @@
 		},
 		schema,
 		tmpls.Lookup("env-manager.md"),
+		nil,
 	}
 }
 
@@ -487,6 +567,7 @@
 		},
 		schema,
 		tmpls.Lookup("welcome.md"),
+		nil,
 	}
 }
 
@@ -503,6 +584,7 @@
 		},
 		schema,
 		tmpls.Lookup("appmanager.md"),
+		nil,
 	}
 }
 
@@ -519,6 +601,7 @@
 		},
 		schema,
 		tmpls.Lookup("ingress-public.md"),
+		nil,
 	}
 }
 
@@ -535,6 +618,7 @@
 		},
 		schema,
 		tmpls.Lookup("cert-manager.md"),
+		nil,
 	}
 }
 
@@ -551,6 +635,7 @@
 		},
 		schema,
 		tmpls.Lookup("cert-manager-webhook-pcloud.md"),
+		nil,
 	}
 }
 
@@ -567,6 +652,7 @@
 		},
 		schema,
 		tmpls.Lookup("csi-driver-smb.md"),
+		nil,
 	}
 }
 
@@ -583,6 +669,7 @@
 		},
 		schema,
 		tmpls.Lookup("resource-renderer-controller.md"),
+		nil,
 	}
 }
 
@@ -599,6 +686,7 @@
 		},
 		schema,
 		tmpls.Lookup("headscale-controller.md"),
+		nil,
 	}
 }
 
@@ -617,6 +705,7 @@
 		},
 		schema,
 		tmpls.Lookup("dns-zone-controller.md"),
+		nil,
 	}
 }
 
@@ -633,6 +722,7 @@
 		},
 		schema,
 		tmpls.Lookup("fluxcd-reconciler.md"),
+		nil,
 	}
 }
 
diff --git a/core/installer/config.go b/core/installer/config.go
index f800aff..be35735 100644
--- a/core/installer/config.go
+++ b/core/installer/config.go
@@ -22,7 +22,7 @@
 }
 
 type Config struct {
-	Values Values `json:"values"`
+	Values Values `json:"input"` // TODO(gio): rename
 }
 
 type Values struct {
diff --git a/core/installer/repoio.go b/core/installer/repoio.go
index 31f4e28..068e994 100644
--- a/core/installer/repoio.go
+++ b/core/installer/repoio.go
@@ -219,13 +219,13 @@
 }
 
 type Release struct {
-	Namespace string `json:"Namespace"`
+	Namespace string `json:"namespace"`
 }
 
 type Derived struct {
-	Release Release        `json:"Release"`
-	Global  Values         `json:"Global"`
-	Values  map[string]any `json:"Values"`
+	Release Release        `json:"release"`
+	Global  Values         `json:"global"`
+	Values  map[string]any `json:"input"` // TODO(gio): rename to input
 }
 
 type AppConfig struct {
@@ -278,11 +278,11 @@
 	}
 	{
 		appKust := NewKustomization()
-		resources, err := app.Render(derived)
+		rendered, err := app.Render(derived)
 		if err != nil {
 			return err
 		}
-		for name, contents := range resources {
+		for name, contents := range rendered.Resources {
 			appKust.AddResources(name)
 			out, err := r.Writer(path.Join(appRootDir, name))
 			if err != nil {
@@ -419,8 +419,8 @@
 }
 
 type Network struct {
-	Name              string
-	IngressClass      string
-	CertificateIssuer string
-	Domain            string
+	Name              string `json:"name,omitempty"`
+	IngressClass      string `json:"ingressClass,omitempty"`
+	CertificateIssuer string `json:"certificateIssuer,omitempty"`
+	Domain            string `json:"domain,omitempty"`
 }
diff --git a/core/installer/schema.go b/core/installer/schema.go
index abafa15..69e7ec0 100644
--- a/core/installer/schema.go
+++ b/core/installer/schema.go
@@ -25,9 +25,10 @@
 
 const networkSchema = `
 #Network: {
-	IngressClass: string
-	CertificateIssuer: string
-	Domain: string
+    name: string
+	ingressClass: string
+	certificateIssuer: string
+	domain: string
 }
 
 value: %s
@@ -71,15 +72,17 @@
 }
 
 func NewCueSchema(v cue.Value) (Schema, error) {
-	switch v.Value().Kind() {
+	switch v.IncompleteKind() {
 	case cue.StringKind:
 		return basicSchema{KindString}, nil
+	case cue.BoolKind:
+		return basicSchema{KindBoolean}, nil
 	case cue.StructKind:
 		if isNetwork(v) {
 			return basicSchema{KindNetwork}, nil
 		}
 		s := structSchema{make(map[string]Schema)}
-		f, err := v.Fields()
+		f, err := v.Fields(cue.Schema())
 		if err != nil {
 			return nil, err
 		}
diff --git a/core/installer/values-tmpl/rpuppy.cue b/core/installer/values-tmpl/rpuppy.cue
index ebf71cb..b9d21bc 100644
--- a/core/installer/values-tmpl/rpuppy.cue
+++ b/core/installer/values-tmpl/rpuppy.cue
@@ -20,11 +20,12 @@
 
 charts: {
 	rpuppy: {
-		source: {
+		chart: "charts/rpuppy"
+		sourceRef: {
 			kind: "GitRepository"
-			address: "pcloud"
+			name: "pcloud"
+			namespace: global.id
 		}
-		chart: "./charts/rpuppy"
 	}
 }
 
@@ -63,11 +64,28 @@
 	fullNameWithTag: "\(fullName):\(tag)"
 }
 
+#Chart: {
+	chart: string
+	sourceRef: #SourceRef
+}
+
+#SourceRef: {
+	kind: "GitRepository" | "HelmRepository"
+	name: string
+	namespace: string // TODO(gio): default global.id
+}
+
 #Global: {
 	id: string
+	...
+}
+
+#Release: {
+	namespace: string
 }
 
 global: #Global
+release: #Release
 
 images: {
 	for key, value in images {
@@ -75,39 +93,38 @@
 	}
 }
 
+charts: {
+	for key, value in charts {
+		"\(key)": #Chart & value
+	}
+}
+
 #HelmRelease: {
 	_name: string
-	_chart: string
+	_chart: #Chart
 	_values: _
 
 	apiVersion: "helm.toolkit.fluxcd.io/v2beta1"
 	kind: "HelmRelease"
 	metadata: {
 		name: _name
-   		namespace: "{{ .Release.Namespace }}"
+   		namespace: release.namespace
 	}
 	spec: {
 		interval: "1m0s"
 		chart: {
-			spec: {
-				chart: _chart
-				sourceRef: {
-					kind: "HelmRepository"
-					name: "pcloud"
-					namespace: global.id
-				}
-			}
+			spec: _chart
 		}
 		values: _values
 	}
 }
 
-output: [
+output: {
 	for name, r in helm {
-		#HelmRelease & {
+		"\(name)": #HelmRelease & {
 			_name: name
-			_chart: "rpuppy"
+			_chart: r.chart
 			_values: r.values
 		}
 	}
-]
+}
diff --git a/core/installer/welcome/appmanager.go b/core/installer/welcome/appmanager.go
index 8622fdc..2f9f17a 100644
--- a/core/installer/welcome/appmanager.go
+++ b/core/installer/welcome/appmanager.go
@@ -1,7 +1,6 @@
 package welcome
 
 import (
-	"bytes"
 	"context"
 	"embed"
 	"encoding/json"
@@ -171,10 +170,10 @@
 	if err := json.Unmarshal(contents, &values); err != nil {
 		return err
 	}
-	if network, ok := values["Network"]; ok {
+	if network, ok := values["network"]; ok {
 		for _, n := range installer.CreateNetworks(global) {
 			if n.Name == network { // TODO(giolekva): handle not found
-				values["Network"] = n
+				values["network"] = n
 			}
 		}
 	}
@@ -186,12 +185,12 @@
 	if err != nil {
 		return err
 	}
-	var readme bytes.Buffer
-	if err := a.Readme.Execute(&readme, all); err != nil {
+	r, err := a.Render(all)
+	if err != nil {
 		return err
 	}
 	var resp rendered
-	resp.Readme = readme.String()
+	resp.Readme = r.Readme
 	out, err := json.Marshal(resp)
 	if err != nil {
 		return err
@@ -300,7 +299,6 @@
 	}
 	appTmpl, err := template.Must(baseTmpl.Clone()).Parse(appHtmlTmpl)
 	if err != nil {
-		fmt.Println(err)
 		return err
 	}
 	global, err := s.m.Config()
@@ -321,7 +319,6 @@
 		Instances:         instances,
 		AvailableNetworks: installer.CreateNetworks(global),
 	})
-	fmt.Println(err)
 	return err
 }
 
@@ -333,7 +330,6 @@
 	appTmpl, err := template.Must(baseTmpl.Clone()).Parse(appHtmlTmpl)
 	// tmpl, err := newTemplate().ParseFS(mgrTmpl, "appmanager-tmpl/base.html", "appmanager-tmpl/app.html")
 	if err != nil {
-		fmt.Println(err)
 		return err
 	}
 	global, err := s.m.Config()
@@ -359,7 +355,6 @@
 		Instances:         instances,
 		AvailableNetworks: installer.CreateNetworks(global),
 	})
-	fmt.Println(err)
 	return err
 }
 
