Skip to content

feat(auth): redesign initial screen with rotating globe panel behind flag#3168

Merged
ygrishajev merged 1 commit into
mainfrom
feat/auth-globe-redesign
May 13, 2026
Merged

feat(auth): redesign initial screen with rotating globe panel behind flag#3168
ygrishajev merged 1 commit into
mainfrom
feat/auth-globe-redesign

Conversation

@ygrishajev
Copy link
Copy Markdown
Contributor

@ygrishajev ygrishajev commented May 12, 2026

Why

Fixes CON-299.

The current auth screen sidebar (dotted dark panel) doesn't match the redesign direction. This PR replaces it with a live, themed panel that introduces the visual language we'll reuse across onboarding (CON-300) and the Deploying screen (CON-314): a rotating globe with region markers and a live H100 pricing line. All gated by console_auth_redesign so it ships dark.

What

  • New AuthLayoutV2 rendered when console_auth_redesign is on. The right-side form panel (tabs, OAuth, email, forgot password) is preserved verbatim — same flows, same routes.
  • New reusable Globe component under components/globe/ (cobe v2). Uses cobe v2's CSS Anchor Positioning for marker labels — no manual projection math. Rotation speed is normalized to wall-clock time so it stays the same across refresh rates and globe sizes. Eight region markers from the cobe playground "Data Centers" preset.
  • New H100PriceStatus component under components/gpu/ that calls api.v1.listGpuPrices.useQuery() and shows the cheapest H100 min price, falling back to $1.80/hr while loading or when no h100 model is returned.
  • The panel inverts the app theme — dark on a light app, light on a dark app — by wrapping its scope in the opposite shadcn theme class. Globe colors cascade through this scope.
  • New operationId: "listGpuPrices" on GET /v1/gpu-prices so the endpoint reaches the typed SDK. apps/api/swagger/openapi.json and packages/console-api-types are regenerated.
  • cobe upgraded ^0.6.5^2.0.1.
  • Specs added for Globe, H100PriceStatus, and AuthLayoutV2; existing AuthLayout, AuthPage, and snapshot tests updated.

Browser support note: CSS Anchor Positioning requires Chrome 125+, Edge 125+, Safari 26+, Firefox 147+. On older browsers the labels stay invisible (opacity fallback 0); the globe and dots still render. If wider support becomes a requirement we can add a JS-positioned fallback under @supports.

Heads-up: apps/api/swagger/openapi.json may carry the local SERVER_ORIGIN from sdk:gen:swagger — please check the servers[0].url diff before merging.

Test plan

  • Toggle the console_auth_redesign flag in Unleash; verify v1 renders identically when off and v2 renders when on
  • In light mode: panel is dark, globe canvas is dark, pink markers + indigo pill tooltips
  • In dark mode: panel is light, globe canvas is light, same marker/tooltip colors
  • H100 price line updates from $1.80 fallback to the live min once /v1/gpu-prices resolves
  • Tooltips track their markers as the globe rotates; fade as they cross the back hemisphere
  • Rotation looks identical on a wide and a narrow viewport (no frame-rate drift)
  • Form panel: log in, sign up, OAuth (Google/GitHub), forgot password — same behavior as v1
Screen.Recording.2026-05-12.at.17.14.30.mov
Screen.Recording.2026-05-12.at.17.14.14.mov

Summary by CodeRabbit

  • New Features

    • Interactive globe visualization for auth pages
    • H100 GPU pricing indicator component
    • New optional redesigned auth layout (toggleable via feature flag); legacy sidebar replaced with fixed marketing panel
  • Improvements

    • OpenAPI: added operationId for GPU prices and explicit date defaults in schema
    • Added runtime support for the globe visualization (new dependency included)
  • Tests

    • Added/expanded tests for globe, auth layouts, and H100 price status components

Review Change Stack

Comment thread package-lock.json
@codecov
Copy link
Copy Markdown

codecov Bot commented May 12, 2026

Codecov Report

