diff --git a/cli/app/new.go b/cli/app/new.go
index e880a2a9..d9db2601 100644
--- a/cli/app/new.go
+++ b/cli/app/new.go
@@ -1,7 +1,6 @@
 package app
 
 import (
-	"errors"
 	"fmt"
 	"path"
 
@@ -9,7 +8,7 @@ import (
 	"coopcloud.tech/abra/cli/internal"
 	"coopcloud.tech/abra/pkg/catalogue"
 	"coopcloud.tech/abra/pkg/config"
-	"coopcloud.tech/abra/pkg/recipe"
+	recipePkg "coopcloud.tech/abra/pkg/recipe"
 	"coopcloud.tech/abra/pkg/secret"
 	"github.com/AlecAivazis/survey/v2"
 	"github.com/sirupsen/logrus"
@@ -81,22 +80,23 @@ var appNewCommand = &cli.Command{
 	Action:    action,
 }
 
-// getRecipe retrieves a recipe from the recipe catalogue.
-func getRecipe(recipeName string) (catalogue.RecipeMeta, error) {
+// getRecipeMeta retrieves the recipe metadata from the recipe catalogue.
+func getRecipeMeta(recipeName string) (catalogue.RecipeMeta, error) {
 	catl, err := catalogue.ReadRecipeCatalogue()
 	if err != nil {
 		return catalogue.RecipeMeta{}, err
 	}
 
-	rec, ok := catl[recipeName]
+	recipeMeta, ok := catl[recipeName]
 	if !ok {
-		return catalogue.RecipeMeta{}, fmt.Errorf("recipe '%s' does not exist?", recipeName)
+		err := fmt.Errorf("recipe '%s' does not exist?", recipeName)
+		return catalogue.RecipeMeta{}, err
 	}
-	if err := recipe.EnsureExists(rec.Name); err != nil {
+	if err := recipePkg.EnsureExists(recipeMeta.Name); err != nil {
 		return catalogue.RecipeMeta{}, err
 	}
 
-	return rec, nil
+	return recipeMeta, nil
 }
 
 // ensureDomainFlag checks if the domain flag was used. if not, asks the user for it/
@@ -172,26 +172,22 @@ func createSecrets(sanitisedAppName string) (secrets, error) {
 
 // action is the main command-line action for this package
 func action(c *cli.Context) error {
-	recipeName := c.Args().First()
-	if recipeName == "" {
-		internal.ShowSubcommandHelpAndError(c, errors.New("no recipe provided"))
-	}
+	recipe := internal.ValidateRecipe(c)
 
 	if err := config.EnsureAbraDirExists(); err != nil {
 		logrus.Fatal(err)
 	}
 
-	rec, err := getRecipe(recipeName)
+	recipeMeta, err := getRecipeMeta(recipe.Name)
 	if err != nil {
 		logrus.Fatal(err)
 	}
 
-	latestVersion := rec.LatestVersion()
-	if err := recipe.EnsureVersion(latestVersion); err != nil {
+	latestVersion := recipeMeta.LatestVersion()
+	if err := recipePkg.EnsureVersion(recipe.Name, latestVersion); err != nil {
 		logrus.Fatal(err)
 	}
 
-	// These use the flag from internal.x to check and edit so no need to return anything
 	if err := ensureServerFlag(); err != nil {
 		logrus.Fatal(err)
 	}
@@ -209,7 +205,7 @@ func action(c *cli.Context) error {
 		logrus.Fatalf("'%s' cannot be longer than 45 characters", sanitisedAppName)
 	}
 
-	if err := config.CopyAppEnvSample(recipeName, newAppName, newAppServer); err != nil {
+	if err := config.CopyAppEnvSample(recipe.Name, newAppName, newAppServer); err != nil {
 		logrus.Fatal(err)
 	}
 
@@ -229,7 +225,7 @@ func action(c *cli.Context) error {
 
 	tableCol := []string{"Name", "Domain", "Type", "Server"}
 	table := abraFormatter.CreateTable(tableCol)
-	table.Append([]string{sanitisedAppName, domain, recipeName, newAppServer})
+	table.Append([]string{sanitisedAppName, domain, recipe.Name, newAppServer})
 	defer table.Render()
 
 	return nil
diff --git a/cli/app/secret.go b/cli/app/secret.go
index f52b1afb..84fe728c 100644
--- a/cli/app/secret.go
+++ b/cli/app/secret.go
@@ -65,6 +65,14 @@ var appSecretGenerateCommand = &cli.Command{
 			}
 		}
 
+		tableCol := []string{"Name", "Value"}
+		table := abraFormatter.CreateTable(tableCol)
+		for name, val := range secretVals {
+			table.Append([]string{name, val})
+		}
+		table.Render()
+		logrus.Warn("Warning, these secrets will not be shown again, please take note of them *now*")
+
 		return nil
 	},
 }
diff --git a/pkg/recipe/recipe.go b/pkg/recipe/recipe.go
index 486973b8..433b7158 100644
--- a/pkg/recipe/recipe.go
+++ b/pkg/recipe/recipe.go
@@ -86,8 +86,8 @@ func EnsureExists(recipe string) error {
 }
 
 // EnsureVersion checks whether a specific version exists for a recipe.
-func EnsureVersion(version string) error {
-	recipeDir := path.Join(config.ABRA_DIR, "apps", strings.ToLower(version))
+func EnsureVersion(recipeName, version string) error {
+	recipeDir := path.Join(config.ABRA_DIR, "apps", recipeName)
 
 	repo, err := git.PlainOpen(recipeDir)
 	if err != nil {