From f959ba87e20aaae42bc270edc127ae89b97241cb Mon Sep 17 00:00:00 2001 From: 3raphat <96657413+3raphat@users.noreply.github.com> Date: Tue, 24 Jun 2025 01:38:53 +0700 Subject: [PATCH 1/3] fix: update auth routes --- apps/web/src/app/(auth)/login/page.tsx | 26 +++++++++++++---- apps/web/src/app/(auth)/signup/page.tsx | 38 +++++++++++++++++++------ apps/web/src/components/header.tsx | 2 +- apps/web/src/middleware.ts | 2 +- 4 files changed, 51 insertions(+), 17 deletions(-) diff --git a/apps/web/src/app/(auth)/login/page.tsx b/apps/web/src/app/(auth)/login/page.tsx index ebf2eb3..5f37ced 100644 --- a/apps/web/src/app/(auth)/login/page.tsx +++ b/apps/web/src/app/(auth)/login/page.tsx @@ -77,14 +77,21 @@ function LoginForm() { size="lg" disabled={isAnyLoading} > - {isGoogleLoading ? : ()} Continue with Google + {isGoogleLoading ? ( + + ) : ( + + )}{" "} + Continue with Google
- Or continue with + + Or continue with +
@@ -144,14 +151,21 @@ export default function LoginPage() { - - -
}> + + + + } + >
Don't have an account?{" "} - + Sign up
diff --git a/apps/web/src/app/(auth)/signup/page.tsx b/apps/web/src/app/(auth)/signup/page.tsx index 3d125a0..d1feece 100644 --- a/apps/web/src/app/(auth)/signup/page.tsx +++ b/apps/web/src/app/(auth)/signup/page.tsx @@ -44,7 +44,7 @@ function SignUpForm() { return; } - router.push("/auth/login"); + router.push("/login"); }; const handleGoogleSignUp = async () => { @@ -80,7 +80,12 @@ function SignUpForm() { size="lg" disabled={isAnyLoading} > - {isGoogleLoading ? : ()} Continue with Google + {isGoogleLoading ? ( + + ) : ( + + )}{" "} + Continue with Google
@@ -88,7 +93,9 @@ function SignUpForm() {
- Or continue with + + Or continue with +
@@ -135,7 +142,11 @@ function SignUpForm() { className="w-full h-11" size="lg" > - {isEmailLoading ? : "Create account"} + {isEmailLoading ? ( + + ) : ( + "Create account" + )} @@ -157,20 +168,29 @@ export default function SignUpPage() { - Create your account + + Create your account + Get started with your free account today - - - }> + + + + } + >
Already have an account?{" "} - + Sign in
diff --git a/apps/web/src/components/header.tsx b/apps/web/src/components/header.tsx index 109d022..2ccc53f 100644 --- a/apps/web/src/components/header.tsx +++ b/apps/web/src/components/header.tsx @@ -23,7 +23,7 @@ export function Header() { GitHub - + diff --git a/apps/web/src/components/landing/hero.tsx b/apps/web/src/components/landing/hero.tsx index f2c70f5..b232003 100644 --- a/apps/web/src/components/landing/hero.tsx +++ b/apps/web/src/components/landing/hero.tsx @@ -7,6 +7,7 @@ import { ArrowRight } from "lucide-react"; import Link from "next/link"; import { useState } from "react"; import { useToast } from "@/hooks/use-toast"; +import { ghStars } from "@/lib/fetchGhStars"; interface HeroProps { signupCount: number; @@ -16,6 +17,7 @@ export function Hero({ signupCount }: HeroProps) { const [email, setEmail] = useState(""); const [isSubmitting, setIsSubmitting] = useState(false); const { toast } = useToast(); + const stars = ghStars(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); @@ -152,7 +154,7 @@ export function Hero({ signupCount }: HeroProps) { href="https://github.com/OpenCut-app/OpenCut" className="text-foreground underline" > - GitHub + GitHub {stars}+ diff --git a/apps/web/src/lib/fetchGhStars.ts b/apps/web/src/lib/fetchGhStars.ts new file mode 100644 index 0000000..de3e2e8 --- /dev/null +++ b/apps/web/src/lib/fetchGhStars.ts @@ -0,0 +1,20 @@ +async function getStars(): Promise { + const res = await fetch("https://api.github.com/repos/OpenCut-app/OpenCut", { + // Cache for 1 hour (3600 seconds) + next: { revalidate: 3600 }, + }); + + const data = await res.json(); + const count = data.stargazers_count; + + if (count >= 1_000_000) + return (count / 1_000_000).toFixed(1).replace(/\.0$/, "") + "M"; + if (count >= 1_000) + return (count / 1_000).toFixed(1).replace(/\.0$/, "") + "k"; + return count.toString(); +} + +export async function ghStars() { + const stars = await getStars(); + return stars; +} From 57e42e2c4539949e93b71f1125e0c0eecb2fb5e8 Mon Sep 17 00:00:00 2001 From: Dipanshu Rawat <144578298+Jaydeeprawat17@users.noreply.github.com> Date: Tue, 24 Jun 2025 02:06:55 +0530 Subject: [PATCH 3/3] ref: fetch api function --- apps/web/src/components/header.tsx | 21 ++++++++++-- apps/web/src/components/landing/hero.tsx | 21 +++++++++--- apps/web/src/lib/fetchGhStars.ts | 43 ++++++++++++++---------- 3 files changed, 61 insertions(+), 24 deletions(-) diff --git a/apps/web/src/components/header.tsx b/apps/web/src/components/header.tsx index cada527..82e0bc5 100644 --- a/apps/web/src/components/header.tsx +++ b/apps/web/src/components/header.tsx @@ -6,12 +6,27 @@ import { Button } from "./ui/button"; import { ArrowRight } from "lucide-react"; import { HeaderBase } from "./header-base"; import { useSession } from "@/lib/auth-client"; -import { ghStars } from "@/lib/fetchGhStars"; +import { getStars } from "@/lib/fetchGhStars"; import { Star } from "lucide-react"; +import { useEffect, useState } from "react"; export function Header() { - const stars = ghStars(); const { data: session } = useSession(); + const [star, setStar] = useState(""); + + useEffect(() => { + const fetchStars = async () => { + try { + const data = await getStars(); + setStar(data); + } catch (err) { + console.error("Failed to fetch GitHub stars", err); + } + }; + + fetchStars(); + }, []); + const leftContent = ( OpenCut Logo @@ -28,7 +43,7 @@ export function Header() { > GitHub - {stars}+ + {star}+ diff --git a/apps/web/src/components/landing/hero.tsx b/apps/web/src/components/landing/hero.tsx index b232003..5d9f3f1 100644 --- a/apps/web/src/components/landing/hero.tsx +++ b/apps/web/src/components/landing/hero.tsx @@ -5,19 +5,32 @@ import { Button } from "../ui/button"; import { Input } from "../ui/input"; import { ArrowRight } from "lucide-react"; import Link from "next/link"; -import { useState } from "react"; +import { useEffect, useState } from "react"; import { useToast } from "@/hooks/use-toast"; -import { ghStars } from "@/lib/fetchGhStars"; +import { getStars } from "@/lib/fetchGhStars"; interface HeroProps { signupCount: number; } export function Hero({ signupCount }: HeroProps) { + const [star, setStar] = useState(); const [email, setEmail] = useState(""); const [isSubmitting, setIsSubmitting] = useState(false); const { toast } = useToast(); - const stars = ghStars(); + + useEffect(() => { + const fetchStars = async () => { + try { + const data = await getStars(); + setStar(data); + } catch (err) { + console.error("Failed to fetch GitHub stars", err); + } + }; + + fetchStars(); + }, []); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); @@ -154,7 +167,7 @@ export function Hero({ signupCount }: HeroProps) { href="https://github.com/OpenCut-app/OpenCut" className="text-foreground underline" > - GitHub {stars}+ + GitHub {star}+ diff --git a/apps/web/src/lib/fetchGhStars.ts b/apps/web/src/lib/fetchGhStars.ts index de3e2e8..e023684 100644 --- a/apps/web/src/lib/fetchGhStars.ts +++ b/apps/web/src/lib/fetchGhStars.ts @@ -1,20 +1,29 @@ -async function getStars(): Promise { - const res = await fetch("https://api.github.com/repos/OpenCut-app/OpenCut", { - // Cache for 1 hour (3600 seconds) - next: { revalidate: 3600 }, - }); +export async function getStars(): Promise { + try { + const res = await fetch( + "https://api.github.com/repos/OpenCut-app/OpenCut", + { + next: { revalidate: 3600 }, + } + ); - const data = await res.json(); - const count = data.stargazers_count; + if (!res.ok) { + throw new Error(`GitHub API error: ${res.status} ${res.statusText}`); + } + const data = await res.json(); + const count = data.stargazers_count; - if (count >= 1_000_000) - return (count / 1_000_000).toFixed(1).replace(/\.0$/, "") + "M"; - if (count >= 1_000) - return (count / 1_000).toFixed(1).replace(/\.0$/, "") + "k"; - return count.toString(); -} - -export async function ghStars() { - const stars = await getStars(); - return stars; + if (typeof count !== "number") { + throw new Error("Invalid stargazers_count from GitHub API"); + } + + if (count >= 1_000_000) + return (count / 1_000_000).toFixed(1).replace(/\.0$/, "") + "M"; + if (count >= 1_000) + return (count / 1_000).toFixed(1).replace(/\.0$/, "") + "k"; + return count.toString(); + } catch (error) { + console.error("Failed to fetch GitHub stars:", error); + return "1.5k"; + } }