diff --git a/core/installer/app_manager.go b/core/installer/app_manager.go
index b5815e4..fccf0b2 100644
--- a/core/installer/app_manager.go
+++ b/core/installer/app_manager.go
@@ -3,6 +3,7 @@
 import (
 	"fmt"
 	"io/ioutil"
+	"path/filepath"
 
 	"sigs.k8s.io/yaml"
 )
@@ -42,17 +43,21 @@
 	return cfg, err
 }
 
-func (m *AppManager) Install(app App, ns NamespaceGenerator, config map[string]any) error {
+func (m *AppManager) Install(app App, ns NamespaceGenerator, suffixGen SuffixGenerator, config map[string]any) error {
 	// if err := m.repoIO.Fetch(); err != nil {
 	// 	return err
 	// }
+	suffix, err := suffixGen.Generate()
+	if err != nil {
+		return err
+	}
 	namespaces := make([]string, len(app.Namespaces))
 	for i, n := range app.Namespaces {
-		var err error
-		namespaces[i], err = ns.Generate(n)
+		ns, err := ns.Generate(n)
 		if err != nil {
 			return err
 		}
+		namespaces[i] = ns + suffix
 	}
 	for _, n := range namespaces {
 		if err := m.nsCreator.Create(n); err != nil {
@@ -73,5 +78,8 @@
 		}
 	}
 	// TODO(giolekva): use ns suffix for app directory
-	return m.repoIO.InstallApp(app, "apps", all)
+	return m.repoIO.InstallApp(
+		app,
+		filepath.Join("/apps", app.Name+suffix),
+		all)
 }
diff --git a/core/installer/cmd/app_manager.go b/core/installer/cmd/app_manager.go
index 9a15c6e..8cb6cad 100644
--- a/core/installer/cmd/app_manager.go
+++ b/core/installer/cmd/app_manager.go
@@ -257,11 +257,9 @@
 			}
 		}
 	}
-	nsGen := installer.NewCombine(
-		installer.NewPrefixGenerator(config.Values.Id+"-"),
-		installer.NewRandomSuffixGenerator(3),
-	)
-	if err := s.m.Install(a.App, nsGen, values); err != nil {
+	nsGen := installer.NewPrefixGenerator(config.Values.NamespacePrefix)
+	suffixGen := installer.NewFixedLengthRandomSuffixGenerator(3)
+	if err := s.m.Install(a.App, nsGen, suffixGen, values); err != nil {
 		return err
 	}
 	return c.String(http.StatusOK, "Installed")
diff --git a/core/installer/cmd/bootstrap.go b/core/installer/cmd/bootstrap.go
index ffff0ba..d007ed2 100644
--- a/core/installer/cmd/bootstrap.go
+++ b/core/installer/cmd/bootstrap.go
@@ -403,7 +403,7 @@
 				"Namespace": namespaces[0],
 			}
 		}
-		return repo.InstallApp(*app, "infrastructure", values)
+		return repo.InstallApp(*app, filepath.Join("/infrastructure", app.Name), values)
 	}
 	appsToInstall := []string{
 		"resource-renderer-controller",
@@ -495,7 +495,7 @@
 			return err
 		}
 	}
