Skip to content

feat: Codatta-to-Humanbased migration landing at app.codatta.io - #369

Open
zouqone wants to merge 1 commit into
mainfrom
feat/codatta-humanbased-landing
Open

feat: Codatta-to-Humanbased migration landing at app.codatta.io#369
zouqone wants to merge 1 commit into
mainfrom
feat/codatta-humanbased-landing

Conversation

@zouqone

@zouqone zouqone commented Jun 26, 2026

Copy link
Copy Markdown

Summary

Replace the Navigate to=\"/app\" index redirect with a brand-rename landing screen. Visitors who hit app.codatta.io/ now see the canonical Humanbased Design System hero before the legacy app:

            Codatta is now
            Humanbased.

[ Migrate your account ]   -> https://contributor.humanbased.ai/migrate
[ Humanbased.ai        ]   -> https://contributor.humanbased.ai

The page is implemented as src/views/migration-landing.tsx, lazy-imported into app.routes.tsx and mounted at the existing root index slot. Everything under /app/*, /account/*, /m/referral, the frontier/dataset routes, etc. continues to resolve as before.

Why

  • Codatta is being rebranded to Humanbased; users hitting the legacy domain should be told (not silently redirected mid-flight).
  • The DS team supplied the exact layout in Humanbased Design System (1)/ui_kits/contributor/codatta.html (40x40 black mark + 64/80 bold headline + 288px column of two pills). This PR ports that page into the live router.

Scope (what does NOT change)

  • All /app/* deep links still work. Existing users with bookmarks into Codatta land where they used to.
  • No global navigation / layout changes. The landing is a one-screen page with its own styles.
  • No dependency changes (the package-lock.json churn from a local npm install was reverted out of this PR).
  • No backend or codatta-connect changes.

Cross-domain cookie note

The destination https://contributor.humanbased.ai/migrate sets the hb_migrated=true funnel cookie on its own mount. We deliberately do NOT try to set it from this page: browsers reject Domain=.humanbased.ai cookie writes initiated from app.codatta.io (cross-domain), so attempting it would be silent dead code.

Validation

  • Local Vite dev (npx vite on this branch) renders the landing at http://localhost:5175/.
  • Cross-checked that the two CTAs use <a href> (not useNavigate) so middle-click / Cmd-click still open in a new tab.
  • Existing routes confirmed unaffected: /app and /app/... still mount AppLayout and the prior views.
  • TypeScript: the touched file imports only react-router-dom + react types already in use by the project; no new transitive dependencies introduced.

Rollback

Revert the PR -- the original Navigate to=\"/app\" is one line of restoration. No data, schema, or cookie state to clean up.

🤖 Generated with Claude Code

When a visitor lands on app.codatta.io they see the brand-rename
announcement first instead of being silently redirected into the legacy
app. The landing is a centered hero:

  Codatta is now
  Humanbased.

  [ Migrate your account ]  -> https://contributor.humanbased.ai/migrate
  [ Humanbased.ai        ]  -> https://contributor.humanbased.ai

Layout mirrors the canonical Humanbased Design System reference
(Humanbased Design System (1)/ui_kits/contributor/codatta.html):
40x40 black mark, 64/80 bold headline, 288px column of two pills on a
12px-gutter white panel.

The destination /migrate page (humanbased-monorepo) sets the
hb_migrated=true funnel cookie on its own mount. We cannot drop it here
because browsers reject cross-domain cookie writes (Domain=.humanbased.ai
set from app.codatta.io is silently dropped).

Existing deep links (/app/*, /account/*, /m/referral, etc.) continue to
resolve as before -- only the root index route was changed from the
prior Navigate to /app into the new landing component.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@beingzy

beingzy commented Jun 26, 2026

Copy link
Copy Markdown

Code Review by ⚡ Codex

🚫 BLOCK

The new root route can fail on direct visits because it introduces a lazy component without an available Suspense boundary. That breaks the main behavior this patch is adding.

Review comment:

  • [P1] Wrap the new lazy root route in Suspense — /private/var/folders/5m/vyw4bn4d1t9bmjlqq3wy11tc0000gn/T/crosscheck-repo-01cBw6/src/router/routes/app.routes.tsx:65-65
    When / is loaded directly, this new index route renders a React.lazy component, but the router tree in src/router.tsx does not provide a Suspense boundary. The previous root route was a synchronous <Navigate>, so this change makes the landing page suspend during initial render and can blank/crash the root entry point unless the route is wrapped in Suspense or imported eagerly.

Reviewed with OpenAI Codex via Crosscheck

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants