# Brentwood Migration — Task Tracker & Burn Log

**Live status board + hours burn-down.** Update this as work moves. Companion docs:
[`TASK-BREAKDOWN.md`](./TASK-BREAKDOWN.md) (full item detail) · [`10-WEEK-PLAN.md`](./10-WEEK-PLAN.md) (milestones).
*Started 2026-06-03. Owners: AP · ZR · J(=IJ·RQ·YM shared) · RB · AI.*

**Status legend:** `TODO` · `WIP` (in progress) · `BLK` (blocked — note why) · `REV` (in review/QA) · `DONE`
**How to use:** set a task's status, log hours in the **Burn log** (bottom) when you finish a session,
and bump the epic's *Spent* in the burn-down. ZR keeps the board tidy + assigns J items.

---

## 📊 Burn-down (budget health) — top-down, refine after Week-1 counts

Initial epic estimates are **rough planning numbers** anchored to the brief's **~450h ceiling**
(first complete draft ~300–400h). Treat as provisional until E0-1 (DB counts) lands; then split into
per-item estimates. Update *Spent* as the Burn log grows.

| Epic | Area | Est h *(rough)* | Spent h | Status |
|---|---|--:|--:|---|
| E0 | Discovery, setup & planning | 16 | 0 | TODO |
| E1 | Environments & pipeline | 16 | 0 | TODO |
| E2 | Template framework & chrome | 40 | 0 | TODO |
| E3 | Block library (T1/T2/T3 + wrapper) | 90 | 0 | TODO |
| E4 | Migration extractor | 40 | 0 | TODO |
| E5 | Custom post types & templates | 36 | 0 | TODO |
| E6 | Content migration runs & cleanup | 70 | 0 | TODO |
| E7 | Custom features (calendar, hero, forms…) | 52 | 0 | TODO |
| E8 | Roles, permissions & approval | 10 | 0 | TODO |
| E9 | SEO, redirects & URL preservation | 18 | 0 | TODO |
| E10 | Performance, backups, image-opt | 14 | 0 | TODO |
| E11 | Tracking & analytics | 24 | 0 | TODO |
| E12 | QA | 28 | 0 | TODO |
| E13 | Training & handover | 14 | 0 | TODO |
| E14 | Launch & aftercare | 12 | 0 | TODO |
| | **TOTAL** | **480** | **0** | |

> Note: rough total (480h) sits slightly over the 450h ceiling — expected at the planning stage. The
> design-latitude calls (pixel-chasing vs clean equivalents) and Tier-A bulk efficiency are the levers
> to bring it under. **Re-baseline after E0-1.**

---

## ✅ Task board

### E0 — Discovery, setup & planning
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E0-1 | Run DB tiering counts on mirror | AP | TODO | 1 | 0 | ⏱️ unlocks all sizing |
| E0-2 | Finalize block catalog | AP | TODO | 1 | 0 | |
| E0-3 | Page inventory (tier A/B/C + blocks) | J,AP | TODO | 1 | 0 | |
| E0-4 | FinalSite discovery call | RB | TODO | 1 | 0 | 🔒 gates E11 |
| E0-5 | Confirm livestream "old way" w/ IT | RB | TODO | 1 | 0 | |
| E0-6 | Gather brand assets | RB | TODO | 1 | 0 | |
| E0-7 | Stand up tracker + cadence | AP | WIP | 1 | 0 | this doc |
| E0-8 | Confirm header/footer approach | AP,RB | TODO | 1 | 0 | Kadence vs child-theme |

### E1 — Environments & pipeline
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E1-1 | Provision DO staging droplet | AP,RB | TODO | 2 | 0 | |
| E1-2 | Security pass on SSH/creds | AP | TODO | 2 | 0 | before access stored |
| E1-3 | dev→staging deploy flow + docs | AP | TODO | 2 | 0 | |
| E1-4 | Match PHP/WP/MariaDB versions | AP | TODO | 2 | 0 | |
| E1-5 | Client review access to staging | AP | TODO | 3 | 0 | |

### E2 — Template framework & chrome
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E2-1 | Palette/typography/spacing → theme | ZR | TODO | 2 | 0 | |
| E2-2 | Header in Kadence (client-editable) | ZR | TODO | 2 | 0 | 🧩 dynamic nav |
| E2-3 | Header child-theme override bits | AP | TODO | 2 | 0 | only where needed |
| E2-4 | Footer + per-page footer-image hook | ZR | TODO | 2 | 0 | ties E7-3 |
| E2-5 | Reusable layout patterns | ZR | TODO | 2 | 0 | |
| E2-6 | Responsive pass on framework | ZR,J | TODO | 3 | 0 | |
| E2-7 | Page templates (default/hub/parents) | AP | TODO | 3 | 0 | |

