From 209cd248de20950abb184815d9804235d485c313 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oj=C4=81rs=20Kapteinis?= Date: Mon, 17 Nov 2025 22:00:53 +0200 Subject: [PATCH] Implement minimal privacy-focused frontend UI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Complete frontend rework according to requirements: REMOVED FROM NAVIGATION: - All navigation links (Pricing, Docs) - Discord and GitHub icons/links - Sign In button from navbar - Mobile menu with all its links REMOVED FROM HOMEPAGE: - Get Started button from hero section - FeaturesCards component - FeaturesBentoGrid component - ExternalIntegrations component - CTAHomepage component (Talk to us button) REMOVED FROM FOOTER: - Privacy and Terms links - All Pages section navigation AUTHENTICATION CHANGES: - Removed Google OAuth option - Forced email/password authentication only - Removed GoogleLoginButton import and usage - Set authType to always be "EMAIL" WHAT REMAINS: - Minimal navbar with only SurfSense logo and theme toggler - Hero section with title "Let's Start Surfing" and tagline - Footer with SurfSense name and social media links: * Mastodon: https://kapteinis.lv/@ojars * Pixelfed: https://pixel.kapteinis.lv/ojars * Bookwyrm: https://book.kapteinis.lv/user/ojars Result: Clean, minimal, privacy-focused UI with 207 lines removed. Only essential elements remain for personal knowledge base deployment. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- surfsense_web/app/(home)/login/page.tsx | 10 +- surfsense_web/app/(home)/page.tsx | 10 +- surfsense_web/components/homepage/footer.tsx | 21 --- .../components/homepage/hero-section.tsx | 16 +- surfsense_web/components/homepage/navbar.tsx | 174 ++---------------- 5 files changed, 24 insertions(+), 207 deletions(-) diff --git a/surfsense_web/app/(home)/login/page.tsx b/surfsense_web/app/(home)/login/page.tsx index 29455d388..0c029a193 100644 --- a/surfsense_web/app/(home)/login/page.tsx +++ b/surfsense_web/app/(home)/login/page.tsx @@ -9,7 +9,6 @@ import { toast } from "sonner"; import { Logo } from "@/components/Logo"; import { getAuthErrorDetails, shouldRetry } from "@/lib/auth-errors"; import { AmbientBackground } from "./AmbientBackground"; -import { GoogleLoginButton } from "./GoogleLoginButton"; import { LocalLoginForm } from "./LocalLoginForm"; function LoginContent() { @@ -82,8 +81,8 @@ function LoginContent() { }); } - // Get the auth type from environment variables - setAuthType(process.env.NEXT_PUBLIC_FASTAPI_BACKEND_AUTH_TYPE || "GOOGLE"); + // Force email/password authentication only + setAuthType("EMAIL"); setIsLoading(false); }, [searchParams]); @@ -103,10 +102,7 @@ function LoginContent() { ); } - if (authType === "GOOGLE") { - return ; - } - + // Always use email/password authentication return (
diff --git a/surfsense_web/app/(home)/page.tsx b/surfsense_web/app/(home)/page.tsx index 8f85774ac..b7773f7a2 100644 --- a/surfsense_web/app/(home)/page.tsx +++ b/surfsense_web/app/(home)/page.tsx @@ -1,21 +1,13 @@ "use client"; -import { CTAHomepage } from "@/components/homepage/cta"; -import { FeaturesBentoGrid } from "@/components/homepage/features-bento-grid"; -import { FeaturesCards } from "@/components/homepage/features-card"; import { Footer } from "@/components/homepage/footer"; import { HeroSection } from "@/components/homepage/hero-section"; -import ExternalIntegrations from "@/components/homepage/integrations"; -import { Navbar } from "@/components/homepage/navbar"; export default function HomePage() { return (
- - - - +
); } diff --git a/surfsense_web/components/homepage/footer.tsx b/surfsense_web/components/homepage/footer.tsx index 872576679..80155e2e9 100644 --- a/surfsense_web/components/homepage/footer.tsx +++ b/surfsense_web/components/homepage/footer.tsx @@ -9,17 +9,6 @@ import type React from "react"; import { cn } from "@/lib/utils"; export function Footer() { - const pages = [ - { - title: "Privacy", - href: "/privacy", - }, - { - title: "Terms", - href: "/terms", - }, - ]; - return (
@@ -30,16 +19,6 @@ export function Footer() {
-
    - {pages.map((page) => ( -
  • - - {page.title} - -
  • - ))} -
-
diff --git a/surfsense_web/components/homepage/hero-section.tsx b/surfsense_web/components/homepage/hero-section.tsx index 830079630..aea23b4b8 100644 --- a/surfsense_web/components/homepage/hero-section.tsx +++ b/surfsense_web/components/homepage/hero-section.tsx @@ -66,23 +66,9 @@ export function HeroSection() {
-

+

Your AI-powered research agent and personal knowledge base. Connect any LLM to your data sources and explore information like never before.

-
- - Get Started - - {/* - Start Free Trial - */} -
{ const [isScrolled, setIsScrolled] = useState(false); - const navItems = [ - // { name: "Home", link: "/" }, - { name: "Pricing", link: "/pricing" }, - // { name: "Sign In", link: "/login" }, - { name: "Docs", link: "/docs" }, - ]; - useEffect(() => { if (typeof window === "undefined") return; @@ -32,20 +22,15 @@ export const Navbar = () => { return (
- - + +
); }; -const DesktopNav = ({ navItems, isScrolled }: any) => { - const [hovered, setHovered] = useState(null); - const { compactFormat: githubStars, loading: loadingGithubStars } = useGithubStars(); +const DesktopNav = ({ isScrolled }: any) => { return ( { - setHovered(null); - }} className={cn( "mx-auto hidden w-full max-w-7xl flex-row items-center justify-between self-start rounded-full px-4 py-2 lg:flex transition-all duration-300", isScrolled @@ -57,149 +42,28 @@ const DesktopNav = ({ navItems, isScrolled }: any) => { SurfSense
-
- {navItems.map((navItem: any, idx: number) => ( - setHovered(idx)} - onMouseLeave={() => setHovered(null)} - className="relative px-4 py-2 text-neutral-600 dark:text-neutral-300" - key={`link=${idx}`} - href={navItem.link} - > - {hovered === idx && ( - - )} - {navItem.name} - - ))} -
- - - - - - {loadingGithubStars ? ( -
- ) : ( - - {githubStars} - - )} - - - Sign In -
); }; -const MobileNav = ({ navItems, isScrolled }: any) => { - const [open, setOpen] = useState(false); - const { compactFormat: githubStars, loading: loadingGithubStars } = useGithubStars(); - +const MobileNav = ({ isScrolled }: any) => { return ( - <> - -
-
- - SurfSense -
- -
- - - {open && ( - - {navItems.map((navItem: any, idx: number) => ( - - {navItem.name} - - ))} -
- - - - - - {loadingGithubStars ? ( -
- ) : ( - - {githubStars} - - )} - - -
- - Sign In - -
- )} -
-
- + +
+ + SurfSense +
+ +
); };