aboutsummaryrefslogtreecommitdiff
path: root/frontend/src
diff options
context:
space:
mode:
authorGravatar Anshul Gupta <ansg191@anshulg.com> 2024-08-05 22:01:50 -0700
committerGravatar Anshul Gupta <ansg191@anshulg.com> 2024-08-05 22:01:50 -0700
commit9f655af04e728f359801552c0aac9ba204c5bbbf (patch)
treeac169a43b060be1b0c3fb40f16cfcdf145a84086 /frontend/src
parentf566fa80a9fb0f1af1198a62b60a80bb6ee1983b (diff)
downloadibd-trader-9f655af04e728f359801552c0aac9ba204c5bbbf.tar.gz
ibd-trader-9f655af04e728f359801552c0aac9ba204c5bbbf.tar.zst
ibd-trader-9f655af04e728f359801552c0aac9ba204c5bbbf.zip
Initial implementation
Diffstat (limited to 'frontend/src')
-rw-r--r--frontend/src/app/api/auth/[auth0]/route.ts3
-rw-r--r--frontend/src/app/dashboard/page.tsx15
-rw-r--r--frontend/src/app/globals.css30
-rw-r--r--frontend/src/app/layout.tsx29
-rw-r--r--frontend/src/app/page.tsx134
5 files changed, 62 insertions, 149 deletions
diff --git a/frontend/src/app/api/auth/[auth0]/route.ts b/frontend/src/app/api/auth/[auth0]/route.ts
new file mode 100644
index 0000000..fc08676
--- /dev/null
+++ b/frontend/src/app/api/auth/[auth0]/route.ts
@@ -0,0 +1,3 @@
+import {handleAuth} from '@auth0/nextjs-auth0';
+
+export const GET = handleAuth();
diff --git a/frontend/src/app/dashboard/page.tsx b/frontend/src/app/dashboard/page.tsx
new file mode 100644
index 0000000..910ccc7
--- /dev/null
+++ b/frontend/src/app/dashboard/page.tsx
@@ -0,0 +1,15 @@
+import {Metadata} from "next";
+import Link from "next/link";
+
+export const metadata: Metadata = {
+ title: "IBD Trader Dashboard",
+}
+
+export default function Dashboard() {
+ return (
+ <div>
+ <h1>Dashboard</h1>
+ <Link href="/api/auth/logout">Logout</Link>
+ </div>
+ )
+}
diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css
index 875c01e..79008c2 100644
--- a/frontend/src/app/globals.css
+++ b/frontend/src/app/globals.css
@@ -2,32 +2,8 @@
@tailwind components;
@tailwind utilities;
-:root {
- --foreground-rgb: 0, 0, 0;
- --background-start-rgb: 214, 219, 220;
- --background-end-rgb: 255, 255, 255;
-}
-
-@media (prefers-color-scheme: dark) {
- :root {
- --foreground-rgb: 255, 255, 255;
- --background-start-rgb: 0, 0, 0;
- --background-end-rgb: 0, 0, 0;
- }
-}
-
-body {
- color: rgb(var(--foreground-rgb));
- background: linear-gradient(
- to bottom,
- transparent,
- rgb(var(--background-end-rgb))
- )
- rgb(var(--background-start-rgb));
-}
-
@layer utilities {
- .text-balance {
- text-wrap: balance;
- }
+ .text-balance {
+ text-wrap: balance;
+ }
}
diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx
index 3314e47..00da3a9 100644
--- a/frontend/src/app/layout.tsx
+++ b/frontend/src/app/layout.tsx
@@ -1,22 +1,21 @@
-import type { Metadata } from "next";
-import { Inter } from "next/font/google";
+import type {Metadata} from "next";
+import {Inter} from "next/font/google";
import "./globals.css";
+import {UserProvider} from "@auth0/nextjs-auth0/client";
-const inter = Inter({ subsets: ["latin"] });
+const inter = Inter({subsets: ["latin"]});
export const metadata: Metadata = {
- title: "Create Next App",
- description: "Generated by create next app",
+ title: "Create Next App",
+ description: "Generated by create next app",
};
-export default function RootLayout({
- children,
-}: Readonly<{
- children: React.ReactNode;
-}>) {
- return (
- <html lang="en">
- <body className={inter.className}>{children}</body>
- </html>
- );
+export default function RootLayout({children,}: Readonly<{ children: React.ReactNode; }>) {
+ return (
+ <html lang="en">
+ <UserProvider>
+ <body className={inter.className}>{children}</body>
+ </UserProvider>
+ </html>
+ );
}
diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx
index 2acfd44..9f42d3a 100644
--- a/frontend/src/app/page.tsx
+++ b/frontend/src/app/page.tsx
@@ -1,113 +1,33 @@
import Image from "next/image";
+import {Metadata} from "next";
+import Link from "next/link";
+import {getSession} from "@auth0/nextjs-auth0";
+import {redirect} from "next/navigation";
-export default function Home() {
- return (
- <main className="flex min-h-screen flex-col items-center justify-between p-24">
- <div className="z-10 w-full max-w-5xl items-center justify-between font-mono text-sm lg:flex">
- <p className="fixed left-0 top-0 flex w-full justify-center border-b border-gray-300 bg-gradient-to-b from-zinc-200 pb-6 pt-8 backdrop-blur-2xl dark:border-neutral-800 dark:bg-zinc-800/30 dark:from-inherit lg:static lg:w-auto lg:rounded-xl lg:border lg:bg-gray-200 lg:p-4 lg:dark:bg-zinc-800/30">
- Get started by editing&nbsp;
- <code className="font-mono font-bold">src/app/page.tsx</code>
- </p>
- <div className="fixed bottom-0 left-0 flex h-48 w-full items-end justify-center bg-gradient-to-t from-white via-white dark:from-black dark:via-black lg:static lg:size-auto lg:bg-none">
- <a
- className="pointer-events-none flex place-items-center gap-2 p-8 lg:pointer-events-auto lg:p-0"
- href="https://vercel.com?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
- target="_blank"
- rel="noopener noreferrer"
- >
- By{" "}
- <Image
- src="/vercel.svg"
- alt="Vercel Logo"
- className="dark:invert"
- width={100}
- height={24}
- priority
- />
- </a>
- </div>
- </div>
-
- <div className="relative z-[-1] flex place-items-center before:absolute before:h-[300px] before:w-full before:-translate-x-1/2 before:rounded-full before:bg-gradient-radial before:from-white before:to-transparent before:blur-2xl before:content-[''] after:absolute after:-z-20 after:h-[180px] after:w-full after:translate-x-1/3 after:bg-gradient-conic after:from-sky-200 after:via-blue-200 after:blur-2xl after:content-[''] before:dark:bg-gradient-to-br before:dark:from-transparent before:dark:to-blue-700 before:dark:opacity-10 after:dark:from-sky-900 after:dark:via-[#0141ff] after:dark:opacity-40 sm:before:w-[480px] sm:after:w-[240px] before:lg:h-[360px]">
- <Image
- className="relative dark:drop-shadow-[0_0_0.3rem_#ffffff70] dark:invert"
- src="/next.svg"
- alt="Next.js Logo"
- width={180}
- height={37}
- priority
- />
- </div>
-
- <div className="mb-32 grid text-center lg:mb-0 lg:w-full lg:max-w-5xl lg:grid-cols-4 lg:text-left">
- <a
- href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
- className="group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30"
- target="_blank"
- rel="noopener noreferrer"
- >
- <h2 className="mb-3 text-2xl font-semibold">
- Docs{" "}
- <span className="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none">
- -&gt;
- </span>
- </h2>
- <p className="m-0 max-w-[30ch] text-sm opacity-50">
- Find in-depth information about Next.js features and API.
- </p>
- </a>
+export const metadata: Metadata = {
+ title: "IBD Trader",
+}
- <a
- href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
- className="group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30"
- target="_blank"
- rel="noopener noreferrer"
- >
- <h2 className="mb-3 text-2xl font-semibold">
- Learn{" "}
- <span className="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none">
- -&gt;
- </span>
- </h2>
- <p className="m-0 max-w-[30ch] text-sm opacity-50">
- Learn about Next.js in an interactive course with&nbsp;quizzes!
- </p>
- </a>
+export default async function Home() {
+ const user = await getSession();
- <a
- href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
- className="group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30"
- target="_blank"
- rel="noopener noreferrer"
- >
- <h2 className="mb-3 text-2xl font-semibold">
- Templates{" "}
- <span className="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none">
- -&gt;
- </span>
- </h2>
- <p className="m-0 max-w-[30ch] text-sm opacity-50">
- Explore starter templates for Next.js.
- </p>
- </a>
+ if (user) {
+ redirect("/dashboard")
+ }
- <a
- href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
- className="group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30"
- target="_blank"
- rel="noopener noreferrer"
- >
- <h2 className="mb-3 text-2xl font-semibold">
- Deploy{" "}
- <span className="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none">
- -&gt;
- </span>
- </h2>
- <p className="m-0 max-w-[30ch] text-balance text-sm opacity-50">
- Instantly deploy your Next.js site to a shareable URL with Vercel.
- </p>
- </a>
- </div>
- </main>
- );
+ return (
+ <div className="min-h-screen flex flex-col items-center justify-center bg-gray-100">
+ <main className="flex flex-col items-center justify-center w-full flex-1 px-20 text-center">
+ <div className="flex justify-center">
+ <Image src="/logo.svg" alt="IBD Trader" width={200} height={200}/>
+ </div>
+ <h1 className="text-6xl font-bold mt-4">Trader</h1>
+ <button className="mt-16 px-6 py-3 bg-blue-500 text-white rounded-md hover:bg-blue-600">
+ <Link href="/api/auth/login">
+ Login
+ </Link>
+ </button>
+ </main>
+ </div>
+ );
}