### E3 — Block library (Week-2 block sprint = critical path)
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E3-1 | text-block (T1) | AP | TODO | 2 | 0 | |
| E3-2 | quote (T1) | AP | TODO | 2 | 0 | |
| E3-3 | titles/heading (T1) | AP | TODO | 2 | 0 | |
| E3-4 | photo (T1) | AP | TODO | 2 | 0 | flags: retina/border/etc |
| E3-5 | embed-code (T1) | AP | TODO | 2 | 0 | |
| E3-6 | youtube-video (T1) | AP | TODO | 2 | 0 | |
| E3-7 | embed-video (T1) | AP | TODO | 2 | 0 | |
| E3-8 | timetable → static image/PDF (T1) | AP | TODO | 2 | 0 | descoped |
| E3-9 | photo-block + -text (T2) | AP | TODO | 2 | 0 | ⏱️ workhorse |
| E3-10 | slideshow (T2) | AP | TODO | 3 | 0 | 🧩 carousel JS |
| E3-11 | inquiry-form = FinalSite wrapper (T2) | AP | TODO | 3 | 0 | 🔒 E0-4 |
| E3-12 | course-description (T2) | AP | TODO | 3 | 0 | |
| E3-13 | social-media-feed (T2) | AP | TODO | 3 | 0 | 🧩 |
| E3-14 | content-filter (T3) | AP | TODO | 4 | 0 | 🧩 hardest |
| E3-15 | course-list (T3) | AP | TODO | 4 | 0 | 🧩 needs E5-4 |
| E3-16 | staff-profile-list (T3) | AP | TODO | 4 | 0 | 🧩 needs E5-2 |
| E3-17 | livestream-list (T3) | AP | TODO | 5 | 0 | 🧩 needs E5-5 |
| E3-18 | publication-list (T3) | AP | TODO | 4 | 0 | 🧩 blog listing |
| E3-19 | calendar block | AP | TODO | 5 | 0 | → E7-1 |
| E3-20 | placement-behavior wrapper | AP | TODO | 2 | 0 | ⏱️ expandable/filter/etc |

### E4 — Migration extractor
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E4-1 | Walk content_elements (published, sorted) | AP,AI | TODO | 2 | 0 | |
| E4-2 | content_type → block mapping | AP,AI | TODO | 2 | 0 | |
| E4-3 | Pivot settings → block attributes | AP | TODO | 3 | 0 | ties E3-20 |
| E4-4 | Tags + tag→section preserved | AP | TODO | 3 | 0 | |
| E4-5 | Photos → media library (alt/caption) | AP | TODO | 3 | 0 | |
| E4-6 | Internal link rewriting (PageLink) | AP | TODO | 3 | 0 | |
| E4-7 | Hierarchy → parent/child + slug | AP | TODO | 3 | 0 | |
| E4-8 | Idempotent + unmapped-element log | AP | TODO | 3 | 0 | |
| E4-9 | Dry-run reports for QA | AP | TODO | 3 | 0 | |

### E5 — Custom post types & templates
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E5-1 | Posts (blogs+news) index/single | AP | TODO | 3 | 0 | |
| E5-2 | Staff CPT + templates | AP | TODO | 3 | 0 | departments tax |
| E5-3 | Staff bio pending-review workflow | AP | TODO | 4 | 0 | bio_draft → revisions |
| E5-4 | Courses CPT + dept/grade tax + staff link | AP | TODO | 3 | 0 | show_profiles |
| E5-5 | Livestream CPT + auto live/completed | AP | TODO | 4 | 0 | start_date/length |
| E5-6 | Shared taxonomies/tags | AP | TODO | 3 | 0 | |

### E6 — Content migration runs & cleanup
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E6-1 | Dry-run: bios/courses/blogs | AP | TODO | 3 | 0 | ⏱️ |
| E6-2 | Full extractor run | AP | TODO | 4 | 0 | |
| E6-3 | Tier-A pages cleanup (bulk) | J | TODO | 4 | 0 | ⏱️ |
| E6-4 | Tier-B pages cleanup | J,ZR | TODO | 5 | 0 | ⏱️ |
| E6-5 | Tier-C / landmark pages | AP,ZR | TODO | 4 | 0 | ⏱️ |
| E6-6 | Blogs QA (URL/author/tag/section) | J | TODO | 5 | 0 | |
| E6-7 | Bios QA (168) | J | TODO | 5 | 0 | |
| E6-8 | Courses QA (141) | J | TODO | 5 | 0 | |
| E6-9 | Media library (alt/caption/orphans) | J | TODO | 5 | 0 | |
| E6-10 | Self-hosted videos (~81, 9.7GB) | J | TODO | 5 | 0 | incl. hero |

