2026-03-13 00:19:51 +00:00
|
|
|
#!/bin/bash
|
|
|
|
|
# Minify HTML files from src/ to production versions
|
|
|
|
|
# Usage: ./minify.sh
|
|
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
BASE_DIR="$(dirname "$0")"
|
feat: domain extension system, VCS abstraction, personal/provisioning domains, web subpages
Domain extension system (ADR-012): bash-layer dispatch activates repo_kind-conditional CLI
domains. install.nu copies domains/ tree; short_alias wrappers generated (personal, prov).
ore help and describe capabilities domain-aware.
personal domain (PersonalOntology): career skills/talks/publications/positioning, CFP
pipeline (Watching→Delivered), opportunities lifecycle, content pipeline, Sessionize
integration. Daemon pages: /career, /personal.
provisioning domain (DevWorkspace/Mixed): FSM state, next transitions, connections graph,
gates, workspace card, capabilities, backlog. Daemon page: /provisioning.
VCS abstraction layer (ADR-013): reflection/modules/vcs.nu — uniform jj/git API via
filesystem detection (.jj/ vs .git/). opmode.nu and git-event.nu migrated off ^git.
reflection/bin/jjw.nu — jj + ontoref + Radicle agent workspace lifecycle. jjw-ncl-merge.nu
registered as jj merge tool for .ontology/ NCL conflicts. init-repo.nu for new_project mode.
jj/rad not in ontoref requirements — belong in orchestration project manifests.
'Framework RepoKind: ontology/schemas/manifest.ncl gains 'Framework variant; ontoref
self-identifies as framework — no domain activates for the protocol itself.
Web presence: personal.html and provisioning.html domain subpages. index.html gains
"Project Types — Domain Extensions" section with type cards and subpage links. Nav
compacted (Arch/Prov labels, solid backdrop-filter background).
on+re: vcs-abstraction (adrs: adr-013) and agent-workspace-orchestration Practice nodes;
21 manifest capabilities; state.ncl catalysts updated.
2026-04-07 23:08:29 +01:00
|
|
|
FILES=("index.html" "personal.html" "provisioning.html" "architecture-diagram.html" "architecture-diagram-details.html")
|
2026-03-13 00:19:51 +00:00
|
|
|
|
|
|
|
|
minify_file() {
|
|
|
|
|
local filename="$1"
|
|
|
|
|
local SRC_FILE="${BASE_DIR}/src/${filename}"
|
|
|
|
|
local OUT_FILE="${BASE_DIR}/${filename}"
|
|
|
|
|
local TEMP_FILE="${OUT_FILE}.tmp"
|
|
|
|
|
|
|
|
|
|
if [ ! -f "$SRC_FILE" ]; then
|
|
|
|
|
echo " Source file not found: $SRC_FILE (skipping)"
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Minifying ${filename}..."
|
|
|
|
|
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[^>]*>)(.*?)(<\/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[^>]*>)(.*?)(<\/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+</></gs;
|
|
|
|
|
|
|
|
|
|
# Compress general whitespace
|
|
|
|
|
\$content =~ s/\s+/ /gs;
|
|
|
|
|
|
|
|
|
|
# Trim
|
|
|
|
|
\$content =~ s/^\s+|\s+\$//g;
|
|
|
|
|
|
|
|
|
|
open(my \$out, '>', '$TEMP_FILE') or die \$!;
|
|
|
|
|
print \$out \$content;
|
|
|
|
|
close(\$out);
|
|
|
|
|
" || {
|
|
|
|
|
echo "Minification failed"
|
|
|
|
|
rm -f "$TEMP_FILE"
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mv "$TEMP_FILE" "$OUT_FILE"
|
|
|
|
|
|
|
|
|
|
original=$(wc -c <"$SRC_FILE")
|
|
|
|
|
minified=$(wc -c <"$OUT_FILE")
|
|
|
|
|
saved=$((original - minified))
|
|
|
|
|
percent=$((saved * 100 / original))
|
|
|
|
|
|
|
|
|
|
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 " ${filename} ready for production"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
echo "Starting HTML minification..."
|
|
|
|
|
|
|
|
|
|
for file in "${FILES[@]}"; do
|
|
|
|
|
minify_file "$file"
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "All files minified successfully!"
|
|
|
|
|
echo ""
|