diff --git a/core/installer/app.go b/core/installer/app.go
index 6f766b9..85f7dfc 100644
--- a/core/installer/app.go
+++ b/core/installer/app.go
@@ -13,9 +13,12 @@
 type App struct {
 	Name      string
 	Templates []*template.Template
+	Schema    string
+	Readme    *template.Template
 }
 
 type AppRepository interface {
+	GetAll() ([]App, error)
 	Find(name string) (*App, error)
 }
 
@@ -38,36 +41,50 @@
 	return nil, fmt.Errorf("Application not found: %s", name)
 }
 
+func (r InMemoryAppRepository) GetAll() ([]App, error) {
+	return r.apps, nil
+}
+
 func CreateAllApps() []App {
-	tmpls, err := template.ParseFS(valuesTmpls, "values-tmpl/*.yaml")
+	tmpls, err := template.ParseFS(valuesTmpls, "values-tmpl/*")
 	if err != nil {
 		log.Fatal(err)
 	}
 	return []App{
 		// CreateAppIngressPublic(tmpls),
-		CreateAppIngressPrivate(tmpls),
-		CreateAppCoreAuth(tmpls),
-		CreateAppVaultwarden(tmpls),
-		CreateAppMatrix(tmpls),
-		CreateAppPihole(tmpls),
-		CreateAppMaddy(tmpls),
-		CreateAppQBittorrent(tmpls),
-		CreateAppJellyfin(tmpls),
-		CreateAppRpuppy(tmpls),
-		CreateAppHeadscale(tmpls),
+		CreateAppIngressPrivate(valuesTmpls, tmpls),
+		CreateAppCoreAuth(valuesTmpls, tmpls),
+		CreateAppVaultwarden(valuesTmpls, tmpls),
+		CreateAppMatrix(valuesTmpls, tmpls),
+		CreateAppPihole(valuesTmpls, tmpls),
+		CreateAppMaddy(valuesTmpls, tmpls),
+		CreateAppQBittorrent(valuesTmpls, tmpls),
+		CreateAppJellyfin(valuesTmpls, tmpls),
+		CreateAppRpuppy(valuesTmpls, tmpls),
+		CreateAppHeadscale(valuesTmpls, tmpls),
 	}
 }
 
