From 2dcb3515565abebe951a841453371fce8d63a937 Mon Sep 17 00:00:00 2001 From: Yashvardhan Thorat Date: Thu, 2 Jul 2026 10:36:52 +0000 Subject: [PATCH] feat(frontend): add landing page with reusable ui components Implements LandingPage, PrimaryButton, and StudentCapsule components based on Figma designs. Includes decorative curl vectors, YDO logo, hero text, and CTA button with mobile-first layout. Closes #18 --- app/globals.css | 10 +++--- app/layout.tsx | 21 +++++++----- app/page.tsx | 10 ++++-- components/pages/LandingPage.tsx | 55 ++++++++++++++++++++++++++++++++ components/ui/PrimaryButton.tsx | 27 ++++++++++++++++ components/ui/StudentCapsule.tsx | 20 ++++++++++++ next.config.ts | 2 +- public/assets/Curls.svg | 8 +++++ public/assets/YDO.svg | 4 +++ 9 files changed, 141 insertions(+), 16 deletions(-) create mode 100644 components/pages/LandingPage.tsx create mode 100644 components/ui/PrimaryButton.tsx create mode 100644 components/ui/StudentCapsule.tsx create mode 100644 public/assets/Curls.svg create mode 100644 public/assets/YDO.svg diff --git a/app/globals.css b/app/globals.css index 831914f..4f4117f 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,12 +1,15 @@ @import "tailwindcss"; -*, -::before, -::after { +@layer base { + *, + ::before, + ::after { margin: 0; padding: 0; + } } + @theme { @@ -28,5 +31,4 @@ --text-base: 16px; --text-xl: 20px; - } \ No newline at end of file diff --git a/app/layout.tsx b/app/layout.tsx index 976eb90..4103ca6 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,20 +1,25 @@ import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; +import { Poppins, Courier_Prime } from "next/font/google"; import "./globals.css"; -const geistSans = Geist({ - variable: "--font-geist-sans", +const poppins = Poppins({ + variable: "--font-poppins", subsets: ["latin"], + weight: ["400", "500", "600"], }); -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", +const courierPrime = Courier_Prime({ + variable: "--font-prime", subsets: ["latin"], + weight: ["400", "700"], }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "YDO — You Deserve One", + description: "A campus matchmaking experience built around privacy, mutual interest & meaningful connections.", + other: { + "mobile-web-app-capable": "yes", + }, }; export default function RootLayout({ @@ -25,7 +30,7 @@ export default function RootLayout({ return ( {children} diff --git a/app/page.tsx b/app/page.tsx index 9f85280..58c6549 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,5 +1,9 @@ -import { redirect } from "next/navigation"; +import LandingPage from "@/components/pages/LandingPage"; export default function Home() { - redirect("/login"); -} + return ( +
+ +
+ ); +} \ No newline at end of file diff --git a/components/pages/LandingPage.tsx b/components/pages/LandingPage.tsx new file mode 100644 index 0000000..88fbac4 --- /dev/null +++ b/components/pages/LandingPage.tsx @@ -0,0 +1,55 @@ +"use client"; + +import Image from "next/image"; +import PrimaryButton from "@/components/ui/PrimaryButton"; +import StudentCapsule from "@/components/ui/StudentCapsule"; + +export default function LandingPage() { + return ( +
+ + +
+ YDO +

+ You Deserve One +

+
+ +

+ A campus matchmaking experience built around privacy, mutual interest & meaningful{" "} +
+ Connections. +

+ +
+ {}}>Get Started → + +
+ +
+ ); +} \ No newline at end of file diff --git a/components/ui/PrimaryButton.tsx b/components/ui/PrimaryButton.tsx new file mode 100644 index 0000000..93d8d0a --- /dev/null +++ b/components/ui/PrimaryButton.tsx @@ -0,0 +1,27 @@ +"use client"; + +interface PrimaryButtonProp{ + children: React.ReactNode; + onClick?: () => void; + disabled?: boolean; + className?: string; +} + +export default function PrimaryButton({children, onClick, disabled = false, className,}:PrimaryButtonProp){ + return ( + + ); +} \ No newline at end of file diff --git a/components/ui/StudentCapsule.tsx b/components/ui/StudentCapsule.tsx new file mode 100644 index 0000000..563ffe8 --- /dev/null +++ b/components/ui/StudentCapsule.tsx @@ -0,0 +1,20 @@ +interface StudentCapsuleProps { + className?: string; +} + +export default function StudentCapsule({ className = "" }: StudentCapsuleProps) { + return ( +

+ for iiitdmj students only +

+ ); +} \ No newline at end of file diff --git a/next.config.ts b/next.config.ts index 5c0235f..43de405 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,7 +1,7 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { - allowedDevOrigins: ["127.0.0.1"], + allowedDevOrigins: ["127.0.0.1", "172.20.10.3"], }; export default nextConfig; diff --git a/public/assets/Curls.svg b/public/assets/Curls.svg new file mode 100644 index 0000000..720ebbd --- /dev/null +++ b/public/assets/Curls.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/assets/YDO.svg b/public/assets/YDO.svg new file mode 100644 index 0000000..479147b --- /dev/null +++ b/public/assets/YDO.svg @@ -0,0 +1,4 @@ + + + +