From 5b6ee6876ccd1e91ee678521d961b27911492b6b Mon Sep 17 00:00:00 2001 From: Matthew Valancy Date: Thu, 18 Jun 2026 00:14:50 -0700 Subject: [PATCH] =?UTF-8?q?LAYOUT-3:=20dashboard=20=E2=80=94=20compact=20s?= =?UTF-8?q?ummary=20+=20one=20dense=20status=20grid=20(was=20sparse/oversi?= =?UTF-8?q?zed)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On desktop the dashboard read as huge boxes with tiny content: a tall near-empty "Total Tasks" banner and 9 single-digit status cards spread across 3 sparse 3-column rows. Make it clear/readable/organized: - Total Tasks becomes a compact one-line summary strip (px-5 py-3) instead of a full p-8 hero. - The 9 status cards collapse into ONE responsive grid (2 cols phone → 3 → 5 on desktop, gap-3, p-4) so they read as a tidy stat panel and the analytics section rises above the fold. Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/web/src/components/Dashboard.tsx | 48 +++++++++-------------- 1 file changed, 18 insertions(+), 30 deletions(-) diff --git a/packages/web/src/components/Dashboard.tsx b/packages/web/src/components/Dashboard.tsx index 43ff94ea..0ad8d6d1 100644 --- a/packages/web/src/components/Dashboard.tsx +++ b/packages/web/src/components/Dashboard.tsx @@ -256,22 +256,18 @@ const PieChart = ({ data, title }: { data: Array<{label: string, value: number, const Dashboard: React.FC = ({ filteredNodes, stats }) => { return (
- {/* Total Tasks - Full Width Card */} -
-
-
- -
-
-
Total Tasks
-
{stats.total}
-
-
+ {/* Summary strip — compact + content-sized (was a tall, near-empty banner) */} +
+ + Total Tasks + {stats.total}
- {/* Stats Cards - Second Row */} -
-
+ {/* Status breakdown — one compact, dense grid (was 3 sparse rows of 3 with + single-digit numbers in oversized boxes). 2 cols on phones up to 5 on + desktop so the 9 statuses read as a tidy panel, not a wall of whitespace. */} +
+
{React.createElement(getStatusConfig('NOT_STARTED').icon!, { className: `h-8 w-8 ${getStatusConfig('NOT_STARTED').color}` })} @@ -283,7 +279,7 @@ const Dashboard: React.FC = ({ filteredNodes, stats }) => {
-
+
{React.createElement(getStatusConfig('PROPOSED').icon!, { className: `h-8 w-8 ${getStatusConfig('PROPOSED').color}` })} @@ -295,7 +291,7 @@ const Dashboard: React.FC = ({ filteredNodes, stats }) => {
-
+
{React.createElement(getStatusConfig('PLANNED').icon!, { className: `h-8 w-8 ${getStatusConfig('PLANNED').color}` })} @@ -306,11 +302,7 @@ const Dashboard: React.FC = ({ filteredNodes, stats }) => {
-
- - {/* Stats Cards - Third Row */} -
-
+
{React.createElement(getStatusConfig('IN_PROGRESS').icon!, { className: `h-8 w-8 ${getStatusConfig('IN_PROGRESS').color}` })} @@ -322,7 +314,7 @@ const Dashboard: React.FC = ({ filteredNodes, stats }) => {
-
+
{React.createElement(getStatusConfig('IN_REVIEW').icon!, { className: `h-8 w-8 ${getStatusConfig('IN_REVIEW').color}` })} @@ -334,7 +326,7 @@ const Dashboard: React.FC = ({ filteredNodes, stats }) => {
-
+
{React.createElement(getStatusConfig('BLOCKED').icon!, { className: `h-8 w-8 ${getStatusConfig('BLOCKED').color}` })} @@ -345,11 +337,7 @@ const Dashboard: React.FC = ({ filteredNodes, stats }) => {
-
- - {/* Stats Cards - Fourth Row */} -
-
+
{React.createElement(getStatusConfig('ON_HOLD').icon!, { className: `h-8 w-8 ${getStatusConfig('ON_HOLD').color}` })} @@ -361,7 +349,7 @@ const Dashboard: React.FC = ({ filteredNodes, stats }) => {
-
+
{React.createElement(getStatusConfig('COMPLETED').icon!, { className: `h-8 w-8 ${getStatusConfig('COMPLETED').color}` })} @@ -373,7 +361,7 @@ const Dashboard: React.FC = ({ filteredNodes, stats }) => {
-
+
{React.createElement(getStatusConfig('CANCELLED').icon!, { className: `h-8 w-8 ${getStatusConfig('CANCELLED').color}` })}