❌ Patch coverage is 71.81818% with 31 lines in your changes missing coverage. Please review.
✅ Project coverage is 63.70%. Comparing base (af0dcdb) to head (9f56ae8).
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
...ps/deploy-web/src/components/globe/Globe/Globe.tsx 57.74% 26 Missing and 4 partials ⚠️
.../src/components/auth/AuthLayoutV2/AuthLayoutV2.tsx 83.33% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3168      +/-   ##
==========================================
+ Coverage   63.68%   63.70%   +0.01%     
==========================================
  Files        1081     1085       +4     
  Lines       26197    26293      +96     
  Branches     6357     6384      +27     
==========================================
+ Hits        16684    16749      +65     
- Misses       8325     8352      +27     
- Partials     1188     1192       +4     
Flag Coverage Δ
api 84.69% <ø> (ø)
deploy-web 46.67% <71.81%> (+0.13%) ⬆️
log-collector 85.85% <ø> (ø)
notifications 91.06% <ø> (ø)
provider-console 81.48% <ø> (ø)
provider-inventory 80.00% <ø> (ø)
provider-proxy 85.21% <ø> (ø)
tx-signer 78.14% <ø> (ø)
Files with missing lines Coverage Δ
...-web/src/components/auth/AuthLayout/AuthLayout.tsx 100.00% <100.00%> (ø)
...oy-web/src/components/auth/AuthLayoutV2/markers.ts 100.00% <100.00%> (ø)
...ploy-web/src/components/auth/AuthPage/AuthPage.tsx 96.72% <100.00%> (+0.29%) ⬆️
...components/gpu/H100PriceStatus/H100PriceStatus.tsx 100.00% <100.00%> (ø)
.../src/components/auth/AuthLayoutV2/AuthLayoutV2.tsx 83.33% <83.33%> (ø)
...ps/deploy-web/src/components/globe/Globe/Globe.tsx 57.74% <57.74%> (ø)
🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@ygrishajev ygrishajev force-pushed the feat/auth-globe-redesign branch from ac43279 to 080d376 Compare May 12, 2026 14:52
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 12, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 864e7b63-6af7-4b74-8eac-1eb2b985d6f9

📥 Commits

Reviewing files that changed from the base of the PR and between b6e27c8 and 9f56ae8.

⛔ Files ignored due to path filters (3)
  • apps/api/test/functional/__snapshots__/docs.spec.ts.snap is excluded by !**/*.snap
  • apps/deploy-web/src/components/auth/AuthLayout/__snapshots__/AuthLayout.spec.tsx.snap is excluded by !**/*.snap
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (18)
  • apps/api/src/gpu/routes/gpu.router.ts
  • apps/api/swagger/openapi.json
  • apps/deploy-web/package.json
  • apps/deploy-web/public/images/auth-panel-noise.webp
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.spec.tsx
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.spec.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/markers.ts
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.spec.tsx
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.spec.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.tsx
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.spec.tsx
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.tsx
  • apps/deploy-web/src/types/feature-flags.ts
  • packages/console-api-types/src/operations.gen.ts
  • packages/console-api-types/src/schema.d.ts
✅ Files skipped from review due to trivial changes (6)
  • apps/deploy-web/package.json
  • apps/api/src/gpu/routes/gpu.router.ts
  • packages/console-api-types/src/operations.gen.ts
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.spec.tsx
  • apps/api/swagger/openapi.json
  • packages/console-api-types/src/schema.d.ts
🚧 Files skipped from review as they are similar to previous changes (8)
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.spec.tsx
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.spec.tsx
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.spec.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.spec.tsx
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.tsx
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.tsx

📝 Walkthrough

Walkthrough

Adds GPU pricing API operationId and types. Implements a client-side cobe Globe with theme-aware colors and marker tooltips. Introduces AuthLayoutV2 that uses the Globe and REGION_MARKERS. Adds H100PriceStatus component that queries listGpuPrices. Refactors AuthLayout to static marketing content and gates the new layout behind console_auth_redesign.

Changes

Auth Redesign with Globe Visualization and GPU Pricing