-func CreateAppIngressPublic(tmpls *template.Template) App {
+func CreateAppIngressPublic(fs embed.FS, tmpls *template.Template) App {
+	schema, err := fs.ReadFile("values-tmpl/ingress-public.jsonschema")
+	if err != nil {
+		panic(err)
+	}
 	return App{
 		"ingress-public",
 		[]*template.Template{
 			tmpls.Lookup("ingress-public.yaml"),
 		},
+		string(schema),
+		nil,
 	}
 }
 
-func CreateAppIngressPrivate(tmpls *template.Template) App {
+func CreateAppIngressPrivate(fs embed.FS, tmpls *template.Template) App {
+	schema, err := fs.ReadFile("values-tmpl/ingress-private.jsonschema")
+	if err != nil {
+		panic(err)
+	}
 	return App{
 		"ingress-private",
 		[]*template.Template{
@@ -75,88 +92,144 @@
 			tmpls.Lookup("ingress-private.yaml"),
 			tmpls.Lookup("certificate-issuer.yaml"),
 		},
+		string(schema),
+		nil,
 	}
 }
 
-func CreateAppCoreAuth(tmpls *template.Template) App {
+func CreateAppCoreAuth(fs embed.FS, tmpls *template.Template) App {
+	schema, err := fs.ReadFile("values-tmpl/core-auth.jsonschema")
+	if err != nil {
+		panic(err)
+	}
 	return App{
 		"core-auth",
 		[]*template.Template{
 			tmpls.Lookup("core-auth-storage.yaml"),
 			tmpls.Lookup("core-auth.yaml"),
 		},
+		string(schema),
+		nil,
 	}
 }
 
-func CreateAppVaultwarden(tmpls *template.Template) App {
+func CreateAppVaultwarden(fs embed.FS, tmpls *template.Template) App {
+	schema, err := fs.ReadFile("values-tmpl/vaultwarden.jsonschema")
+	if err != nil {
+		panic(err)
+	}
 	return App{
 		"vaultwarden",
 		[]*template.Template{
 			tmpls.Lookup("vaultwarden.yaml"),
 		},
+		string(schema),
+		nil,
 	}
 }
 
-func CreateAppMatrix(tmpls *template.Template) App {
+func CreateAppMatrix(fs embed.FS, tmpls *template.Template) App {
+	schema, err := fs.ReadFile("values-tmpl/matrix.jsonschema")
+	if err != nil {
+		panic(err)
+	}
 	return App{
 		"matrix",
 		[]*template.Template{
 			tmpls.Lookup("matrix-storage.yaml"),
 			tmpls.Lookup("matrix.yaml"),
 		},
+		string(schema),
+		nil,
 	}
 }
 
-func CreateAppPihole(tmpls *template.Template) App {
+func CreateAppPihole(fs embed.FS, tmpls *template.Template) App {
+	schema, err := fs.ReadFile("values-tmpl/pihole.jsonschema")
+	if err != nil {
+		panic(err)
+	}
 	return App{
 		"pihole",
 		[]*template.Template{
 			tmpls.Lookup("pihole.yaml"),
 		},
+		string(schema),
+		nil,
 	}
 }
 
-func CreateAppMaddy(tmpls *template.Template) App {
+func CreateAppMaddy(fs embed.FS, tmpls *template.Template) App {
+	schema, err := fs.ReadFile("values-tmpl/maddy.jsonschema")
+	if err != nil {
+		panic(err)
+	}
 	return App{
 		"maddy",
 		[]*template.Template{
 			tmpls.Lookup("maddy.yaml"),
 		},
+		string(schema),
+		nil,
 	}
 }
 
-func CreateAppQBittorrent(tmpls *template.Template) App {
+func CreateAppQBittorrent(fs embed.FS, tmpls *template.Template) App {
+	schema, err := fs.ReadFile("values-tmpl/qbittorrent.jsonschema")
+	if err != nil {
+		panic(err)
+	}
 	return App{
 		"qbittorrent",
 		[]*template.Template{
 			tmpls.Lookup("qbittorrent.yaml"),
 		},
+		string(schema),
+		nil,
 	}
 }
 
-func CreateAppJellyfin(tmpls *template.Template) App {
+func CreateAppJellyfin(fs embed.FS, tmpls *template.Template) App {
+	schema, err := fs.ReadFile("values-tmpl/jellyfin.jsonschema")
+	if err != nil {
+		panic(err)
+	}
 	return App{
 		"jellyfin",
 		[]*template.Template{
 			tmpls.Lookup("jellyfin.yaml"),
 		},
+		string(schema),
+		nil,
 	}
 }
 
-func CreateAppRpuppy(tmpls *template.Template) App {
+func CreateAppRpuppy(fs embed.FS, tmpls *template.Template) App {
+	schema, err := fs.ReadFile("values-tmpl/rpuppy.jsonschema")
+	if err != nil {
+		panic(err)
+	}
 	return App{
 		"rpuppy",
 		[]*template.Template{
 			tmpls.Lookup("rpuppy.yaml"),
 		},
+		string(schema),
+		tmpls.Lookup("rpuppy.md"),
 	}
 }
 
-func CreateAppHeadscale(tmpls *template.Template) App {
+func CreateAppHeadscale(fs embed.FS, tmpls *template.Template) App {
+	schema, err := fs.ReadFile("values-tmpl/headscale.jsonschema")
+	if err != nil {
+		panic(err)
+	}
 	return App{
 		"headscale",
 		[]*template.Template{
 			tmpls.Lookup("headscale.yaml"),
 		},
+		string(schema),
+		nil,
 	}
 }
