diff --git a/app/(app)/layout.tsx b/app/(app)/layout.tsx index eea8edd3..579ed3df 100644 --- a/app/(app)/layout.tsx +++ b/app/(app)/layout.tsx @@ -2,6 +2,7 @@ import { Suspense } from "react"; import { SiteHeader } from "@/components/site-header"; import { SiteSidebar } from "@/components/site-sidebar"; import { SiteBottomNav } from "@/components/site-bottom-nav"; +import { SiteFooter } from "@/components/site-footer"; import { VerifyEmailBanner } from "@/components/auth/verify-email-banner"; import { TextSelectionToolbar } from "@/components/text-selection-toolbar"; import { TextHighlighter } from "@/components/text-highlighter"; @@ -28,6 +29,7 @@ export default function AppLayout({
{children} +
diff --git a/app/(app)/page.tsx b/app/(app)/page.tsx index 4a1ece36..7048115d 100644 --- a/app/(app)/page.tsx +++ b/app/(app)/page.tsx @@ -1,7 +1,7 @@ "use client"; import Link from "next/link"; -import { Compass, LogIn, MessageSquare, Sparkles } from "lucide-react"; +import { Compass, LogIn, Sparkles } from "lucide-react"; import { useAuth } from "@/components/auth/auth-provider"; /** @@ -79,13 +79,6 @@ export default function HomePage() {

) : null} - - - Send feedback - ); diff --git a/app/(app)/settings/page.tsx b/app/(app)/settings/page.tsx index 37ff5c89..12800fa3 100644 --- a/app/(app)/settings/page.tsx +++ b/app/(app)/settings/page.tsx @@ -92,18 +92,25 @@ function SignOutSection() { } } + // Renders as a full-width clickable row matching LegalLink — same + // padding, same hover, with LogOut taking the slot ChevronRight uses + // on link rows. The whole row is the click target. return ( -
- -
+
    +
  • + +
  • +
); } diff --git a/app/(legal)/layout.tsx b/app/(legal)/layout.tsx index 44d36683..ef545588 100644 --- a/app/(legal)/layout.tsx +++ b/app/(legal)/layout.tsx @@ -1,10 +1,12 @@ import { SiteHeader } from "@/components/site-header"; +import { SiteFooter } from "@/components/site-footer"; /** * Minimal layout for legal / informational pages (Privacy Policy, Terms of - * Use, Data Deletion). Just the global SiteHeader and the content — no - * sidebar, no bottom nav, no in-page reading affordances. Keeps these - * pages focused on the text they exist to deliver. + * Use, Data Deletion). Just the global SiteHeader, the content, and the + * site-wide feedback footer — no sidebar, no bottom nav, no in-page + * reading affordances. Keeps these pages focused on the text they exist + * to deliver. */ export default function LegalLayout({ children, @@ -15,6 +17,7 @@ export default function LegalLayout({
{children} +
); } diff --git a/components/site-footer.tsx b/components/site-footer.tsx index 7ecd1d49..b6b08f17 100644 --- a/components/site-footer.tsx +++ b/components/site-footer.tsx @@ -1,52 +1,27 @@ /** - * SiteFooter — one slim row. Wordmark on the left, dedication on the - * right, About link in the middle. That's all. + * SiteFooter — a single slim row carrying the feedback link. Mounted in + * both (app) and (legal) layouts so the affordance follows the user + * everywhere on the site without taking up perceptible vertical space. + * + * No wordmark, no about / privacy / terms links, no dedication line — + * those live in settings and the legal pages themselves. This footer + * exists solely to keep "send us feedback" one tap away from anywhere. */ import Link from "next/link"; +import { MessageSquare } from "lucide-react"; export function SiteFooter() { return ( );