-	return repo.InstallApp(*app, "infrastructure", map[string]any{
+	return repo.InstallApp(*app, filepath.Join("/infrastructure", app.Name), map[string]any{
 		"Global": global,
 		"Values": map[string]any{
 			"RepoIP":        bootstrapFlags.softServeIP,
diff --git a/core/installer/namespace.go b/core/installer/namespace.go
index 87cd8c4..0acc608 100644
--- a/core/installer/namespace.go
+++ b/core/installer/namespace.go
@@ -5,6 +5,43 @@
 	"fmt"
 )
 
+type SuffixGenerator interface {
+	Generate() (string, error)
+}
+
+type emptySuffixGenerator struct {
+}
+
+func NewEmptySuffixGenerator() SuffixGenerator {
+	return &emptySuffixGenerator{}
+}
+
+func (g *emptySuffixGenerator) Generate() (string, error) {
+	return "", nil
+}
+
+type fixedLengthRandomSuffixGenerator struct {
+	len int
+}
+
+func NewFixedLengthRandomSuffixGenerator(len int) SuffixGenerator {
+	return &fixedLengthRandomSuffixGenerator{len}
+}
+
+var letters = []rune("abcdefghijklmnopqrstuvwxyz")
+
+func (g *fixedLengthRandomSuffixGenerator) Generate() (string, error) {
+	r := make([]byte, g.len)
+	if _, err := rand.Read(r); err != nil {
+		return "", err
+	}
+	ret := make([]rune, g.len)
+	for i, v := range r {
+		ret[i] += letters[v%26]
+	}
+	return fmt.Sprintf("-%s", string(ret)), nil
+}
+
 type NamespaceGenerator interface {
 	Generate(name string) (string, error)
 }
@@ -20,45 +57,3 @@
 func (g *prefixGenerator) Generate(name string) (string, error) {
 	return g.prefix + name, nil
 }
-
-type randomSuffixGenerator struct {
-	len int
-}
-
-func NewRandomSuffixGenerator(len int) NamespaceGenerator {
-	return &randomSuffixGenerator{len}
-}
-
-var letters = []rune("abcdefghijklmnopqrstuvwxyz")
-
-func (g randomSuffixGenerator) Generate(name string) (string, error) {
-	r := make([]byte, g.len)
-	if _, err := rand.Read(r); err != nil {
-		return "", err
-	}
-	ret := make([]rune, g.len)
-	for i, v := range r {
-		ret[i] += letters[v%26]
-	}
-	return fmt.Sprintf("%s-%s", name, string(ret)), nil
-}
-
-type combineGenerator struct {
-	ns []NamespaceGenerator
-}
-
-func NewCombine(ns ...NamespaceGenerator) NamespaceGenerator {
-	return &combineGenerator{ns}
-}
-
-func (g *combineGenerator) Generate(name string) (string, error) {
-	cur := name
-	var err error
-	for _, i := range g.ns {
-		cur, err = i.Generate(cur)
-		if err != nil {
-			return "", err
-		}
-	}
-	return cur, nil
-}
diff --git a/core/installer/repoio.go b/core/installer/repoio.go
index 4574fee..671bfb8 100644
--- a/core/installer/repoio.go
+++ b/core/installer/repoio.go
@@ -158,19 +158,29 @@
 	return err
 }
 
-func (r *repoIO) InstallApp(app App, root string, values map[string]any) error {
-	{
-		appsKustPath := path.Join(root, "kustomization.yaml")
-		appsKust, err := r.ReadKustomization(appsKustPath)
-		if err != nil {
-			return err
-		}
-		appsKust.AddResources(app.Name)
-		if err := r.WriteKustomization(appsKustPath, *appsKust); err != nil {
-			return err
-		}
+func (r *repoIO) InstallApp(app App, appRootDir string, values map[string]any) error {
+	if !filepath.IsAbs(appRootDir) {
+		return fmt.Errorf("Expected absolute path: %s", appRootDir)
 	}
-	appRootDir := path.Join(root, app.Name)
+	appRootDir = filepath.Clean(appRootDir)
+	for p := appRootDir; p != "/"; {
+		parent, child := filepath.Split(p)
+		kustPath := filepath.Join(parent, "kustomization.yaml")
+		kust, err := r.ReadKustomization(kustPath)
+		if err != nil {
+			if errors.Is(err, fs.ErrNotExist) {
+				k := NewKustomization()
+				kust = &k
+			} else {
+				return err
+			}
+		}
+		kust.AddResources(child)
+		if err := r.WriteKustomization(kustPath, *kust); err != nil {
+			return err
+		}
+		p = filepath.Clean(parent)
+	}
 	{
 		if err := r.RemoveDir(appRootDir); err != nil {
 			return err
diff --git a/core/installer/welcome/env.go b/core/installer/welcome/env.go
index 67e51d9..ab1504d 100644
--- a/core/installer/welcome/env.go
+++ b/core/installer/welcome/env.go
@@ -181,12 +181,13 @@
 	}
 	r.CommitAndPush("initialize config")
 	nsGen := installer.NewPrefixGenerator(req.Name + "-")
+	suffixGen := installer.NewEmptySuffixGenerator()
 	{
 		app, err := appsRepo.Find("metallb-config-env")
 		if err != nil {
 			return err
 		}
-		if err := appManager.Install(*app, nsGen, map[string]any{
+		if err := appManager.Install(*app, nsGen, suffixGen, map[string]any{
 			"IngressPrivate": "10.1.0.1",
 			"Headscale":      "10.1.0.2",
 			"SoftServe":      "10.1.0.3",
@@ -203,7 +204,7 @@
 		if err != nil {
 			return err
 		}
-		if err := appManager.Install(*app, nsGen, map[string]any{}); err != nil {
+		if err := appManager.Install(*app, nsGen, suffixGen, map[string]any{}); err != nil {
 			return err
 		}
 	}
@@ -212,7 +213,7 @@
 		if err != nil {
 			return err
 		}
-		if err := appManager.Install(*app, nsGen, map[string]any{}); err != nil {
+		if err := appManager.Install(*app, nsGen, suffixGen, map[string]any{}); err != nil {
 			return err
 		}
 	}
@@ -221,7 +222,7 @@
 		if err != nil {
 			return err
 		}
-		if err := appManager.Install(*app, nsGen, map[string]any{
+		if err := appManager.Install(*app, nsGen, suffixGen, map[string]any{
 			"Subdomain": "test", // TODO(giolekva): make core-auth chart actually use this
 		}); err != nil {
 			return err
@@ -232,7 +233,7 @@
 		if err != nil {
 			return err
 		}
-		if err := appManager.Install(*app, nsGen, map[string]any{
+		if err := appManager.Install(*app, nsGen, suffixGen, map[string]any{
 			"Subdomain": "headscale",
 		}); err != nil {
 			return err
@@ -254,7 +255,7 @@
 		if err != nil {
 			return err
 		}
-		if err := appManager.Install(*app, nsGen, map[string]any{
+		if err := appManager.Install(*app, nsGen, suffixGen, map[string]any{
 			"RepoAddr":      ss.GetRepoAddress(req.Name),
 			"SSHPrivateKey": keys.Private,
 		}); err != nil {
diff --git a/core/installer/welcome/welcome.go b/core/installer/welcome/welcome.go
index d34580f..ac13f06 100644
--- a/core/installer/welcome/welcome.go
+++ b/core/installer/welcome/welcome.go
@@ -95,7 +95,8 @@
 		if err != nil {
 			return err
 		}
-		nsGen := installer.NewPrefixGenerator(config.Values.Id + "-")
+		nsGen := installer.NewPrefixGenerator(config.Values.NamespacePrefix)
+		suffixGen := installer.NewEmptySuffixGenerator()
 		appManager, err := installer.NewAppManager(s.repo, s.nsCreator)
 		if err != nil {
 			return err
@@ -106,7 +107,7 @@
 			if err != nil {
 				return err
 			}
-			if err := appManager.Install(*app, nsGen, map[string]any{
+			if err := appManager.Install(*app, nsGen, suffixGen, map[string]any{
 				"GandiAPIToken": req.GandiAPIToken,
 			}); err != nil {
 				return err
@@ -117,7 +118,7 @@
 			if err != nil {
 				return err
 			}
-			if err := appManager.Install(*app, nsGen, map[string]any{
+			if err := appManager.Install(*app, nsGen, suffixGen, map[string]any{
 				"Username": req.Username,
 				"IPSubnet": "10.1.0.0/24", // TODO(giolekva): this should be taken from the config generated during new env creation
 			}); err != nil {