### E7 — Custom features
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E7-1 | Custom Calendar 1:1 | AP | TODO | 5 | 0 | 🧩 multi-source |
| E7-2 | Video Hero block | AP | TODO | 4 | 0 | match /giving |
| E7-3 | Per-page footer image (ACF) | AP,ZR | TODO | 5 | 0 | |
| E7-4 | Google Login | AP | TODO | 5 | 0 | ties Staff user_id |
| E7-5 | Campaign forms + thank-you + events | AP | TODO | 6 | 0 | 🔒 E0-4 |
| E7-6 | Campaign landing-page template system | AP,ZR | TODO | 5 | 0 | |
| E7-7 | Blog auto-archiving | AP | TODO | 6 | 0 | |

### E8 — Roles, permissions & approval
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E8-1 | 118 perms → ~8 roles | AP | TODO | 6 | 0 | |
| E8-2 | Lock core admissions pages | AP | TODO | 6 | 0 | |
| E8-3 | Trust-based model elsewhere | AP | TODO | 6 | 0 | |
| E8-4 | Content-approval / pending queue | AP | TODO | 6 | 0 | |

### E9 — SEO, redirects & URLs
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E9-1 | Heading structure | AP | TODO | 6 | 0 | |
| E9-2 | Schema (Org/EduOrg/Person/Course) | AP,AI | TODO | 6 | 0 | |
| E9-3 | Sitemap/OG/thin-page/site search | AP | TODO | 6 | 0 | |
| E9-4 | 301 redirect map (all legacy URLs) | AP | TODO | 6 | 0 | ⏱️ from page_slugs |
| E9-5 | Redirect verification pass | J | TODO | 7 | 0 | |

### E10 — Performance, backups, image-opt
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E10-1 | Image auto-opt via bw-dev profiles | AP | TODO | 6 | 0 | |
| E10-2 | Page caching + CDN | AP | TODO | 6 | 0 | |
| E10-3 | Daily DB + weekly full backups | AP | TODO | 6 | 0 | verify restorable |

### E11 — Tracking & analytics 🔒
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E11-1 | GA4 + GTM + Meta Pixel baseline | AP | TODO | 4 | 0 | |
| E11-2 | Conversion events + cross-domain | AP | TODO | 6 | 0 | 🔒 |
| E11-3 | First-party journey (BW Lead AI) | AP | TODO | 6 | 0 | 🔒 |
| E11-4 | Investigate journey→FinalSite | AP,RB | TODO | 6 | 0 | open Q |
| E11-5 | Looker Studio dashboard | AP | TODO | 6 | 0 | |

### E12 — QA
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E12-1 | Cross-browser + responsive | J | TODO | 7 | 0 | |
| E12-2 | Link + redirect integrity | J | TODO | 7 | 0 | |
| E12-3 | Form testing (FinalSite + GF) | AP,J | TODO | 7 | 0 | |
| E12-4 | Tracking validation | AP | TODO | 7 | 0 | |
| E12-5 | SEO continuity check | AP | TODO | 7 | 0 | |
| E12-6 | Punch-list burn-down | ZR | TODO | 8 | 0 | |

### E13 — Training & handover
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E13-1 | 2h editor training (recorded) | RB,AP | TODO | 8 | 0 | |
| E13-2 | Photojournalism blog-workflow video | AP | TODO | 8 | 0 | |
| E13-3 | Image/video specs + upload validation | AP | TODO | 8 | 0 | |
| E13-4 | Living admin documentation | AP,ZR | TODO | 8 | 0 | |

### E14 — Launch & aftercare
| ID | Task | Owner | Status | Wk | Spent | Notes |
|---|---|---|---|---|--:|---|
| E14-1 | Pre-launch checklist | AP | TODO | 9 | 0 | |
| E14-2 | DNS cutover + smoke test | AP | TODO | 9 | 0 | Aug 1 |
| E14-3 | Launch-day QA sweep | J | TODO | 9 | 0 | |
| E14-4 | Go/no-go + client comms | RB | TODO | 9 | 0 | |
| E14-5 | 30-day bug-fix window | AP,J | TODO | 10 | 0 | → early Sept |

---

## 🔥 Burn log (append-only)

Log each work session: **date · who · item(s) · hours · note**. Roll the hours up into the burn-down
*Spent* column. ZR totals weekly for the client status report (with the RAG status per milestone).

| Date | Who | Item(s) | Hours | Note |
|---|---|---|--:|---|
| 2026-06-03 | AP | E0-7 | – | Tracker stood up (planning, not billed yet) |

### Weekly roll-up (for client report)
| Week | AP h | ZR h | J h | Week total | Cumulative | % of 450 | Milestone RAG |
|---|--:|--:|--:|--:|--:|--:|---|
| W1 | 0 | 0 | 0 | 0 | 0 | 0% | 🟢 |
