From 34f06b0a1e28442f3e81c5ae73d9597dd42b5049 Mon Sep 17 00:00:00 2001 From: Vansh Malhotra Date: Tue, 10 Feb 2026 19:54:11 +0530 Subject: [PATCH 1/2] clean deployment url --- .../lib/trpc/routers/deploy/project/list.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/web/apps/dashboard/lib/trpc/routers/deploy/project/list.ts b/web/apps/dashboard/lib/trpc/routers/deploy/project/list.ts index aa433fbaa7..cee2e30836 100644 --- a/web/apps/dashboard/lib/trpc/routers/deploy/project/list.ts +++ b/web/apps/dashboard/lib/trpc/routers/deploy/project/list.ts @@ -55,8 +55,10 @@ export const listProjects = workspaceProcedure ORDER BY ${projects.updatedAt} DESC `); - return (result.rows as ProjectRow[]).map( - (row): Project => ({ + return (result.rows as ProjectRow[]).map((row): Project => { + const hasDeployment = row.latest_deployment_id !== null; + + return { id: row.id, name: row.name, slug: row.slug, @@ -68,9 +70,10 @@ export const listProjects = workspaceProcedure author: row.git_commit_author_handle, commitTimestamp: Number(row.git_commit_timestamp), authorAvatar: row.git_commit_author_avatar_url, - regions: ["local.dev"], - domain: row.domain, + // Only show regions/domain when there is at least one deployment + regions: hasDeployment ? ["local.dev"] : [], + domain: hasDeployment ? row.domain : null, latestDeploymentId: row.latest_deployment_id, - }), - ); + }; + }); }); From 67ed8a49cb4121284871999b74dfbd01b3bf40b3 Mon Sep 17 00:00:00 2001 From: Vansh Malhotra Date: Tue, 10 Feb 2026 20:20:01 +0530 Subject: [PATCH 2/2] fix conversion error and maintain single source of truth --- .../dashboard/lib/trpc/routers/deploy/project/list.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/web/apps/dashboard/lib/trpc/routers/deploy/project/list.ts b/web/apps/dashboard/lib/trpc/routers/deploy/project/list.ts index cee2e30836..fd1586f5ec 100644 --- a/web/apps/dashboard/lib/trpc/routers/deploy/project/list.ts +++ b/web/apps/dashboard/lib/trpc/routers/deploy/project/list.ts @@ -56,7 +56,9 @@ export const listProjects = workspaceProcedure `); return (result.rows as ProjectRow[]).map((row): Project => { - const hasDeployment = row.latest_deployment_id !== null; + // Single source of truth for "has deployment" in the UI: + // we consider a deployment present when we have commit metadata from the joined row. + const hasDeployment = row.git_commit_timestamp !== null; return { id: row.id, @@ -68,9 +70,11 @@ export const listProjects = workspaceProcedure commitTitle: row.git_commit_message, branch: row.git_branch ?? "main", author: row.git_commit_author_handle, - commitTimestamp: Number(row.git_commit_timestamp), + // Preserve null instead of coercing to 0 when there is no deployment + commitTimestamp: + row.git_commit_timestamp === null ? null : Number(row.git_commit_timestamp), authorAvatar: row.git_commit_author_avatar_url, - // Only show regions/domain when there is at least one deployment + // Only show regions/domain when we have a deployment (and thus commit data) regions: hasDeployment ? ["local.dev"] : [], domain: hasDeployment ? row.domain : null, latestDeploymentId: row.latest_deployment_id,