6.3 KiB
08 — Run Order (DEPRECATED)
Superseded by
10-agent-breadcrumbs.md. This file described the WP → static HTML (Stack B) run order. The pipeline now targets Stack A (PHP router + SQLite). Use10-agent-breadcrumbs.mdfor the current ordered execution checklist.
Step-by-step execution sequence for a complete .wpress → AM HTML migration. Run each command, verify the output, then proceed to the next.
Prerequisites
# Python 3.8+ required
python3 --version
# cwebp for image conversion (optional — Python fallback available)
which cwebp || echo "cwebp not installed — will use Python Pillow fallback"
# Set project domain variable (use throughout)
export DOMAIN="vibrantyou.yoga"
export PROJECT="/home/sirdrez/arisingmedia-websites/$DOMAIN"
export SOPS="/home/sirdrez/arisingmedia-websites/.am-webdesign-sops"
export WPRESS=$(ls $PROJECT/.planning/*.wpress | head -1)
echo "Domain: $DOMAIN"
echo "Project: $PROJECT"
echo "Archive: $WPRESS"
Phase 0 — Setup
# Create directory structure
mkdir -p $PROJECT/{src/{about,services,contact,blog,classes,components,assets/{css,js,images,svg,fonts}},build,infra,api,.planning/{data/{content},scripts,wpress-extract}}
# Verify archive
ls -lh $WPRESS
file $WPRESS
Phase 1 — Extract archive
python3 $SOPS/wp-divi-pipeline/scripts/extract_wpress.py \
"$WPRESS" \
"$PROJECT/.planning/wpress-extract/"
# Verify
ls $PROJECT/.planning/wpress-extract/
cat $PROJECT/.planning/wpress-extract/package.json | python3 -m json.tool | head -20
ls -lh $PROJECT/.planning/wpress-extract/database.sql
Expected output: DONE: N files | X MB
Phase 2 — Database analysis
python3 $SOPS/wp-divi-pipeline/scripts/analyze_db.py \
"$PROJECT/.planning/wpress-extract/" \
"$PROJECT/.planning/data/"
# Verify
cat $PROJECT/.planning/data/site-info.json
echo "Pages: $(python3 -c "import json; print(len(json.load(open('$PROJECT/.planning/data/pages.json'))))")"
cat $PROJECT/.planning/data/design-system.json
Expected output: pages.json (N pages/posts)
If pages = 0, check the SQL prefix detection in the script output.
Phase 3 — Content extraction
Divi 5 (most common — check design-system.json divi_version first)
python3 $SOPS/wp-divi-pipeline/scripts/extract_divi5.py \
"$PROJECT/.planning/data/pages.json" \
"$PROJECT/.planning/data/content/"
# Verify
ls $PROJECT/.planning/data/content/
cat $PROJECT/.planning/data/content/home.json | python3 -m json.tool | head -40
Phase 4 — Design system
Read $PROJECT/.planning/data/design-system.json and seed main.css:
cat $PROJECT/.planning/data/design-system.json
Manually translate to CSS custom properties per 04-design-system-extraction.md.
Write to: $PROJECT/src/assets/css/main.css
Key values for vibrantyou.yoga:
- Primary: #1a8a7a Dark: #0f5f53
- Body font: DM Sans Heading font: DM Serif Display
Phase 5 — Media migration
# Catalog originals (skip WP-generated size variants)
find $PROJECT/.planning/wpress-extract/uploads -type f \
\( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.webp" \) | \
grep -v -E "\-[0-9]+x[0-9]+\.(jpg|jpeg|png|webp)$" | \
sort > $PROJECT/.planning/data/media-originals.txt
echo "Original images: $(wc -l < $PROJECT/.planning/data/media-originals.txt)"
# Copy to src/assets/images/
while IFS= read -r src; do
cp "$src" "$PROJECT/src/assets/images/$(basename $src)"
done < $PROJECT/.planning/data/media-originals.txt
# Convert to WebP (cwebp path)
cd $PROJECT/src/assets/images/
for img in *.jpg *.jpeg *.png; do
[ -f "$img" ] || continue
base="${img%.*}"
cwebp -q 82 "$img" -o "${base}.webp" 2>/dev/null && rm "$img"
done
echo "WebP count: $(ls *.webp 2>/dev/null | wc -l)"
cd $PROJECT
Phase 6 — Build HTML
Per 05-content-migration.md, build pages in this order:
# 1. Write src/assets/css/main.css (design tokens — manual)
# 2. Write src/assets/css/components.css (manual)
# 3. Write src/components/header.html (manual)
# 4. Write src/components/footer.html (manual)
# 5. Write src/assets/js/components.js (fetch + inject)
# 6. Write src/assets/js/main.js (scroll, animations)
# 7. Write src/index.html (home page — first, establishes design)
# 8. Write remaining pages
# After build, verify zero unreplaced placeholders
grep -r "{{" $PROJECT/src --include="*.html" && echo "FAIL: placeholders found" || echo "OK"
# Verify no Divi residue
grep -rn "et_pb_\|wp:divi\|\[et_pb" $PROJECT/src --include="*.html" && echo "FAIL: Divi residue" || echo "OK"
Phase 7 — SEO audit
cd $PROJECT/src
# All pages have title
find . -name "*.html" | grep -v "_template" | xargs grep -L '<title>' | head
# All pages have canonical
find . -name "*.html" | grep -v "_template" | xargs grep -L 'rel="canonical"' | head
# All pages have JSON-LD
find . -name "*.html" | grep -v "_template" | xargs grep -L 'ld+json' | head
cd $PROJECT
All commands must return empty output.
Phase 8 — Infra (Docker)
# Copy infra from reference project
cp /home/sirdrez/arisingmedia-websites/vibrantyoucoaching.com/Dockerfile $PROJECT/
cp /home/sirdrez/arisingmedia-websites/vibrantyoucoaching.com/docker-compose.yml $PROJECT/
cp -r /home/sirdrez/arisingmedia-websites/vibrantyoucoaching.com/infra/ $PROJECT/infra/
# Update nginx.conf: set server_name to $DOMAIN, add redirects from 07-seo-preservation.md
# Update docker-compose.yml: set container_name and port
# Test build
docker compose -f $PROJECT/docker-compose.yml build 2>&1 | tail -5
docker compose -f $PROJECT/docker-compose.yml up -d
curl -I http://localhost:PORT/ 2>&1 | head -5
Phase 9 — Protection check
# Run after deploy
bash $SOPS/tools/verify-protection.sh https://$DOMAIN
# Must return exit 0 with no FAIL lines
Checklist summary
- Phase 0: Directories created
- Phase 1: .wpress extracted, database.sql present
- Phase 2: pages.json > 0 entries, design-system.json has colors + fonts
- Phase 3: content/ dir has one JSON per page
- Phase 4: main.css written with full :root{} token block
- Phase 5: WebP images in src/assets/images/
- Phase 6: All HTML pages built, zero {{ placeholders, zero Divi residue
- Phase 7: All SEO audit commands return empty
- Phase 8: Docker container up, curl returns 200
- Phase 9: verify-protection.sh exits 0