diff --git a/ui/src/pages/DashboardTab/DashboardL1.tsx b/ui/src/pages/DashboardTab/DashboardL1.tsx
index 0e419391..e7125867 100644
--- a/ui/src/pages/DashboardTab/DashboardL1.tsx
+++ b/ui/src/pages/DashboardTab/DashboardL1.tsx
@@ -448,27 +448,25 @@ export default function DashboardL1() {
)}
- {/* Treemap: app volume vs SLA compliance */}
+ {/* Treemap + Punchcard heatmaps side by side */}
{treemapItems.length > 0 && (
-
- navigate(`/dashboard/${id}`)}
- />
-
- )}
-
- {/* Punchcard heatmaps: transactions and errors by weekday x hour */}
- {(punchcardData?.length ?? 0) > 0 && (
-
-
-
-
-
-
+
+
+ navigate(`/dashboard/${id}`)}
+ />
+
)}
diff --git a/ui/src/pages/DashboardTab/DashboardL2.tsx b/ui/src/pages/DashboardTab/DashboardL2.tsx
index dfd080ee..5133fa5a 100644
--- a/ui/src/pages/DashboardTab/DashboardL2.tsx
+++ b/ui/src/pages/DashboardTab/DashboardL2.tsx
@@ -427,27 +427,25 @@ export default function DashboardL2() {
)}
- {/* Treemap: route volume vs SLA compliance */}
+ {/* Treemap + Punchcard heatmaps side by side */}
{treemapItems.length > 0 && (
-
- navigate(`/dashboard/${appId}/${id}`)}
- />
-
- )}
-
- {/* Punchcard heatmaps: transactions and errors by weekday x hour */}
- {(punchcardData?.length ?? 0) > 0 && (
-
-
-
-
-
-
+
+
+ navigate(`/dashboard/${appId}/${id}`)}
+ />
+
)}
diff --git a/ui/src/pages/DashboardTab/DashboardTab.module.css b/ui/src/pages/DashboardTab/DashboardTab.module.css
index 0687f310..b876c64d 100644
--- a/ui/src/pages/DashboardTab/DashboardTab.module.css
+++ b/ui/src/pages/DashboardTab/DashboardTab.module.css
@@ -123,6 +123,19 @@
width: 100%;
}
+/* Visualization row: treemap left (wider) + punchcards right (stacked) */
+.vizRow {
+ display: grid;
+ grid-template-columns: 3fr 2fr;
+ gap: 16px;
+}
+
+.punchcardStack {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+}
+
/* Errors section */
.errorsSection {
background: var(--bg-surface);