From 91b003d61815e4e18d692dcc5b5badbf9780e97c Mon Sep 17 00:00:00 2001 From: test Date: Thu, 13 Aug 2026 11:30:03 +0200 Subject: [PATCH] fix(design): Today with no projects is one action, not ten empty cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A first-run operator used to get jargon (“register… unlock the fleet view”) plus a wall of empty queue, weather, and habit cards. They now see one sentence and Open Control. The full Today surface returns once a project exists. --- src/app/(app)/today/page.tsx | 19 ++++++++++++------- src/lib/constants/today.ts | 7 +++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/app/(app)/today/page.tsx b/src/app/(app)/today/page.tsx index 0a92e1a1a..e13b0ec6b 100644 --- a/src/app/(app)/today/page.tsx +++ b/src/app/(app)/today/page.tsx @@ -21,11 +21,10 @@ import { StuckGoalsCard } from "@/components/today/StuckGoalsCard"; import { LockedZoneBanner } from "@/components/today/LockedZoneBanner"; import { TodayWatch } from "@/components/today/TodayWatch"; import { LayoutGrid } from "lucide-react"; -import { APP_NAME } from "@/config/brand"; import { LokiDispatchButton } from "@/components/shared/LokiDispatchButton"; import { requirePageUserId, getCurrentUserName } from "@/lib/session"; import { getUserProjects, getOrgProjects } from "@/db/queries/user-projects"; -import { PLAN_DAY_PROMPT, WRAP_UP_PROMPT } from "@/lib/constants/today"; +import { FIRST_RUN, PLAN_DAY_PROMPT, WRAP_UP_PROMPT } from "@/lib/constants/today"; import { PullToRefresh } from "@/components/shared/PullToRefresh"; import { AutoRefresh } from "@/components/shared/AutoRefresh"; import { REFRESH_CADENCE } from "@/config/refresh"; @@ -79,16 +78,16 @@ export default async function TodayPage() {
-

Register your first project to get started

-

- {APP_NAME} tracks your AI agent sessions, git state, and progress across projects — add one to the control panel to unlock the fleet view. -

+

{FIRST_RUN.title}

+

{FIRST_RUN.body}

- Go to Control Panel → + {FIRST_RUN.cta} →
)} + {!isFirstRun && ( + <> }>
@@ -113,8 +112,12 @@ export default async function TodayPage() {
+ + )} + {!isFirstRun && ( + <> @@ -175,6 +178,8 @@ export default async function TodayPage() {
+ + )} ); diff --git a/src/lib/constants/today.ts b/src/lib/constants/today.ts index deb199969..ccd139e59 100644 --- a/src/lib/constants/today.ts +++ b/src/lib/constants/today.ts @@ -23,6 +23,13 @@ export const CALENDAR_LOOKAHEAD_DAYS = 2; // Location used by the weather widget. export const WEATHER_CITY = "Zurich"; +/** Zero-project Today: one action, no empty-card wall. */ +export const FIRST_RUN = { + title: "Add a project.", + body: "Then you can tell the fleet what to do.", + cta: "Open Control", +} as const; + export const PLAN_DAY_PROMPT = `Plan my day. Check in ${APP_NAME} and the codebase: