diff --git a/web/cashtab/Dockerfile b/web/cashtab/Dockerfile
index c4d9d99e8..c164052cf 100644
--- a/web/cashtab/Dockerfile
+++ b/web/cashtab/Dockerfile
@@ -1,29 +1,34 @@
 # Multi-stage
 # 1) Node image for building frontend assets
 # 2) nginx stage to serve frontend assets
 
 # Stage 1
 FROM node:15-buster-slim AS builder
 
 # Install some dependencies before building
 RUN apt-get update && \
   apt-get upgrade -y && \
   apt-get install -y git && \
   apt-get install -y python
 
 WORKDIR /app
 
-# Copy all files from current directory to working dir in image
+# Copy only the package files and install necessary dependencies.
+# This reduces cache busting when source files are changed.
+COPY package.json .
+COPY package-lock.json .
+RUN npm install
+
+# Copy the rest of the project files and build
 COPY . .
-# install node modules and build assets
-RUN npm install && npm run build
+RUN npm run build
 
 # Stage 2
 FROM nginx
 COPY nginx.conf /etc/nginx/conf.d/default.conf
 # Set working directory to nginx asset directory
 # Copy static assets from builder stage
 COPY --from=builder /app/build /usr/share/nginx/html/
 EXPOSE 80
 # Containers run nginx with global directives and daemon off
 ENTRYPOINT ["nginx", "-g", "daemon off;"]