Layer / File(s) Summary
GPU Pricing API Endpoint Definition
apps/api/src/gpu/routes/gpu.router.ts, apps/api/swagger/openapi.json, packages/console-api-types/src/operations.gen.ts, packages/console-api-types/src/schema.d.ts
Adds operationId: listGpuPrices to the router and OpenAPI, sets explicit date defaults in openapi.json, and inserts generated operations.listGpuPrices and schema types for the GET /v1/gpu-prices endpoint.
Globe Visualization Component with cobe
apps/deploy-web/package.json, apps/deploy-web/src/components/globe/Globe/Globe.tsx, apps/deploy-web/src/components/globe/Globe/Globe.spec.tsx
Adds cobe dependency and implements a client-only Globe component (canvas, ResizeObserver sizing, theme-token color parsing, animation loop, marker label overlays) with tests for lifecycle, theme handling, and label rendering.
H100 GPU Price Status Component
apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.tsx, apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.spec.tsx
New client component queries api.v1.listGpuPrices.useQuery(), computes minimum h100 hourly price, renders "H100 GPUs: Starting at …/hr" with fallback, and includes tests for loading, selection, and fallback.
AuthLayoutV2 Redesigned Two-Column Layout
apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.tsx, apps/deploy-web/src/components/auth/AuthLayoutV2/markers.ts, apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.spec.tsx
Adds AuthLayoutV2 with dynamic Globe import, DEPENDENCIES, REGION_MARKERS, optional topRightContent slot, deployment guide link, and tests that assert Globe receives expected markers.
AuthLayout Legacy Layout Static Content
apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.tsx, apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.spec.tsx
Removes sidebar prop and replaces previous injected sidebar with static marketing content (logo, tagline, three feature rows with icons). Tests updated to exercise default sidebar rendering.
Feature Flag and AuthPage Integration
apps/deploy-web/src/types/feature-flags.ts, apps/deploy-web/src/components/auth/AuthPage/AuthPage.tsx, apps/deploy-web/src/components/auth/AuthPage/AuthPage.spec.tsx
Adds console_auth_redesign flag to FeatureFlag union. Refactors AuthPage to conditionally render AuthLayoutV2 (injecting H100PriceStatus) when flag enabled, or legacy AuthLayout when disabled; extracts formContent and updates tests to cover both paths.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/auth-globe-redesign

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 12, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{}

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/api/swagger/openapi.json`:
- Line 1950: The OpenAPI spec contains hard-coded default date values
("default": "2026-05-12") that conflict with the runtime Zod default (new
Date().toISOString().split("T")[0]); remove the static "default" properties for
those date schema entries (the occurrences with value "2026-05-12") so the spec
does not advertise a stale fixed default—locate the JSON objects where
"default": "2026-05-12" appears and delete those "default" keys so the runtime
dynamic default remains the single source of truth.

In `@apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.spec.tsx`:
- Around line 1-5: Reorder the imports in AuthLayoutV2.spec.tsx so
external/package imports come first and relative imports last to satisfy
simple-import-sort: import from "vitest" and "@testing-library/react" before the
local import "./AuthLayoutV2" (which exports AuthLayoutV2 and DEPENDENCIES);
ensure grouping and ordering follow the ESLint simple-import-sort rules.

In `@apps/deploy-web/src/components/globe/Globe/Globe.tsx`:
- Around line 181-195: The hslStringToRgb function can produce NaN when given
malformed HSL tokens, so validate the parsed components (h, s, l) after
parseFloat in hslStringToRgb: check that each is a finite number and s and l are
within 0–100 (or normalized 0–1) and h is a finite number; if validation fails,
do not return a NaN-containing RGB—either throw or return a clear fallback
(e.g., null/undefined or a default RGB) so the caller (createGlobe/readToken
fallback) can handle it; update hslStringToRgb to perform this validation and
return the fallback signal instead of silently returning NaNs.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 0ebe1cc9-5c40-477d-8f9f-6cce8d864f2f

📥 Commits

Reviewing files that changed from the base of the PR and between af0dcdb and 080d376.

⛔ Files ignored due to path filters (2)
  • apps/deploy-web/src/components/auth/AuthLayout/__snapshots__/AuthLayout.spec.tsx.snap is excluded by !**/*.snap
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (17)
  • apps/api/src/gpu/routes/gpu.router.ts
  • apps/api/swagger/openapi.json
  • apps/deploy-web/package.json
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.spec.tsx
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.spec.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/markers.ts
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.spec.tsx
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.spec.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.tsx
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.spec.tsx
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.tsx
  • apps/deploy-web/src/types/feature-flags.ts
  • packages/console-api-types/src/operations.gen.ts
  • packages/console-api-types/src/schema.d.ts

Comment thread apps/api/swagger/openapi.json
Comment thread apps/deploy-web/src/components/globe/Globe/Globe.tsx
@ygrishajev ygrishajev force-pushed the feat/auth-globe-redesign branch from 080d376 to 6d6ea4a Compare May 12, 2026 15:16
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (1)
apps/api/swagger/openapi.json (1)

1950-1950: ⚠️ Potential issue | 🟠 Major

Hard-coded date defaults create spec/runtime mismatch.

These static defaults will become stale immediately after today, while the runtime generates today's date dynamically. Remove the "default" keys to let the runtime behavior remain the source of truth.

Also applies to: 2076-2076

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/api/swagger/openapi.json` at line 1950, Remove the hard-coded JSON
schema "default" keys that contain static date strings (e.g., "default":
"2026-05-12") so the spec matches runtime behavior which generates today's date
dynamically; locate the entries in the OpenAPI JSON where "default" is set to a
date string (the shown "default": "2026-05-12" and the other similar occurrence)
and delete those "default" fields so no static date is emitted in the schema.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/deploy-web/src/components/globe/Globe/Globe.spec.tsx`:
- Around line 60-69: The test "renders label overlays for markers that have a
label" only asserts the positive case; add a negative assertion that the
unlabeled marker does not render by calling queryByText for the unlabeled marker
text and asserting .not.toBeInTheDocument() (e.g.,
expect(screen.queryByText("unlabeled")).not.toBeInTheDocument()); place this
assertion alongside the existing expect in the same test to enforce the "no
label — should not render" behavior.

In `@apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.spec.tsx`:
- Around line 1-7: The import order breaks simple-import-sort: move the
local/relative import of DEPENDENCIES and H100PriceStatus (import { type
DEPENDENCIES, H100PriceStatus } from "./H100PriceStatus") so it appears after
all external package imports (vitest, vitest-mock-extended, testing-library, and
`@akashnetwork/console-api-types`), ensuring external module imports are grouped
first and local relative imports come last to satisfy
eslint-plugin-simple-import-sort.
- Around line 62-72: The nested mock passed directly into mock<T> for
DEPENDENCIES.useServices and the nested listGpuPrices.useQuery (currently
assigned via useServices and queryResult variables) can cause Proxy brittleness;
instead, create the mock objects first (create queryResult =
mock<ListGpuPricesResult>({ data: input.data }) and create a top-level
servicesMock = mock<ReturnType<typeof DEPENDENCIES.useServices>>() ), then
assign the nested shape onto servicesMock.api.v1.listGpuPrices.useQuery = () =>
queryResult; finally return servicesMock from the useServices stub so
DEPENDENCIES.useServices and listGpuPrices.useQuery are set by post-assignment
rather than nested in the initial mock call.

---

Duplicate comments:
In `@apps/api/swagger/openapi.json`:
- Line 1950: Remove the hard-coded JSON schema "default" keys that contain
static date strings (e.g., "default": "2026-05-12") so the spec matches runtime
behavior which generates today's date dynamically; locate the entries in the
OpenAPI JSON where "default" is set to a date string (the shown "default":
"2026-05-12" and the other similar occurrence) and delete those "default" fields
so no static date is emitted in the schema.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 7d85d178-6ab1-4dfe-82dc-dbfcb359ca3d

📥 Commits

Reviewing files that changed from the base of the PR and between af0dcdb and 6d6ea4a.

⛔ Files ignored due to path filters (2)
  • apps/deploy-web/src/components/auth/AuthLayout/__snapshots__/AuthLayout.spec.tsx.snap is excluded by !**/*.snap
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (18)
  • apps/api/src/gpu/routes/gpu.router.ts
  • apps/api/swagger/openapi.json
  • apps/deploy-web/package.json
  • apps/deploy-web/public/images/auth-panel-noise.webp
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.spec.tsx
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.spec.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/markers.ts
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.spec.tsx
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.spec.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.tsx
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.spec.tsx
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.tsx
  • apps/deploy-web/src/types/feature-flags.ts
  • packages/console-api-types/src/operations.gen.ts
  • packages/console-api-types/src/schema.d.ts

Comment thread apps/deploy-web/src/components/globe/Globe/Globe.spec.tsx
@ygrishajev ygrishajev force-pushed the feat/auth-globe-redesign branch from 6d6ea4a to c045f1c Compare May 12, 2026 15:28
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.tsx`:
- Around line 33-37: The getH100MinPrice function accepts m.price!.min without
validating it; filter the mapped values to exclude non-finite numbers (e.g.,
undefined, null, NaN, Infinity) before calling Math.min so malformed API values
don't produce NaN; specifically, in getH100MinPrice, after building prices from
data.models.filter(...).map(m => m.price!.min) apply a numeric finiteness check
(Number.isFinite) and only pass the resulting finite array to Math.min,
returning undefined if no finite values remain.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 9532a417-d133-45fd-b3ec-7ea4b255dcbb

