Skip to content

feat(frontend): add pallet clusters - #5851

Merged
jog1t merged 2 commits into
mainfrom
feat/frontend-pallet-clusters
Oct 8, 2026
Merged

jog1t merged 2 commits into
mainfrom
feat/frontend-pallet-clusters

Conversation

@jog1t

@jog1t jog1t commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor
  • Add Pallet clusters behind a feature flag, with a page for creating a cluster
  • Add a cluster overview page
  • Deploy builds to cluster workers
  • List clusters next to projects
  • Resolve BYOC clusters before Pallet on the cluster route
  • Bump @rivet-gg/cloud to the build with the v2 cluster endpoints

@railway-app

railway-app Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

🚅 Deployed to the rivet-pr-5851 environment in rivet-frontend

Service Status Web Updated
ladle ✅ Success (View Logs) Web Oct 8, 2026 at 3:37 pm UTC
frontend-cloud ✅ Success (View Logs) Web Oct 8, 2026 at 3:37 pm UTC
kitchen-sink ✅ Success (View Logs) Web Oct 8, 2026 at 3:35 pm UTC
frontend-inspector ✅ Success (View Logs) Web Oct 8, 2026 at 3:35 pm UTC
website ❌ Build Failed (View Logs) Web Oct 8, 2026 at 3:33 pm UTC
mcp-hub ✅ Success (View Logs) Web Oct 8, 2026 at 2:14 pm UTC

@railway-app
railway-app Bot temporarily deployed to rivet-frontend / rivet-pr-5851 October 8, 2026 14:12 Destroyed
@jog1t
jog1t force-pushed the feat/frontend-pallet-clusters branch from 860b668 to af5c047 Compare October 8, 2026 14:15
@jog1t jog1t changed the title feat(frontend): pallet clusters, suspended namespace screen, and inspector tab theme tokens feat(frontend): add pallet clusters Oct 8, 2026
@railway-app
railway-app Bot temporarily deployed to rivet-frontend / rivet-pr-5851 October 8, 2026 15:32 Destroyed
@jog1t
jog1t marked this pull request as ready for review October 8, 2026 15:38
@jog1t
jog1t merged commit 264483a into main Oct 8, 2026
9 of 16 checks passed
@jog1t
jog1t deleted the feat/frontend-pallet-clusters branch October 8, 2026 15:38

@the-company-company the-company-company Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟠 3 medium-severity findings

Reviewed commit 160bda7.

Comment on lines +769 to +771
const palletClusterQueryOptions = (opts: { cluster: string }) =>
queryOptions({
queryKey: [opts, "v2", "cluster"],

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟠 Medium · Scope Pallet detail caches to the organization

These detail keys include only the cluster slug, although every v2 request is authorized against the session's active organization. If a user opens prod in org A and then switches to a prod cluster in org B, fetchQuery can reuse A's fresh response and the page initially exposes A's domain, topology, and admin token; the sibling region/build/pool/node keys have the same collision and can also feed A's configuration into a mutation against B. Include organization in every Pallet detail query key (prefer current-org wrappers that close over it), as the list and existing project queries already do.

Comment on lines 24 to +25
beforeLoad: async ({ context, params }) => {
if (!features.byoc) {
if (features.byoc) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟠 Medium · Resolve Pallet clusters before BYOC clusters

When both flags are enabled and a Pallet cluster shares a slug with a BYOC cluster, this branch returns byoc before the Pallet lookup runs. Every Pallet card and switcher entry uses this shared URL, so the Pallet cluster becomes impossible to open; this also contradicts the feature contract added in this PR, which says Pallet is checked first. Query Pallet first and fall back to BYOC only on its not-found result.

Comment on lines +165 to +171
return navigate({
to: "/orgs/$organization/clusters/$cluster",
params: { organization, cluster: data.cluster },
});
},
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟠 Medium · Persist the selected plan instead of discarding it

The submit path removes plan and sends only its node count. Consequently Free and Pro produce identical API requests, as do Team and Enterprise, even though the checkout promises different prices and SLAs; nothing records which agreement the user selected. Pass a backend-supported plan/billing identifier and persist it atomically with cluster creation, or remove the plan choices and plan-specific pricing until that API exists.

This branch was successfully deployed

No deployments
rivet-frontend / rivet-pr-5851 — 160bda78 Deployed Oct 8, 2026 by railway-app[bot]
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.

1 participant