#!/bin/bash # Minify index.html from src/ to production version # Usage: ./minify.sh set -e SRC_FILE="$(dirname "$0")/src/index.html" OUT_FILE="$(dirname "$0")/index.html" TEMP_FILE="${OUT_FILE}.tmp" if [ ! -f "$SRC_FILE" ]; then echo "❌ Source file not found: $SRC_FILE" exit 1 fi echo "🔨 Minifying HTML..." echo " Input: $SRC_FILE" echo " Output: $OUT_FILE" perl -e " use strict; use warnings; open(my \$fh, '<', '$SRC_FILE') or die \$!; my \$content = do { local \$/; <\$fh> }; close(\$fh); # Remove HTML comments \$content =~ s///gs; # Compress CSS (remove spaces and comments) \$content =~ s/(]*>)(.*?)(<\/style>)/ my \$before = \$1; my \$style = \$2; my \$after = \$3; \$style =~ s{\/\*.*?\*\/}{}gs; \$style =~ s{\s+}{ }gs; \$style =~ s{\s*([{}:;,>+~])\s*}{\$1}gs; \$before . \$style . \$after; /gies; # Compress JavaScript (remove comments and extra spaces) \$content =~ s/(]*>)(.*?)(<\/script>)/ my \$before = \$1; my \$script = \$2; my \$after = \$3; \$script =~ s{\/\/.*\$}{}gm; \$script =~ s{\s+}{ }gs; \$script =~ s{\s*([{}();,])\s*}{\$1}gs; \$before . \$script . \$after; /gies; # Remove whitespace between tags \$content =~ s/>\s+', '$TEMP_FILE') or die \$!; print \$out \$content; close(\$out); " || { echo "❌ Minification failed" rm -f "$TEMP_FILE" exit 1 } mv "$TEMP_FILE" "$OUT_FILE" # Show statistics original=$(wc -c < "$SRC_FILE") minified=$(wc -c < "$OUT_FILE") saved=$((original - minified)) percent=$((saved * 100 / original)) echo "" echo "✅ Minification complete!" echo "" echo "📊 Compression statistics:" printf " Original: %6d bytes\n" "$original" printf " Minified: %6d bytes\n" "$minified" printf " Saved: %6d bytes (%d%%)\n" "$saved" "$percent" echo "" echo "✅ $OUT_FILE is ready for production"