Commit9a8b8deunknown_key
feat: GitHub org bulk migration wizard with live progress
feat: GitHub org bulk migration wizard with live progress Adds /migrate wizard that accepts a GitHub PAT + org name, lists repos via the GitHub API, creates an in-memory session, and clones every repo sequentially in the background while a meta-refresh + JS polling page shows per-repo status (pending/cloning/done/failed) with a progress bar. Also wires the route in app.tsx and adds a "migrate your entire org" link to the landing page CTA section. https://claude.ai/code/session_01DzJMTFASjMHt2f5ze4cNLR
3 files changed+1027−09a8b8de90e6bd7d9016e4423b3a519970d98419e
3 changed files+1027−0
Modifiedsrc/app.tsx+3−0View fileUnifiedSplit
@@ -74,6 +74,7 @@ import importBulkRoutes from "./routes/import-bulk";
7474import importSecretsRoutes from "./routes/import-secrets";
7575import actionsImporterRoutes from "./routes/actions-importer";
7676import migrationRoutes from "./routes/migrations";
77import migrateRoutes from "./routes/migrate";
7778import specsRoutes from "./routes/specs";
7879import refactorRoutes from "./routes/refactors";
7980import webRoutes from "./routes/web";
@@ -602,6 +603,8 @@ app.route("/", importSecretsRoutes);
602603// GitHub Actions → Gluecron gates.yml importer (stateless converter)
603604app.route("/", actionsImporterRoutes);
604605app.route("/", migrationRoutes);
606// GitHub Org Migration Wizard — live progress bulk importer
607app.route("/", migrateRoutes);
605608
606609// Spec-to-PR (experimental AI-generated draft PRs)
607610app.route("/", specsRoutes);
Addedsrc/routes/migrate.tsx+1018−0View fileUnifiedSplit
Large file (1,018 lines). Load full file
Modifiedsrc/views/landing.tsx+6−0View fileUnifiedSplit
@@ -658,6 +658,12 @@ export const LandingHero: FC<LandingPageProps> = ({
658658 Migrate a repo
659659 </a>
660660 </div>
661 <div style="margin-top:var(--space-3);font-size:13.5px;color:var(--text-muted)">
662 Migrating from GitHub?{" "}
663 <a href="/migrate" style="color:var(--accent)">
664 Import your entire org in one click →
665 </a>
666 </div>
661667 </div>
662668 </section>
663669
664670