recent updates
This commit is contained in:
@@ -0,0 +1,230 @@
|
||||
# 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).
|
||||
> Use `10-agent-breadcrumbs.md` for 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
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)
|
||||
|
||||
```bash
|
||||
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`:
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
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)
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
Reference in New Issue
Block a user