diff --git a/apps/web/src/app/components/logo.tsx b/apps/web/src/app/components/logo.tsx
index 43c202d93b..694092a908 100644
--- a/apps/web/src/app/components/logo.tsx
+++ b/apps/web/src/app/components/logo.tsx
@@ -2,36 +2,36 @@
import Image from "next/image";
-export function Logo({
+export function Logo({
className,
- width = 64,
+ width = 64,
height = 64,
alt = "Comp Logo",
...props
-}: {
- className?: string;
- width?: number;
+}: {
+ className?: string;
+ width?: number;
height?: number;
alt?: string;
} & Omit, 'src' | 'alt' | 'width' | 'height'>) {
return (
- <>
-
+
-
- >
+
);
}
diff --git a/apps/web/src/app/components/mode-switcher.tsx b/apps/web/src/app/components/mode-switcher.tsx
index 7eb17752c5..3fc9642b9a 100644
--- a/apps/web/src/app/components/mode-switcher.tsx
+++ b/apps/web/src/app/components/mode-switcher.tsx
@@ -3,25 +3,47 @@
import { MoonIcon, SunIcon } from "lucide-react";
import { useTheme } from "next-themes";
import * as React from "react";
-
import { Button } from "@bubba/ui/button";
export function ModeSwitcher() {
const { setTheme, resolvedTheme } = useTheme();
+ const [mounted, setMounted] = React.useState(false);
+
+ // Mount handler
+ React.useEffect(() => {
+ setMounted(true);
+ }, []);
const toggleTheme = React.useCallback(() => {
setTheme(resolvedTheme === "dark" ? "light" : "dark");
}, [resolvedTheme, setTheme]);
+ // Prevent hydration mismatch by not rendering until mounted
+ if (!mounted) {
+ return (
+
+ );
+ }
+
+ const themeText = resolvedTheme === "dark"
+ ? "Switch to light theme"
+ : "Switch to dark theme";
+
return (
);
}
diff --git a/apps/web/src/app/components/site-footer.tsx b/apps/web/src/app/components/site-footer.tsx
index 822131f73b..18d65e4cac 100644
--- a/apps/web/src/app/components/site-footer.tsx
+++ b/apps/web/src/app/components/site-footer.tsx
@@ -27,20 +27,24 @@ export function SiteFooter() {
.
-
-
- Privacy
-
-
- Terms
-
-
+
+ -
+
+ Privacy
+
+
+ -
+
+ Terms
+
+
+
);
diff --git a/apps/web/src/app/components/site-header.tsx b/apps/web/src/app/components/site-header.tsx
index 84cc964611..a5fae403b8 100644
--- a/apps/web/src/app/components/site-header.tsx
+++ b/apps/web/src/app/components/site-header.tsx
@@ -5,14 +5,14 @@ export function SiteHeader() {
return (
);
diff --git a/apps/web/src/app/components/waitlist-form.tsx b/apps/web/src/app/components/waitlist-form.tsx
index 02953154d0..1200c6e647 100644
--- a/apps/web/src/app/components/waitlist-form.tsx
+++ b/apps/web/src/app/components/waitlist-form.tsx
@@ -60,7 +60,7 @@ export function WaitlistForm() {
className="inline-flex items-center gap-2 px-4 py-2 rounded-md bg-primary/10 hover:bg-primary/20 transition-colors text-primary"
>
Join Community
- →
+ →
);
@@ -86,6 +86,7 @@ export function WaitlistForm() {
className="h-12 px-4 text-base bg-background border-border/50 focus:border-primary"
autoComplete="email"
autoCorrect="off"
+ aria-label="Email address"
/>
@@ -96,18 +97,18 @@ export function WaitlistForm() {