diff --git a/apps/canvas/front/src/lib/config.ts b/apps/canvas/front/src/lib/config.ts
index 572fc78..513f1f0 100644
--- a/apps/canvas/front/src/lib/config.ts
+++ b/apps/canvas/front/src/lib/config.ts
@@ -309,6 +309,7 @@
 			EmptyValidator,
 			GitRepositoryValidator,
 			ServiceValidator,
+			ServiceAnalyzisValidator,
 			GatewayHTTPSValidator,
 			GatewayTCPValidator,
 		),
@@ -488,6 +489,56 @@
 	return noName.concat(noSource).concat(noRuntime).concat(noPorts).concat(noIngress).concat(multipleIngress);
 }
 
+function ServiceAnalyzisValidator(nodes: AppNode[]): Message[] {
+	const apps = nodes.filter((n) => n.type === "app");
+	return apps
+		.filter((n) => n.data.info != null)
+		.flatMap((n) => {
+			return n.data
+				.info!.configVars.map((cv): Message | undefined => {
+					if (cv.semanticType === "PORT") {
+						if (
+							!(n.data.envVars || []).some(
+								(p) => ("name" in p && p.name === cv.name) || ("alias" in p && p.alias === cv.name),
+							)
+						) {
+							return {
+								id: `${n.id}-missing-port-${cv.name}`,
+								type: "WARNING",
+								nodeId: n.id,
+								message: `Service requires port env variable ${cv.name}`,
+							};
+						}
+					}
+					if (cv.category === "EnvironmentVariable") {
+						if (
+							!(n.data.envVars || []).some(
+								(p) => ("name" in p && p.name === cv.name) || ("alias" in p && p.alias === cv.name),
+							)
+						) {
+							if (cv.semanticType === "FILESYSTEM_PATH") {
+								return {
+									id: `${n.id}-missing-env-${cv.name}`,
+									type: "FATAL",
+									nodeId: n.id,
+									message: `Service requires env variable ${cv.name}, representing filesystem path`,
+								};
+							} else if (cv.semanticType === "POSTGRES_URL") {
+								return {
+									id: `${n.id}-missing-env-${cv.name}`,
+									type: "FATAL",
+									nodeId: n.id,
+									message: `Service requires env variable ${cv.name}, representing postgres connection URL`,
+								};
+							}
+						}
+					}
+					return undefined;
+				})
+				.filter((m) => m !== undefined);
+		});
+}
+
 function GatewayHTTPSValidator(nodes: AppNode[]): Message[] {
 	const ing = nodes.filter((n) => n.type === "gateway-https");
 	const noNetwork: Message[] = ing
