Pre-launch — Gluecron is in final validation. Public signups and git hosting for non-owner users open after launch review.
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
Claude committed on June 7, 2026Parent: bb2dea9
3 files changed+102709a8b8de90e6bd7d9016e4423b3a519970d98419e
3 changed files+1027−0
Modifiedsrc/app.tsx+3−0View fileUnifiedSplit
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";
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
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 &rarr;
665 </a>
666 </div>
661667 </div>
662668 </section>
663669
664670