diff --git a/frontend/app/components/landing/CTA.tsx b/frontend/app/components/landing/CTA.tsx index 4eb42e5..c5d992d 100644 --- a/frontend/app/components/landing/CTA.tsx +++ b/frontend/app/components/landing/CTA.tsx @@ -1,8 +1,8 @@ "use client"; import { useEffect, useRef } from "react"; -import { signInWithGoogle } from "@/app/auth/actions"; import { ArrowRight, Sparkles } from "lucide-react"; +import Link from "next/link"; export default function CTA() { const sectionRef = useRef(null); @@ -44,12 +44,13 @@ export default function CTA() {

Join hundreds of educators creating engaging educational content with AI.

-
- -
+ + Get Started Free + +

No credit card required ยท Free to try

diff --git a/frontend/app/components/landing/Hero.tsx b/frontend/app/components/landing/Hero.tsx index 15531e4..6b537b6 100644 --- a/frontend/app/components/landing/Hero.tsx +++ b/frontend/app/components/landing/Hero.tsx @@ -1,8 +1,8 @@ "use client"; import { useState, useEffect } from "react"; -import { signInWithGoogle } from "@/app/auth/actions"; import { Sparkles } from "lucide-react"; +import Link from "next/link"; export default function Hero() { return ( @@ -64,14 +64,12 @@ export default function Hero() { -
- -
+ + Generate Video โ†’ + diff --git a/frontend/app/components/landing/Navbar.tsx b/frontend/app/components/landing/Navbar.tsx index bf3e748..2cd4574 100644 --- a/frontend/app/components/landing/Navbar.tsx +++ b/frontend/app/components/landing/Navbar.tsx @@ -1,9 +1,9 @@ "use client"; import { useState } from "react"; -import { signInWithGoogle } from "@/app/auth/actions"; import { Menu, X } from "lucide-react"; import Image from "next/image"; +import Link from "next/link"; export default function Navbar() { const [mobileOpen, setMobileOpen] = useState(false); @@ -41,14 +41,12 @@ export default function Navbar() { {link.label} ))} -
- -
+ + Get Started + {/* Mobile hamburger */} @@ -75,14 +73,13 @@ export default function Navbar() { {link.label} ))} -
- -
+ setMobileOpen(false)} + > + Get Started + )} diff --git a/frontend/app/dashboard/page.tsx b/frontend/app/dashboard/page.tsx index aa171c8..3f288b5 100644 --- a/frontend/app/dashboard/page.tsx +++ b/frontend/app/dashboard/page.tsx @@ -16,7 +16,7 @@ export default async function DashboardPage() { } = await supabase.auth.getUser(); if (!user) { - return redirect("/"); + return redirect("/login"); } return ( diff --git a/frontend/app/library/page.tsx b/frontend/app/library/page.tsx index 480a071..e456678 100644 --- a/frontend/app/library/page.tsx +++ b/frontend/app/library/page.tsx @@ -13,7 +13,7 @@ export default async function LibraryPage() { } = await supabase.auth.getUser(); if (!user) { - return redirect("/"); + return redirect("/login"); } return ( diff --git a/frontend/app/login/page.tsx b/frontend/app/login/page.tsx new file mode 100644 index 0000000..69b6a4c --- /dev/null +++ b/frontend/app/login/page.tsx @@ -0,0 +1,92 @@ +import { createClient } from "@/utils/supabase/server"; +import { redirect } from "next/navigation"; +import { signInWithGoogle } from "@/app/auth/actions"; +import { Brain, ArrowLeft } from "lucide-react"; +import Link from "next/link"; +import Image from "next/image"; + +export default async function LoginPage() { + const supabase = await createClient(); + + const { + data: { user }, + } = await supabase.auth.getUser(); + + if (user) { + redirect("/dashboard"); + } + + return ( +
+ {/* Animated background blobs โ€” soft pastels matching landing page */} +
+
+
+
+ + {/* Back to Home Link */} + + + Back to home + + + {/* Login Card */} +
+
+ {/* Logo / Brand Header */} + + AnimEd AI Logo + + +

+ Turn your ideas into educational animations in seconds. Sign in to start creating. +

+ + {/* OAuth Buttons */} +
+
+ +
+
+
+
+
+ ); +} diff --git a/frontend/app/pomodoro/page.tsx b/frontend/app/pomodoro/page.tsx index de566c6..6963179 100644 --- a/frontend/app/pomodoro/page.tsx +++ b/frontend/app/pomodoro/page.tsx @@ -13,7 +13,7 @@ export default async function PomodoroPage() { } = await supabase.auth.getUser(); if (!user) { - return redirect("/"); + return redirect("/login"); } return (