Build to side dir: change execute-reboot.sh to build into .next.new while MC keeps serving .next. Then stop, mv .next.new -> .next, start. Downtime drops from ~50s to ~5s.
Maintenance page sidecar: tiny Python or static-file server on port 4747 that takes over for those ~5s. Shows a deploying page with a progress indicator (poll /api/reboot-queue/status from the page itself).
Status endpoint: /api/reboot-queue/status returns {phase: building|swapping|starting|ready, percent: N, eta_s: N} for the maintenance page to consume.
Optional speed wins: skip lint at build time (already off?), enable webpack persistent cache (already on by default in next 15), check next.config for any heavy plugins.