📥 Commits

Reviewing files that changed from the base of the PR and between 6d6ea4a and c045f1c.

⛔ Files ignored due to path filters (3)
  • apps/api/test/functional/__snapshots__/docs.spec.ts.snap is excluded by !**/*.snap
  • apps/deploy-web/src/components/auth/AuthLayout/__snapshots__/AuthLayout.spec.tsx.snap is excluded by !**/*.snap
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (18)
  • apps/api/src/gpu/routes/gpu.router.ts
  • apps/api/swagger/openapi.json
  • apps/deploy-web/package.json
  • apps/deploy-web/public/images/auth-panel-noise.webp
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.spec.tsx
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.spec.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/markers.ts
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.spec.tsx
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.spec.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.tsx
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.spec.tsx
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.tsx
  • apps/deploy-web/src/types/feature-flags.ts
  • packages/console-api-types/src/operations.gen.ts
  • packages/console-api-types/src/schema.d.ts
✅ Files skipped from review due to trivial changes (5)
  • apps/deploy-web/src/components/auth/AuthLayoutV2/markers.ts
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.spec.tsx
  • packages/console-api-types/src/operations.gen.ts
  • apps/api/src/gpu/routes/gpu.router.ts
  • packages/console-api-types/src/schema.d.ts
🚧 Files skipped from review as they are similar to previous changes (7)
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.spec.tsx
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.spec.tsx
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.spec.tsx
  • apps/deploy-web/package.json
  • apps/deploy-web/src/components/globe/Globe/Globe.spec.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.tsx
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.tsx

