diff --git a/app/.gitignore b/app/.gitignore
index 4e90b9c81d1e624581eebe1d38e60aca2cfd83b9..cd02c38ed4e4e65c0c368af301b9fa21837f1eb9 100644
--- a/app/.gitignore
+++ b/app/.gitignore
@@ -1,3 +1,4 @@
 node_modules
 
 client/build
+server/src/public
diff --git a/app/client/config/paths.js b/app/client/config/paths.js
index b3fd764aecb3206ecf048acb147d89d56589e56b..186111066c2e58da3b0032779a195814b916f4b9 100644
--- a/app/client/config/paths.js
+++ b/app/client/config/paths.js
@@ -21,6 +21,15 @@ const publicUrlOrPath = getPublicUrlOrPath(
   process.env.PUBLIC_URL
 );
 
+// NOTE: env var supersedes default
+//
+const defaultBuildPath = resolveApp('./build');
+const { BUILD_PATH = defaultBuildPath } = process.env;
+if( BUILD_PATH.length <= 0 ){
+    process.error( new Error(`environment variable 'BUILD_PATH' is defined but empty`) );
+}
+const buildPath = path.resolve( BUILD_PATH );
+
 const moduleFileExtensions = [
   'web.mjs',
   'mjs',
@@ -52,7 +61,7 @@ const resolveModule = (resolveFn, filePath) => {
 module.exports = {
   dotenv: resolveApp('.env'),
   appPath: resolveApp('.'),
-  appBuild: resolveApp('build'),
+  appBuild: buildPath,
   appPublic: resolveApp('public'),
   appHtml: resolveApp('public/index.html'),
   appIndexJs: resolveModule(resolveApp, 'src/index'),
diff --git a/app/server/src/index.js b/app/server/src/index.js
index 10c725662c7f5ffa1ea6ce481eeed8ff31d18859..ae64c5f3ce282c5c731c1ac4a914749eb640df0c 100644
--- a/app/server/src/index.js
+++ b/app/server/src/index.js
@@ -33,7 +33,7 @@ app.use(helmet.contentSecurityPolicy({
 
 app.use(todoRoutes);
 app.use(userRoutes);
-app.use('/', express.static(path.join(__dirname,`./../../client/build`)));
+app.use('/', express.static(path.resolve(__dirname, `./public`)));
 app.use(errorRoutes);