From 2235758d26b6ec3f426b5755cfdb234e96b2b659 Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Sun, 22 Feb 2026 19:36:14 -0600 Subject: [PATCH] fix(web): remove root redirect so dashboard renders at / The root app/page.tsx was intercepting the / route and redirecting authenticated users to /tasks, preventing the dashboard page in (authenticated)/page.tsx from rendering. Removing it lets the route group's auth guard handle both cases. Co-Authored-By: Claude Opus 4.6 --- apps/web/src/app/page.test.tsx | 52 ---------------------------------- apps/web/src/app/page.tsx | 28 ------------------ 2 files changed, 80 deletions(-) delete mode 100644 apps/web/src/app/page.test.tsx delete mode 100644 apps/web/src/app/page.tsx diff --git a/apps/web/src/app/page.test.tsx b/apps/web/src/app/page.test.tsx deleted file mode 100644 index 8a07247..0000000 --- a/apps/web/src/app/page.test.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { describe, expect, it, vi, beforeEach } from "vitest"; -import { render } from "@testing-library/react"; -import Home from "./page"; - -// Mock Next.js navigation -const mockPush = vi.fn(); -vi.mock("next/navigation", () => ({ - useRouter: (): { - push: typeof mockPush; - replace: ReturnType; - prefetch: ReturnType; - } => ({ - push: mockPush, - replace: vi.fn(), - prefetch: vi.fn(), - }), -})); - -// Mock auth context -vi.mock("@/lib/auth/auth-context", () => ({ - useAuth: (): { - user: null; - isLoading: boolean; - isAuthenticated: boolean; - signOut: ReturnType; - refreshSession: ReturnType; - } => ({ - user: null, - isLoading: false, - isAuthenticated: false, - signOut: vi.fn(), - refreshSession: vi.fn(), - }), -})); - -describe("Home", (): void => { - beforeEach((): void => { - mockPush.mockClear(); - }); - - it("should render loading spinner", (): void => { - const { container } = render(); - // The home page shows a loading spinner while redirecting - const spinner = container.querySelector(".animate-spin"); - expect(spinner).toBeInTheDocument(); - }); - - it("should redirect unauthenticated users to login", (): void => { - render(); - expect(mockPush).toHaveBeenCalledWith("/login"); - }); -}); diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx deleted file mode 100644 index c6672cf..0000000 --- a/apps/web/src/app/page.tsx +++ /dev/null @@ -1,28 +0,0 @@ -"use client"; - -import type { ReactElement } from "react"; - -import { useEffect } from "react"; -import { useRouter } from "next/navigation"; -import { useAuth } from "@/lib/auth/auth-context"; - -export default function Home(): ReactElement { - const router = useRouter(); - const { isAuthenticated, isLoading } = useAuth(); - - useEffect(() => { - if (!isLoading) { - if (isAuthenticated) { - router.push("/tasks"); - } else { - router.push("/login"); - } - } - }, [isAuthenticated, isLoading, router]); - - return ( -
-
-
- ); -}