@ygrishajev ygrishajev force-pushed the feat/auth-globe-redesign branch from c045f1c to b6e27c8 Compare May 12, 2026 15:34
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
apps/deploy-web/src/components/globe/Globe/Globe.spec.tsx (1)

1-7: ⚡ Quick win

Fix import order to satisfy simple-import-sort.

@testing-library/react should be grouped with external imports before local ./Globe imports; current order can fail lint.

Proposed diff
 import { beforeEach, describe, expect, it, vi } from "vitest";
-
-import type { DEPENDENCIES, GlobeMarker } from "./Globe";
-import { Globe } from "./Globe";
-
 import { render, screen } from "@testing-library/react";
+
+import type { DEPENDENCIES, GlobeMarker } from "./Globe";
+import { Globe } from "./Globe";

As per coding guidelines: "Import sorting must be enforced via eslint-plugin-simple-import-sort according to ESLint configuration."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/deploy-web/src/components/globe/Globe/Globe.spec.tsx` around lines 1 -
7, Reorder the imports in Globe.spec.tsx so external packages are grouped before
local files to satisfy simple-import-sort: move the "@testing-library/react"
import (render, screen) up with other external imports (vitest) and keep the
local "./Globe" and its type import after those externals; update the order of
the import lines referencing Globe and its types (Globe, DEPENDENCIES,
GlobeMarker) accordingly and re-run the linter to confirm the import-sort rule
passes.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@apps/deploy-web/src/components/globe/Globe/Globe.spec.tsx`:
- Around line 1-7: Reorder the imports in Globe.spec.tsx so external packages
are grouped before local files to satisfy simple-import-sort: move the
"@testing-library/react" import (render, screen) up with other external imports
(vitest) and keep the local "./Globe" and its type import after those externals;
update the order of the import lines referencing Globe and its types (Globe,
DEPENDENCIES, GlobeMarker) accordingly and re-run the linter to confirm the
import-sort rule passes.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 4779b2e2-3f54-44e7-ab5c-92b274f7e7e0

📥 Commits

Reviewing files that changed from the base of the PR and between c045f1c and b6e27c8.

⛔ Files ignored due to path filters (3)
  • apps/api/test/functional/__snapshots__/docs.spec.ts.snap is excluded by !**/*.snap
  • apps/deploy-web/src/components/auth/AuthLayout/__snapshots__/AuthLayout.spec.tsx.snap is excluded by !**/*.snap
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (18)
  • apps/api/src/gpu/routes/gpu.router.ts
  • apps/api/swagger/openapi.json
  • apps/deploy-web/package.json
  • apps/deploy-web/public/images/auth-panel-noise.webp
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.spec.tsx
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.spec.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.tsx
  • apps/deploy-web/src/components/auth/AuthLayoutV2/markers.ts
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.spec.tsx
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.spec.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.tsx
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.spec.tsx
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.tsx
  • apps/deploy-web/src/types/feature-flags.ts
  • packages/console-api-types/src/operations.gen.ts
  • packages/console-api-types/src/schema.d.ts
✅ Files skipped from review due to trivial changes (7)
  • apps/deploy-web/package.json
  • packages/console-api-types/src/operations.gen.ts
  • apps/deploy-web/src/components/auth/AuthLayoutV2/markers.ts
  • apps/api/src/gpu/routes/gpu.router.ts
  • apps/api/swagger/openapi.json
  • packages/console-api-types/src/schema.d.ts
  • apps/deploy-web/src/components/auth/AuthLayout/AuthLayout.spec.tsx
🚧 Files skipped from review as they are similar to previous changes (7)
  • apps/deploy-web/src/components/auth/AuthLayoutV2/AuthLayoutV2.tsx
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.spec.tsx
  • apps/deploy-web/src/components/globe/Globe/Globe.tsx
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.spec.tsx
  • apps/deploy-web/src/components/auth/AuthPage/AuthPage.tsx
  • apps/deploy-web/src/types/feature-flags.ts
  • apps/deploy-web/src/components/gpu/H100PriceStatus/H100PriceStatus.tsx

…flag

Replace the dotted dark sidebar on the auth screen with a themed panel:
a rotating cobe v2 globe, live H100 GPU pricing, and a help link. The
right-side form panel is preserved — same tabs, fields, OAuth
providers, and routes.

The globe lives under `components/globe/` as a reusable component so
the Deploying screen and future consumers can render it with their own
markers. For this screen, the cobe playground "Data Centers" preset is
used: eight region markers projected as labeled pills via cobe v2's
CSS Anchor Positioning. Rotation speed is normalized to wall-clock
time so it stays the same across refresh rates and globe sizes.

The panel inverts the app theme — dark on a light app, light on a
dark app — by wrapping the scope in the opposite class. Globe colors
cascade through this inverted scope so the dark canvas remains dark
in light mode.

H100 pricing is fetched live via api.v1.listGpuPrices.useQuery() and
rendered through a standalone H100PriceStatus component injected into
the layout's header slot. Falls back to $1.80/hr while loading or when
no h100 entry is returned. To expose the endpoint through the typed
SDK, the route gains operationId: "listGpuPrices" and the generated
swagger + console-api-types are regenerated.

All changes are gated by the console_auth_redesign flag, read inside
AuthPage. With the flag off, the screen renders identically to today.
@ygrishajev ygrishajev force-pushed the feat/auth-globe-redesign branch from b6e27c8 to 9f56ae8 Compare May 12, 2026 15:50
@ygrishajev ygrishajev added this pull request to the merge queue May 13, 2026
Merged via the queue into main with commit 2e55327 May 13, 2026
59 checks passed
@ygrishajev ygrishajev deleted the feat/auth-globe-redesign branch May 13, 2026 07:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants