Astro Migration: Cursor Cloud PRs Audit (2026-03-10)

Context: Multiple migration tickets were triggered via Cursor Cloud outside the planned phase order. This audit maps each PR/branch to the migration plan and recommends use vs. delete-and-rerun.

Plan reference: knowledge/plans/brainforge-website-webflow-to-code-migration-2026/brainforge-website-webflow-to-code-migration-2026.md (Phases 1–5).


Current state

  • Phase 1 (Foundation): PR #334 (Astro marketing site setup, cursor/AI-834-astro-marketing-site-setup-c1d7) is MERGED → base Astro app in apps/marketing-site/ is on main.
  • All other migration PRs are DRAFT, from Cursor Cloud runs on 2026-03-10. Their branches are based off a common ancestor with main; full-diff stats are noisy (knowledge/binaries, transcript churn). The relevant changes are confined to apps/marketing-site/ and .github/.

Phase mapping and recommendation by PR

Phase 1 (Foundation) – use first

PRBranchTicketWhat it doesRecommendation
387cursor/PLT-835-railway-ci-cd-configuration-ed23Railway CI/CD configurationAdds marketing-site-cicd.yml, nixpacks.toml, deployment-promotion-flow.md, CI tweaks (~6 files)USE – Merge first. Completes BF-WEB-2 (CI/CD).

Phase 1 / early Phase 2 (design tokens + stub pages) – use next

PRBranchTicketWhat it doesRecommendation
388cursor/PLT-1147-gradient-token-system-1561Gradient token systemtokens.css, MarketingPageShell.astro, stubs for about-us, pricing, services, index updates (~11 files)USE – Merge after PLT-835. Covers design tokens (BF-WEB-3) and early page shells.

Phase 2 / 3 – QA and design (use when doing those phases)

PRBranchTicketWhat it doesRecommendation
382cursor/PLT-1135-visual-regression-qa-setup-d523Visual regression QA setupWorkflow, scripts/visual-regression.mjs, baselines (screenshots for home, blog, case-studies, services, lp-*) (~19 files)USE LATER – After core pages exist. May need to regenerate baselines if page structure changes.
395cursor/PLT-1134-a11y-baseline-checks-cecdA11y baseline checksScripts, a11y reports, checklist (~14 files)USE – When you do Phase 2/3 QA. No conflict with page order.

Phase 3 – Blog (use in Phase 3 order)

PRBranchTicketWhat it doesRecommendation
383cursor/PLT-1137-webflow-blog-import-transformer-9eddWebflow blog import transformerwebflow-blog-transform.mjs, fixtures, content config (~8 files)USE – Merge when starting blog migration. Script + schema.
384cursor/PLT-1138-astro-blog-content-templates-0129Astro blog content templatesBlog index/slug pages, RichContentBlocks.astro, content config, sample posts (~15 files)USE – After or with 1137. Templates + content structure.
390cursor/PLT-1139-blog-posts-media-migration-11b6Blog posts media migration~280 files: many blog images (binaries) + stub markdown posts, manifest, reportsCAUTION – Large. Either (a) merge when ready for full blog content and resolve conflicts, or (b) re-run a single “blog content + media” job in phase and use 1137/1138 as reference.

Phase 3 – Forms (overlapping – pick one strategy)

PRBranchTicketWhat it doesRecommendation
391cursor/PLT-1142-cal-com-scheduling-embeds-3320Cal.com scheduling embedsCalBookingEmbed.astro, CalBookingPage.astro, config/cal.ts, page wiring (~11 files)USE – Self-contained. Good to merge for Cal.com (BF-WEB-12).
392cursor/PLT-1141-newsletter-lead-forms-backend-4671Newsletter lead forms backendapi/forms/submit.ts, .env.example, README; also trivial edits to many webflow-export HTML filesUSE PARTS – Keep api/forms/submit.ts and form-related config; consider dropping the bulk webflow-export HTML touch if you don’t need them.
394cursor/PLT-1143-submission-controls-telemetry-e086Submission controls telemetrylib/forms/ (constants, schema, rateLimit, telemetry), api/forms/contact.ts, index.astro form (~12 files)USE – Complements 1141/846 (telemetry + contact form). Merge after picking forms strategy.
396cursor/PLT-846-website-forms-orchestration-0066Website forms orchestrationCalEmbed.astro, lib/forms.ts, api/forms/submit.ts, pages (consultation, workshop, index) (~15 files)OVERLAP – Same space as 1141/1142/1143. Either merge 846 and then add 1142 (Cal.com) + 1143 (telemetry) on top, or use 1142 + 1141 + 1143 and skip 846.

Phase 3 – Design and motion

PRBranchTicketWhat it doesRecommendation
389cursor/PLT-1146-icon-asset-pipeline-2a91Icon asset pipelinesync-icons.mjs, icon SVGs, Icon.astro, manifest, registry (~33 files)USE – Fits BF-WEB-13 (icons).
397cursor/PLT-1145-priority-animations-performance-019ePriority animations performanceMotionRuntime.astro, Layout/index/global.css motion, perf docs (~9 files)USE – Fits BF-WEB-13 (animations). May conflict with 1147/1146 on index.astro / global.css; resolve when merging.

Phase 3 – QA / docs only

PRBranchTicketWhat it doesRecommendation
393cursor/PLT-1144-form-end-to-end-qa-5ff4Form end-to-end QADocs/checklist only (docs/qa/plt-1144-form-e2e-launch-readiness.md) (~3 files)USE – No code conflict. Merge when doing form QA.

Phase 4 – SEO

PRBranchTicketWhat it doesRecommendation
386cursor/PLT-1136-environment-indexing-policy-ded4Environment indexing policyrobots.txt.ts, lib/seo/indexingPolicy.ts, Layout, verify script, docs (~13 files)USE – Phase 4 SEO (BF-WEB-16/17).
385cursor/PLT-1140-blog-redirects-coverage-e748Blog redirects coverageblog-redirect-map.json, parity script, reports (~13 files)USE – When blog URLs are final. Phase 4 redirects.

Conflicts to expect

  • .github/workflows/ci.yml and .github/scripts/document-council-pr.js are modified in almost every branch (each run added or adjusted something for marketing-site). When merging in sequence, keep one coherent CI shape (e.g. from PLT-835) and for other PRs either drop their ci.yml/document-council-pr.js hunks or resolve manually.
  • apps/marketing-site/README.md and package.json / package-lock.json are touched by many branches – resolve in merge order.
  • index.astro / global.css / Layout: 1147, 1145, 1146, 1143, 846 all touch these – merge in small batches and resolve.

Suggested merge order (to use code without full rerun)

  1. PLT-835 (Railway CI/CD) – Phase 1.
  2. PLT-1147 (Gradient tokens + shell + stubs) – Phase 1/2.
  3. PLT-1146 (Icons) – then PLT-1145 (Animations); resolve index/global.css if needed.
  4. PLT-1142 (Cal.com).
  5. PLT-1137 then PLT-1138 (Blog transform + templates).
  6. PLT-1139 (Blog media + posts) – only if you want to keep the current bulk import; else re-run in phase.
  7. Forms: either PLT-846 then PLT-1142 + PLT-1143, or PLT-1141 + PLT-1142 + PLT-1143 (and skip 846). Then PLT-1144 (QA doc).
  8. PLT-1136 (Indexing/SEO), then PLT-1140 (Blog redirects).
  9. PLT-1135 (Visual regression) – after core pages are stable; regenerate baselines if needed.
  10. PLT-1134 (A11y) – when doing QA.

What to delete / re-run in phase

  • Don’t delete the branches above unless you decide to re-run those tickets from scratch. You can close the DRAFT PRs and still cherry-pick or merge the branches in the order above.
  • PLT-1139 (blog media): only re-run if you prefer a single clean “blog content + media” run in Phase 3 instead of merging the large 280-file PR.
  • If you want a strict phase-by-phase run with no cross-phase mixing, then close all DRAFT PRs, don’t merge the branches, and re-trigger Cursor Cloud (or local agents) per phase: 1 → 2 → 3 → 4 → 5. The merged Phase 1 (AI-834) stays; everything else would be redone in order.

Summary

OutcomeAction
Reuse most codeMerge branches in the suggested order; resolve CI and shared files (README, package.json, index.astro, global.css) at each step.
Reuse only Phase 1 + a fewMerge PLT-835 and PLT-1147; then do Phase 2 (core pages) properly; then pick specific PRs (e.g. 1137, 1138, 1142, 1146, 1136) as you reach each phase.
Strict phases, no reuseLeave all DRAFT PRs closed; re-run migration tickets in phase order (Phase 2, then 3, then 4). Keep only AI-834 (already merged).

If you tell me which of these you prefer (reuse all / reuse Phase 1 + selected / strict rerun), I can outline the exact git steps (e.g. branch order, which PRs to close, and how to resolve the shared-file conflicts).