diff --git a/apps/admin/app/api/auth/[...nextauth]/route.ts b/apps/admin/app/api/auth/[...nextauth]/route.ts
new file mode 100644
index 0000000..ad9858b
--- /dev/null
+++ b/apps/admin/app/api/auth/[...nextauth]/route.ts
@@ -0,0 +1,2 @@
+import { handlers } from "@workspace/auth";
+export const { GET, POST } = handlers;
diff --git a/apps/web/app/favicon.ico b/apps/admin/app/favicon.ico
similarity index 100%
rename from apps/web/app/favicon.ico
rename to apps/admin/app/favicon.ico
diff --git a/apps/web/app/layout.tsx b/apps/admin/app/layout.tsx
similarity index 100%
rename from apps/web/app/layout.tsx
rename to apps/admin/app/layout.tsx
diff --git a/apps/admin/app/page.tsx b/apps/admin/app/page.tsx
new file mode 100644
index 0000000..d338f0c
--- /dev/null
+++ b/apps/admin/app/page.tsx
@@ -0,0 +1,32 @@
+import Login from "@/components/login";
+import Studs from "@/components/studs";
+import { db, students } from "@workspace/db";
+import { signIn, signOut } from "@workspace/auth";
+
+async function getStudents() {
+ "use server";
+ const s = await db.select().from(students);
+ console.log(s);
+}
+
+async function logIn() {
+ "use server";
+ await signIn("google");
+}
+
+async function logOut() {
+ "use server";
+ await signOut();
+}
+
+export default async function Page() {
+ return (
+
+ );
+}
diff --git a/apps/web/components.json b/apps/admin/components.json
similarity index 100%
rename from apps/web/components.json
rename to apps/admin/components.json
diff --git a/apps/web/components/.gitkeep b/apps/admin/components/.gitkeep
similarity index 100%
rename from apps/web/components/.gitkeep
rename to apps/admin/components/.gitkeep
diff --git a/apps/admin/components/login.tsx b/apps/admin/components/login.tsx
new file mode 100644
index 0000000..7b42ac7
--- /dev/null
+++ b/apps/admin/components/login.tsx
@@ -0,0 +1,25 @@
+"use client";
+import { signIn } from "@workspace/auth";
+import { Button } from "@workspace/ui/components/button";
+
+export default function Login({logIn}: {logIn: () => Promise}) {
+ return (
+
+ );
+}
diff --git a/apps/web/components/providers.tsx b/apps/admin/components/providers.tsx
similarity index 79%
rename from apps/web/components/providers.tsx
rename to apps/admin/components/providers.tsx
index 25e8677..bb8a9ff 100644
--- a/apps/web/components/providers.tsx
+++ b/apps/admin/components/providers.tsx
@@ -1,7 +1,7 @@
-"use client"
+"use client";
-import * as React from "react"
-import { ThemeProvider as NextThemesProvider } from "next-themes"
+import * as React from "react";
+import { ThemeProvider as NextThemesProvider } from "next-themes";
export function Providers({ children }: { children: React.ReactNode }) {
return (
@@ -9,10 +9,9 @@ export function Providers({ children }: { children: React.ReactNode }) {
attribute="class"
defaultTheme="system"
enableSystem
- disableTransitionOnChange
enableColorScheme
>
{children}
- )
+ );
}
diff --git a/apps/admin/components/studs.tsx b/apps/admin/components/studs.tsx
new file mode 100644
index 0000000..7e49d2a
--- /dev/null
+++ b/apps/admin/components/studs.tsx
@@ -0,0 +1,19 @@
+import { Button } from "@workspace/ui/components/button";
+import { auth } from "@workspace/auth";
+
+export default async function Studs({
+ action,
+ logOut,
+}: {
+ action: () => void;
+ logOut: () => void;
+}) {
+ const session = await auth();
+ if (!session?.user) return null;
+ return (
+
+
+
+
+ );
+}
diff --git a/apps/web/eslint.config.js b/apps/admin/eslint.config.js
similarity index 100%
rename from apps/web/eslint.config.js
rename to apps/admin/eslint.config.js
diff --git a/apps/web/hooks/.gitkeep b/apps/admin/hooks/.gitkeep
similarity index 100%
rename from apps/web/hooks/.gitkeep
rename to apps/admin/hooks/.gitkeep
diff --git a/apps/web/lib/.gitkeep b/apps/admin/lib/.gitkeep
similarity index 100%
rename from apps/web/lib/.gitkeep
rename to apps/admin/lib/.gitkeep
diff --git a/apps/admin/middleware.ts b/apps/admin/middleware.ts
new file mode 100644
index 0000000..b876a27
--- /dev/null
+++ b/apps/admin/middleware.ts
@@ -0,0 +1 @@
+export { auth as middleware } from "@workspace/auth";
diff --git a/apps/web/next-env.d.ts b/apps/admin/next-env.d.ts
similarity index 100%
rename from apps/web/next-env.d.ts
rename to apps/admin/next-env.d.ts
diff --git a/apps/web/next.config.mjs b/apps/admin/next.config.mjs
similarity index 77%
rename from apps/web/next.config.mjs
rename to apps/admin/next.config.mjs
index bd167d9..9f01025 100644
--- a/apps/web/next.config.mjs
+++ b/apps/admin/next.config.mjs
@@ -1,6 +1,6 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
transpilePackages: ["@workspace/ui"],
-}
+};
-export default nextConfig
+export default nextConfig;
diff --git a/apps/web/package.json b/apps/admin/package.json
similarity index 65%
rename from apps/web/package.json
rename to apps/admin/package.json
index d0a4484..fcbdc83 100644
--- a/apps/web/package.json
+++ b/apps/admin/package.json
@@ -1,20 +1,23 @@
{
- "name": "web",
+ "name": "admin",
"version": "0.0.1",
"type": "module",
"private": true,
"scripts": {
- "dev": "next dev --turbopack",
- "build": "next build",
- "start": "next start",
+ "dev": "dotenv -e ../../.env -- next dev --turbopack -p 3001",
+ "build": "dotenv -e ../../.env -- next build",
+ "start": "dotenv -e ../../.env -- next start -p 3001",
"lint": "next lint",
"lint:fix": "next lint --fix",
"typecheck": "tsc --noEmit"
},
"dependencies": {
+ "@workspace/auth": "workspace:*",
+ "@workspace/db": "workspace:*",
"@workspace/ui": "workspace:*",
"lucide-react": "^0.475.0",
"next": "^15.2.3",
+ "next-auth": "^4.24.11",
"next-themes": "^0.4.4",
"react": "^19.0.0",
"react-dom": "^19.0.0"
@@ -25,6 +28,7 @@
"@types/react-dom": "^19",
"@workspace/eslint-config": "workspace:^",
"@workspace/typescript-config": "workspace:*",
+ "dotenv-cli": "^8.0.0",
"typescript": "^5.7.3"
}
}
diff --git a/apps/web/postcss.config.mjs b/apps/admin/postcss.config.mjs
similarity index 100%
rename from apps/web/postcss.config.mjs
rename to apps/admin/postcss.config.mjs
diff --git a/apps/web/tsconfig.json b/apps/admin/tsconfig.json
similarity index 100%
rename from apps/web/tsconfig.json
rename to apps/admin/tsconfig.json
diff --git a/apps/student/app/favicon.ico b/apps/student/app/favicon.ico
new file mode 100644
index 0000000..718d6fe
Binary files /dev/null and b/apps/student/app/favicon.ico differ
diff --git a/apps/student/app/layout.tsx b/apps/student/app/layout.tsx
new file mode 100644
index 0000000..7a807d4
--- /dev/null
+++ b/apps/student/app/layout.tsx
@@ -0,0 +1,30 @@
+import { Geist, Geist_Mono } from "next/font/google"
+
+import "@workspace/ui/globals.css"
+import { Providers } from "@/components/providers"
+
+const fontSans = Geist({
+ subsets: ["latin"],
+ variable: "--font-sans",
+})
+
+const fontMono = Geist_Mono({
+ subsets: ["latin"],
+ variable: "--font-mono",
+})
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode
+}>) {
+ return (
+
+
+ {children}
+
+
+ )
+}
diff --git a/apps/web/app/page.tsx b/apps/student/app/page.tsx
similarity index 66%
rename from apps/web/app/page.tsx
rename to apps/student/app/page.tsx
index e4f893a..1018ac5 100644
--- a/apps/web/app/page.tsx
+++ b/apps/student/app/page.tsx
@@ -1,12 +1,12 @@
-import { Button } from "@workspace/ui/components/button"
+import { Button } from "@workspace/ui/components/button";
export default function Page() {
return (
-
Hello World
+ Hello students
- )
+ );
}
diff --git a/apps/student/components.json b/apps/student/components.json
new file mode 100644
index 0000000..1fd99d3
--- /dev/null
+++ b/apps/student/components.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema.json",
+ "style": "new-york",
+ "rsc": true,
+ "tsx": true,
+ "tailwind": {
+ "config": "",
+ "css": "../../packages/ui/src/styles/globals.css",
+ "baseColor": "neutral",
+ "cssVariables": true
+ },
+ "iconLibrary": "lucide",
+ "aliases": {
+ "components": "@/components",
+ "hooks": "@/hooks",
+ "lib": "@/lib",
+ "utils": "@workspace/ui/lib/utils",
+ "ui": "@workspace/ui/components"
+ }
+}
diff --git a/apps/student/components/.gitkeep b/apps/student/components/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/apps/student/components/providers.tsx b/apps/student/components/providers.tsx
new file mode 100644
index 0000000..bb8a9ff
--- /dev/null
+++ b/apps/student/components/providers.tsx
@@ -0,0 +1,17 @@
+"use client";
+
+import * as React from "react";
+import { ThemeProvider as NextThemesProvider } from "next-themes";
+
+export function Providers({ children }: { children: React.ReactNode }) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/apps/student/eslint.config.js b/apps/student/eslint.config.js
new file mode 100644
index 0000000..5062ee3
--- /dev/null
+++ b/apps/student/eslint.config.js
@@ -0,0 +1,4 @@
+import { nextJsConfig } from "@workspace/eslint-config/next-js"
+
+/** @type {import("eslint").Linter.Config} */
+export default nextJsConfig
diff --git a/apps/student/hooks/.gitkeep b/apps/student/hooks/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/apps/student/lib/.gitkeep b/apps/student/lib/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/apps/student/next-env.d.ts b/apps/student/next-env.d.ts
new file mode 100644
index 0000000..1b3be08
--- /dev/null
+++ b/apps/student/next-env.d.ts
@@ -0,0 +1,5 @@
+///
+///
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/apps/student/next.config.mjs b/apps/student/next.config.mjs
new file mode 100644
index 0000000..a69d65d
--- /dev/null
+++ b/apps/student/next.config.mjs
@@ -0,0 +1,6 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ transpilePackages: ["@workspace/ui", "@workspace/auth", "@workspace/db"],
+};
+
+export default nextConfig;
diff --git a/apps/student/package.json b/apps/student/package.json
new file mode 100644
index 0000000..3179419
--- /dev/null
+++ b/apps/student/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "student",
+ "version": "0.0.1",
+ "type": "module",
+ "private": true,
+ "scripts": {
+ "dev": "dotenv -e ../../.env -- next dev --turbopack -p 3000",
+ "build": "dotenv -e ../../.env -- next build",
+ "start": "dotenv -e ../../.env -- next start -p 3000",
+ "lint": "next lint",
+ "lint:fix": "next lint --fix",
+ "typecheck": "tsc --noEmit"
+ },
+ "dependencies": {
+ "@workspace/ui": "workspace:*",
+ "@workspace/db": "workspace:*",
+ "@workspace/auth": "workspace:*",
+ "lucide-react": "^0.475.0",
+ "next": "^15.2.3",
+ "next-auth": "^4.24.11",
+ "next-themes": "^0.4.4",
+ "react": "^19.0.0",
+ "react-dom": "^19.0.0"
+ },
+ "devDependencies": {
+ "@types/node": "^20",
+ "@types/react": "^19",
+ "@types/react-dom": "^19",
+ "@workspace/eslint-config": "workspace:^",
+ "@workspace/typescript-config": "workspace:*",
+ "dotenv-cli": "^8.0.0",
+ "typescript": "^5.7.3"
+ }
+}
diff --git a/apps/student/postcss.config.mjs b/apps/student/postcss.config.mjs
new file mode 100644
index 0000000..535dec4
--- /dev/null
+++ b/apps/student/postcss.config.mjs
@@ -0,0 +1 @@
+export { default } from "@workspace/ui/postcss.config";
\ No newline at end of file
diff --git a/apps/student/tsconfig.json b/apps/student/tsconfig.json
new file mode 100644
index 0000000..8d6f25e
--- /dev/null
+++ b/apps/student/tsconfig.json
@@ -0,0 +1,23 @@
+{
+ "extends": "@workspace/typescript-config/nextjs.json",
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./*"],
+ "@workspace/ui/*": ["../../packages/ui/src/*"]
+ },
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ]
+ },
+ "include": [
+ "next-env.d.ts",
+ "next.config.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts"
+ ],
+ "exclude": ["node_modules"]
+}
diff --git a/package.json b/package.json
index d02b4a4..f675395 100644
--- a/package.json
+++ b/package.json
@@ -6,13 +6,17 @@
"build": "turbo build",
"dev": "turbo dev",
"lint": "turbo lint",
- "format": "prettier --write \"**/*.{ts,tsx,md}\""
+ "format": "prettier --write \"**/*.{ts,tsx,md}\"",
+ "db:check": "pnpm --filter @workspace/db check",
+ "db:generate": "pnpm --filter @workspace/db generate",
+ "db:migrate": "pnpm --filter @workspace/db migrate",
+ "db:studio": "pnpm --filter @workspace/db studio"
},
"devDependencies": {
"@workspace/eslint-config": "workspace:*",
"@workspace/typescript-config": "workspace:*",
- "prettier": "^3.5.1",
- "turbo": "^2.4.2",
+ "prettier": "^3.5.3",
+ "turbo": "^2.5.4",
"typescript": "5.7.3"
},
"packageManager": "pnpm@10.4.1",
diff --git a/packages/auth/index.ts b/packages/auth/index.ts
new file mode 100644
index 0000000..8ab8f2c
--- /dev/null
+++ b/packages/auth/index.ts
@@ -0,0 +1,14 @@
+import NextAuth, { type NextAuthConfig } from "next-auth";
+import Google from "next-auth/providers/google";
+
+const authConfig: NextAuthConfig = {
+ providers: [Google],
+ callbacks: {},
+};
+
+const nextAuth = NextAuth(authConfig);
+
+export const handlers: typeof nextAuth.handlers = nextAuth.handlers;
+export const signIn: typeof nextAuth.signIn = nextAuth.signIn;
+export const signOut: typeof nextAuth.signOut = nextAuth.signOut;
+export const auth: typeof nextAuth.auth = nextAuth.auth;
diff --git a/packages/auth/package.json b/packages/auth/package.json
new file mode 100644
index 0000000..4f2056e
--- /dev/null
+++ b/packages/auth/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "@workspace/auth",
+ "version": "1.0.0",
+ "type": "module",
+ "private": true,
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "lint": "eslint . --max-warnings 0"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "packageManager": "pnpm@10.4.1",
+ "dependencies": {
+ "next-auth": "5.0.0-beta.28"
+ },
+ "devDependencies": {
+ "dotenv": "^16.5.0"
+ }
+}
diff --git a/packages/db/drizzle.config.ts b/packages/db/drizzle.config.ts
new file mode 100644
index 0000000..ae100fa
--- /dev/null
+++ b/packages/db/drizzle.config.ts
@@ -0,0 +1,13 @@
+import { config } from "dotenv";
+import { defineConfig } from "drizzle-kit";
+
+config({ path: "../../.env" });
+
+export default defineConfig({
+ schema: "./schema.ts",
+ out: "./migrations",
+ dialect: "postgresql",
+ dbCredentials: {
+ url: process.env.DATABASE_URL!,
+ },
+});
diff --git a/packages/db/index.ts b/packages/db/index.ts
new file mode 100644
index 0000000..3989703
--- /dev/null
+++ b/packages/db/index.ts
@@ -0,0 +1,5 @@
+import { drizzle } from "drizzle-orm/neon-http";
+
+export const db = drizzle(process.env.DATABASE_URL!);
+
+export * from "./schema.js";
diff --git a/packages/db/migrations/0000_powerful_captain_midlands.sql b/packages/db/migrations/0000_powerful_captain_midlands.sql
new file mode 100644
index 0000000..90833c5
--- /dev/null
+++ b/packages/db/migrations/0000_powerful_captain_midlands.sql
@@ -0,0 +1,129 @@
+CREATE TABLE "applications" (
+ "id" serial PRIMARY KEY NOT NULL,
+ "job_id" integer NOT NULL,
+ "student_id" integer NOT NULL,
+ "resume_id" integer NOT NULL,
+ "status" text DEFAULT 'pending' NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+CREATE TABLE "certificates" (
+ "id" serial PRIMARY KEY NOT NULL,
+ "student_id" integer NOT NULL,
+ "title" text NOT NULL,
+ "description" text NOT NULL,
+ "link" text NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+CREATE TABLE "companies" (
+ "id" serial PRIMARY KEY NOT NULL,
+ "name" text NOT NULL,
+ "email" text NOT NULL,
+ "link" text NOT NULL,
+ "description" text NOT NULL,
+ "passwordHash" text NOT NULL,
+ "imageURL" text NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+CREATE TABLE "grades" (
+ "id" serial PRIMARY KEY NOT NULL,
+ "student_id" integer NOT NULL,
+ "sem" integer NOT NULL,
+ "sgpi" numeric(4, 2) NOT NULL,
+ "isKT" boolean NOT NULL,
+ "deadKT" boolean,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+CREATE TABLE "internships" (
+ "id" serial PRIMARY KEY NOT NULL,
+ "student_id" integer NOT NULL,
+ "title" text NOT NULL,
+ "company" text NOT NULL,
+ "description" text NOT NULL,
+ "location" text NOT NULL,
+ "startDate" timestamp NOT NULL,
+ "endDate" timestamp NOT NULL,
+ "status" text NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+CREATE TABLE "jobs" (
+ "id" serial PRIMARY KEY NOT NULL,
+ "company_id" integer NOT NULL,
+ "title" text NOT NULL,
+ "link" text NOT NULL,
+ "description" text NOT NULL,
+ "location" text NOT NULL,
+ "imageURL" text NOT NULL,
+ "salary" text NOT NULL,
+ "applicationDeadline" timestamp NOT NULL,
+ "active" boolean DEFAULT false NOT NULL,
+ "minCGPA" numeric(4, 2) DEFAULT '0' NOT NULL,
+ "minSSC" numeric(4, 2) DEFAULT '0' NOT NULL,
+ "minHSC" numeric(4, 2) DEFAULT '0' NOT NULL,
+ "allowDeadKT" boolean DEFAULT true NOT NULL,
+ "allowLiveKT" boolean DEFAULT true NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+CREATE TABLE "projects" (
+ "id" serial PRIMARY KEY NOT NULL,
+ "student_id" integer NOT NULL,
+ "title" text NOT NULL,
+ "description" text NOT NULL,
+ "links" text[] DEFAULT ARRAY[]::text[] NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+CREATE TABLE "resumes" (
+ "id" serial PRIMARY KEY NOT NULL,
+ "student_id" integer NOT NULL,
+ "title" text NOT NULL,
+ "link" text NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+CREATE TABLE "students" (
+ "id" serial PRIMARY KEY NOT NULL,
+ "email" text NOT NULL,
+ "rollNumber" varchar(12),
+ "verified" boolean DEFAULT false NOT NULL,
+ "firstName" varchar(255),
+ "middleName" varchar(255),
+ "lastName" varchar(255),
+ "mothersName" varchar(255),
+ "phoneNumber" varchar(10),
+ "address" text,
+ "profilePicture" text,
+ "degree" text,
+ "branch" text,
+ "year" text,
+ "skills" text[] DEFAULT ARRAY[]::text[],
+ "linkedin" text,
+ "github" text,
+ "ssc" numeric(4, 2),
+ "hsc" numeric(4, 2),
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+ALTER TABLE "applications" ADD CONSTRAINT "applications_job_id_jobs_id_fk" FOREIGN KEY ("job_id") REFERENCES "public"."jobs"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "applications" ADD CONSTRAINT "applications_student_id_students_id_fk" FOREIGN KEY ("student_id") REFERENCES "public"."students"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "applications" ADD CONSTRAINT "applications_resume_id_resumes_id_fk" FOREIGN KEY ("resume_id") REFERENCES "public"."resumes"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "certificates" ADD CONSTRAINT "certificates_student_id_students_id_fk" FOREIGN KEY ("student_id") REFERENCES "public"."students"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "grades" ADD CONSTRAINT "grades_student_id_students_id_fk" FOREIGN KEY ("student_id") REFERENCES "public"."students"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "internships" ADD CONSTRAINT "internships_student_id_students_id_fk" FOREIGN KEY ("student_id") REFERENCES "public"."students"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "jobs" ADD CONSTRAINT "jobs_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "projects" ADD CONSTRAINT "projects_student_id_students_id_fk" FOREIGN KEY ("student_id") REFERENCES "public"."students"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "resumes" ADD CONSTRAINT "resumes_student_id_students_id_fk" FOREIGN KEY ("student_id") REFERENCES "public"."students"("id") ON DELETE no action ON UPDATE no action;
\ No newline at end of file
diff --git a/packages/db/migrations/0001_opposite_madame_web.sql b/packages/db/migrations/0001_opposite_madame_web.sql
new file mode 100644
index 0000000..4022cda
--- /dev/null
+++ b/packages/db/migrations/0001_opposite_madame_web.sql
@@ -0,0 +1 @@
+ALTER TABLE "companies" ALTER COLUMN "passwordHash" DROP NOT NULL;
\ No newline at end of file
diff --git a/packages/db/migrations/0002_flowery_silver_surfer.sql b/packages/db/migrations/0002_flowery_silver_surfer.sql
new file mode 100644
index 0000000..eaf0a65
--- /dev/null
+++ b/packages/db/migrations/0002_flowery_silver_surfer.sql
@@ -0,0 +1,7 @@
+CREATE TABLE "admins" (
+ "id" serial PRIMARY KEY NOT NULL,
+ "email" text NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL,
+ CONSTRAINT "admins_email_unique" UNIQUE("email")
+);
diff --git a/packages/db/migrations/meta/0000_snapshot.json b/packages/db/migrations/meta/0000_snapshot.json
new file mode 100644
index 0000000..d893d1e
--- /dev/null
+++ b/packages/db/migrations/meta/0000_snapshot.json
@@ -0,0 +1,846 @@
+{
+ "id": "ec1ab426-0cd1-4c54-a300-6ba73b5a1d6a",
+ "prevId": "00000000-0000-0000-0000-000000000000",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.applications": {
+ "name": "applications",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "job_id": {
+ "name": "job_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resume_id": {
+ "name": "resume_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "applications_job_id_jobs_id_fk": {
+ "name": "applications_job_id_jobs_id_fk",
+ "tableFrom": "applications",
+ "tableTo": "jobs",
+ "columnsFrom": [
+ "job_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "applications_student_id_students_id_fk": {
+ "name": "applications_student_id_students_id_fk",
+ "tableFrom": "applications",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "applications_resume_id_resumes_id_fk": {
+ "name": "applications_resume_id_resumes_id_fk",
+ "tableFrom": "applications",
+ "tableTo": "resumes",
+ "columnsFrom": [
+ "resume_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.certificates": {
+ "name": "certificates",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "link": {
+ "name": "link",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "certificates_student_id_students_id_fk": {
+ "name": "certificates_student_id_students_id_fk",
+ "tableFrom": "certificates",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.companies": {
+ "name": "companies",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "link": {
+ "name": "link",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "passwordHash": {
+ "name": "passwordHash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "imageURL": {
+ "name": "imageURL",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.grades": {
+ "name": "grades",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sem": {
+ "name": "sem",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sgpi": {
+ "name": "sgpi",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "isKT": {
+ "name": "isKT",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "deadKT": {
+ "name": "deadKT",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "grades_student_id_students_id_fk": {
+ "name": "grades_student_id_students_id_fk",
+ "tableFrom": "grades",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.internships": {
+ "name": "internships",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "company": {
+ "name": "company",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "location": {
+ "name": "location",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "startDate": {
+ "name": "startDate",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "endDate": {
+ "name": "endDate",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "internships_student_id_students_id_fk": {
+ "name": "internships_student_id_students_id_fk",
+ "tableFrom": "internships",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.jobs": {
+ "name": "jobs",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "company_id": {
+ "name": "company_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "link": {
+ "name": "link",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "location": {
+ "name": "location",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "imageURL": {
+ "name": "imageURL",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "salary": {
+ "name": "salary",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "applicationDeadline": {
+ "name": "applicationDeadline",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "active": {
+ "name": "active",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "minCGPA": {
+ "name": "minCGPA",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'0'"
+ },
+ "minSSC": {
+ "name": "minSSC",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'0'"
+ },
+ "minHSC": {
+ "name": "minHSC",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'0'"
+ },
+ "allowDeadKT": {
+ "name": "allowDeadKT",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "allowLiveKT": {
+ "name": "allowLiveKT",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "jobs_company_id_companies_id_fk": {
+ "name": "jobs_company_id_companies_id_fk",
+ "tableFrom": "jobs",
+ "tableTo": "companies",
+ "columnsFrom": [
+ "company_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.projects": {
+ "name": "projects",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "links": {
+ "name": "links",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "ARRAY[]::text[]"
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "projects_student_id_students_id_fk": {
+ "name": "projects_student_id_students_id_fk",
+ "tableFrom": "projects",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.resumes": {
+ "name": "resumes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "link": {
+ "name": "link",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "resumes_student_id_students_id_fk": {
+ "name": "resumes_student_id_students_id_fk",
+ "tableFrom": "resumes",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.students": {
+ "name": "students",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "rollNumber": {
+ "name": "rollNumber",
+ "type": "varchar(12)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "verified": {
+ "name": "verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "firstName": {
+ "name": "firstName",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "middleName": {
+ "name": "middleName",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "lastName": {
+ "name": "lastName",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "mothersName": {
+ "name": "mothersName",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "phoneNumber": {
+ "name": "phoneNumber",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "address": {
+ "name": "address",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "profilePicture": {
+ "name": "profilePicture",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "degree": {
+ "name": "degree",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "branch": {
+ "name": "branch",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "year": {
+ "name": "year",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "skills": {
+ "name": "skills",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "ARRAY[]::text[]"
+ },
+ "linkedin": {
+ "name": "linkedin",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "github": {
+ "name": "github",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "ssc": {
+ "name": "ssc",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "hsc": {
+ "name": "hsc",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {},
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/packages/db/migrations/meta/0001_snapshot.json b/packages/db/migrations/meta/0001_snapshot.json
new file mode 100644
index 0000000..3228860
--- /dev/null
+++ b/packages/db/migrations/meta/0001_snapshot.json
@@ -0,0 +1,846 @@
+{
+ "id": "80ca9435-e1e2-474c-8c42-08337bbc2f85",
+ "prevId": "ec1ab426-0cd1-4c54-a300-6ba73b5a1d6a",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.applications": {
+ "name": "applications",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "job_id": {
+ "name": "job_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resume_id": {
+ "name": "resume_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "applications_job_id_jobs_id_fk": {
+ "name": "applications_job_id_jobs_id_fk",
+ "tableFrom": "applications",
+ "tableTo": "jobs",
+ "columnsFrom": [
+ "job_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "applications_student_id_students_id_fk": {
+ "name": "applications_student_id_students_id_fk",
+ "tableFrom": "applications",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "applications_resume_id_resumes_id_fk": {
+ "name": "applications_resume_id_resumes_id_fk",
+ "tableFrom": "applications",
+ "tableTo": "resumes",
+ "columnsFrom": [
+ "resume_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.certificates": {
+ "name": "certificates",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "link": {
+ "name": "link",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "certificates_student_id_students_id_fk": {
+ "name": "certificates_student_id_students_id_fk",
+ "tableFrom": "certificates",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.companies": {
+ "name": "companies",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "link": {
+ "name": "link",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "passwordHash": {
+ "name": "passwordHash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "imageURL": {
+ "name": "imageURL",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.grades": {
+ "name": "grades",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sem": {
+ "name": "sem",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sgpi": {
+ "name": "sgpi",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "isKT": {
+ "name": "isKT",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "deadKT": {
+ "name": "deadKT",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "grades_student_id_students_id_fk": {
+ "name": "grades_student_id_students_id_fk",
+ "tableFrom": "grades",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.internships": {
+ "name": "internships",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "company": {
+ "name": "company",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "location": {
+ "name": "location",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "startDate": {
+ "name": "startDate",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "endDate": {
+ "name": "endDate",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "internships_student_id_students_id_fk": {
+ "name": "internships_student_id_students_id_fk",
+ "tableFrom": "internships",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.jobs": {
+ "name": "jobs",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "company_id": {
+ "name": "company_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "link": {
+ "name": "link",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "location": {
+ "name": "location",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "imageURL": {
+ "name": "imageURL",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "salary": {
+ "name": "salary",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "applicationDeadline": {
+ "name": "applicationDeadline",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "active": {
+ "name": "active",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "minCGPA": {
+ "name": "minCGPA",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'0'"
+ },
+ "minSSC": {
+ "name": "minSSC",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'0'"
+ },
+ "minHSC": {
+ "name": "minHSC",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'0'"
+ },
+ "allowDeadKT": {
+ "name": "allowDeadKT",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "allowLiveKT": {
+ "name": "allowLiveKT",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "jobs_company_id_companies_id_fk": {
+ "name": "jobs_company_id_companies_id_fk",
+ "tableFrom": "jobs",
+ "tableTo": "companies",
+ "columnsFrom": [
+ "company_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.projects": {
+ "name": "projects",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "links": {
+ "name": "links",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "ARRAY[]::text[]"
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "projects_student_id_students_id_fk": {
+ "name": "projects_student_id_students_id_fk",
+ "tableFrom": "projects",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.resumes": {
+ "name": "resumes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "link": {
+ "name": "link",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "resumes_student_id_students_id_fk": {
+ "name": "resumes_student_id_students_id_fk",
+ "tableFrom": "resumes",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.students": {
+ "name": "students",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "rollNumber": {
+ "name": "rollNumber",
+ "type": "varchar(12)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "verified": {
+ "name": "verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "firstName": {
+ "name": "firstName",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "middleName": {
+ "name": "middleName",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "lastName": {
+ "name": "lastName",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "mothersName": {
+ "name": "mothersName",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "phoneNumber": {
+ "name": "phoneNumber",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "address": {
+ "name": "address",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "profilePicture": {
+ "name": "profilePicture",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "degree": {
+ "name": "degree",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "branch": {
+ "name": "branch",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "year": {
+ "name": "year",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "skills": {
+ "name": "skills",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "ARRAY[]::text[]"
+ },
+ "linkedin": {
+ "name": "linkedin",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "github": {
+ "name": "github",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "ssc": {
+ "name": "ssc",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "hsc": {
+ "name": "hsc",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {},
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/packages/db/migrations/meta/0002_snapshot.json b/packages/db/migrations/meta/0002_snapshot.json
new file mode 100644
index 0000000..d321abd
--- /dev/null
+++ b/packages/db/migrations/meta/0002_snapshot.json
@@ -0,0 +1,893 @@
+{
+ "id": "fecbaf55-79f1-48f7-bfc2-e8e1a35c89cf",
+ "prevId": "80ca9435-e1e2-474c-8c42-08337bbc2f85",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.admins": {
+ "name": "admins",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "admins_email_unique": {
+ "name": "admins_email_unique",
+ "nullsNotDistinct": false,
+ "columns": [
+ "email"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.applications": {
+ "name": "applications",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "job_id": {
+ "name": "job_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resume_id": {
+ "name": "resume_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "applications_job_id_jobs_id_fk": {
+ "name": "applications_job_id_jobs_id_fk",
+ "tableFrom": "applications",
+ "tableTo": "jobs",
+ "columnsFrom": [
+ "job_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "applications_student_id_students_id_fk": {
+ "name": "applications_student_id_students_id_fk",
+ "tableFrom": "applications",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "applications_resume_id_resumes_id_fk": {
+ "name": "applications_resume_id_resumes_id_fk",
+ "tableFrom": "applications",
+ "tableTo": "resumes",
+ "columnsFrom": [
+ "resume_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.certificates": {
+ "name": "certificates",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "link": {
+ "name": "link",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "certificates_student_id_students_id_fk": {
+ "name": "certificates_student_id_students_id_fk",
+ "tableFrom": "certificates",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.companies": {
+ "name": "companies",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "link": {
+ "name": "link",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "passwordHash": {
+ "name": "passwordHash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "imageURL": {
+ "name": "imageURL",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.grades": {
+ "name": "grades",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sem": {
+ "name": "sem",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sgpi": {
+ "name": "sgpi",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "isKT": {
+ "name": "isKT",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "deadKT": {
+ "name": "deadKT",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "grades_student_id_students_id_fk": {
+ "name": "grades_student_id_students_id_fk",
+ "tableFrom": "grades",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.internships": {
+ "name": "internships",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "company": {
+ "name": "company",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "location": {
+ "name": "location",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "startDate": {
+ "name": "startDate",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "endDate": {
+ "name": "endDate",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "internships_student_id_students_id_fk": {
+ "name": "internships_student_id_students_id_fk",
+ "tableFrom": "internships",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.jobs": {
+ "name": "jobs",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "company_id": {
+ "name": "company_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "link": {
+ "name": "link",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "location": {
+ "name": "location",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "imageURL": {
+ "name": "imageURL",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "salary": {
+ "name": "salary",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "applicationDeadline": {
+ "name": "applicationDeadline",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "active": {
+ "name": "active",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "minCGPA": {
+ "name": "minCGPA",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'0'"
+ },
+ "minSSC": {
+ "name": "minSSC",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'0'"
+ },
+ "minHSC": {
+ "name": "minHSC",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'0'"
+ },
+ "allowDeadKT": {
+ "name": "allowDeadKT",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "allowLiveKT": {
+ "name": "allowLiveKT",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "jobs_company_id_companies_id_fk": {
+ "name": "jobs_company_id_companies_id_fk",
+ "tableFrom": "jobs",
+ "tableTo": "companies",
+ "columnsFrom": [
+ "company_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.projects": {
+ "name": "projects",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "links": {
+ "name": "links",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "ARRAY[]::text[]"
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "projects_student_id_students_id_fk": {
+ "name": "projects_student_id_students_id_fk",
+ "tableFrom": "projects",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.resumes": {
+ "name": "resumes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "student_id": {
+ "name": "student_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "link": {
+ "name": "link",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "resumes_student_id_students_id_fk": {
+ "name": "resumes_student_id_students_id_fk",
+ "tableFrom": "resumes",
+ "tableTo": "students",
+ "columnsFrom": [
+ "student_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.students": {
+ "name": "students",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "rollNumber": {
+ "name": "rollNumber",
+ "type": "varchar(12)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "verified": {
+ "name": "verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "firstName": {
+ "name": "firstName",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "middleName": {
+ "name": "middleName",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "lastName": {
+ "name": "lastName",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "mothersName": {
+ "name": "mothersName",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "phoneNumber": {
+ "name": "phoneNumber",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "address": {
+ "name": "address",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "profilePicture": {
+ "name": "profilePicture",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "degree": {
+ "name": "degree",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "branch": {
+ "name": "branch",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "year": {
+ "name": "year",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "skills": {
+ "name": "skills",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "ARRAY[]::text[]"
+ },
+ "linkedin": {
+ "name": "linkedin",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "github": {
+ "name": "github",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "ssc": {
+ "name": "ssc",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "hsc": {
+ "name": "hsc",
+ "type": "numeric(4, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updatedAt": {
+ "name": "updatedAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {},
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/packages/db/migrations/meta/_journal.json b/packages/db/migrations/meta/_journal.json
new file mode 100644
index 0000000..81909f4
--- /dev/null
+++ b/packages/db/migrations/meta/_journal.json
@@ -0,0 +1,27 @@
+{
+ "version": "7",
+ "dialect": "postgresql",
+ "entries": [
+ {
+ "idx": 0,
+ "version": "7",
+ "when": 1750247301686,
+ "tag": "0000_powerful_captain_midlands",
+ "breakpoints": true
+ },
+ {
+ "idx": 1,
+ "version": "7",
+ "when": 1750247344794,
+ "tag": "0001_opposite_madame_web",
+ "breakpoints": true
+ },
+ {
+ "idx": 2,
+ "version": "7",
+ "when": 1750660274923,
+ "tag": "0002_flowery_silver_surfer",
+ "breakpoints": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/db/package.json b/packages/db/package.json
new file mode 100644
index 0000000..249e840
--- /dev/null
+++ b/packages/db/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@workspace/db",
+ "version": "1.0.0",
+ "type": "module",
+ "private": true,
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "lint": "eslint . --max-warnings 0",
+ "check": "drizzle-kit check",
+ "generate": "drizzle-kit generate",
+ "migrate": "drizzle-kit migrate",
+ "studio": "drizzle-kit studio"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "packageManager": "pnpm@10.4.1",
+ "dependencies": {
+ "@neondatabase/serverless": "^1.0.1",
+ "drizzle-orm": "^0.44.2"
+ },
+ "devDependencies": {
+ "dotenv": "^16.5.0",
+ "drizzle-kit": "^0.31.1"
+ }
+}
diff --git a/packages/db/schema.ts b/packages/db/schema.ts
new file mode 100644
index 0000000..73fae07
--- /dev/null
+++ b/packages/db/schema.ts
@@ -0,0 +1,262 @@
+import { sql, relations } from "drizzle-orm";
+import {
+ pgTable,
+ serial,
+ text,
+ varchar,
+ boolean,
+ timestamp,
+ integer,
+ numeric,
+} from "drizzle-orm/pg-core";
+
+export const students = pgTable("students", {
+ id: serial().primaryKey(),
+ email: text().notNull(),
+ rollNumber: varchar({ length: 12 }),
+ verified: boolean().notNull().default(false),
+ firstName: varchar({ length: 255 }),
+ middleName: varchar({ length: 255 }),
+ lastName: varchar({ length: 255 }),
+ mothersName: varchar({ length: 255 }),
+ phoneNumber: varchar({ length: 10 }),
+ address: text(),
+ profilePicture: text(),
+ degree: text(),
+ branch: text(),
+ year: text(),
+ skills: text()
+ .array()
+ .default(sql`ARRAY[]::text[]`),
+ linkedin: text(),
+ github: text(),
+ ssc: numeric({ precision: 4, scale: 2 }),
+ hsc: numeric({ precision: 4, scale: 2 }),
+ createdAt: timestamp().notNull().defaultNow(),
+ updatedAt: timestamp()
+ .defaultNow()
+ .$onUpdate(() => new Date())
+ .notNull(),
+});
+
+export const internships = pgTable("internships", {
+ id: serial().primaryKey(),
+ studentId: integer("student_id")
+ .notNull()
+ .references(() => students.id),
+ title: text().notNull(),
+ company: text().notNull(),
+ description: text().notNull(),
+ location: text().notNull(),
+ startDate: timestamp().notNull(),
+ endDate: timestamp().notNull(),
+ status: text().notNull(),
+ createdAt: timestamp().notNull().defaultNow(),
+ updatedAt: timestamp()
+ .defaultNow()
+ .$onUpdate(() => new Date())
+ .notNull(),
+});
+
+export const projects = pgTable("projects", {
+ id: serial().primaryKey(),
+ studentId: integer("student_id")
+ .notNull()
+ .references(() => students.id),
+ title: text().notNull(),
+ description: text().notNull(),
+ links: text()
+ .array()
+ .notNull()
+ .default(sql`ARRAY[]::text[]`),
+ createdAt: timestamp().notNull().defaultNow(),
+ updatedAt: timestamp()
+ .defaultNow()
+ .$onUpdate(() => new Date())
+ .notNull(),
+});
+
+export const certificates = pgTable("certificates", {
+ id: serial().primaryKey(),
+ studentId: integer("student_id")
+ .notNull()
+ .references(() => students.id),
+ title: text().notNull(),
+ description: text().notNull(),
+ link: text().notNull(),
+ createdAt: timestamp().notNull().defaultNow(),
+ updatedAt: timestamp()
+ .defaultNow()
+ .$onUpdate(() => new Date())
+ .notNull(),
+});
+
+export const resumes = pgTable("resumes", {
+ id: serial().primaryKey(),
+ studentId: integer("student_id")
+ .notNull()
+ .references(() => students.id),
+ title: text().notNull(),
+ link: text().notNull(),
+ createdAt: timestamp().notNull().defaultNow(),
+ updatedAt: timestamp()
+ .defaultNow()
+ .$onUpdate(() => new Date())
+ .notNull(),
+});
+
+export const grades = pgTable("grades", {
+ id: serial().primaryKey(),
+ studentId: integer("student_id")
+ .notNull()
+ .references(() => students.id),
+ sem: integer().notNull(),
+ sgpi: numeric({ precision: 4, scale: 2 }).notNull(),
+ isKT: boolean().notNull(),
+ deadKT: boolean(),
+ createdAt: timestamp().notNull().defaultNow(),
+ updatedAt: timestamp()
+ .defaultNow()
+ .$onUpdate(() => new Date())
+ .notNull(),
+});
+
+export const studentRelations = relations(students, ({ many }) => ({
+ internships: many(internships),
+ projects: many(projects),
+ certificates: many(certificates),
+ resumes: many(resumes),
+ grades: many(grades),
+}));
+
+export const internshipRelations = relations(internships, ({ one }) => ({
+ student: one(students, {
+ fields: [internships.studentId],
+ references: [students.id],
+ }),
+}));
+
+export const projectRelations = relations(projects, ({ one }) => ({
+ student: one(students, {
+ fields: [projects.studentId],
+ references: [students.id],
+ }),
+}));
+
+export const certificateRelations = relations(certificates, ({ one }) => ({
+ student: one(students, {
+ fields: [certificates.studentId],
+ references: [students.id],
+ }),
+}));
+
+export const resumeRelations = relations(resumes, ({ one, many }) => ({
+ student: one(students, {
+ fields: [resumes.studentId],
+ references: [students.id],
+ }),
+ applications: many(applications),
+}));
+
+export const gradeRelations = relations(grades, ({ one }) => ({
+ student: one(students, {
+ fields: [grades.studentId],
+ references: [students.id],
+ }),
+}));
+
+export const companies = pgTable("companies", {
+ id: serial().primaryKey(),
+ name: text().notNull(),
+ email: text().notNull(),
+ link: text().notNull(),
+ description: text().notNull(),
+ passwordHash: text(),
+ imageURL: text().notNull(),
+ createdAt: timestamp().notNull().defaultNow(),
+ updatedAt: timestamp()
+ .defaultNow()
+ .$onUpdate(() => new Date())
+ .notNull(),
+});
+
+export const jobs = pgTable("jobs", {
+ id: serial().primaryKey(),
+ companyId: integer("company_id")
+ .notNull()
+ .references(() => companies.id),
+ title: text().notNull(),
+ link: text().notNull(),
+ description: text().notNull(),
+ location: text().notNull(),
+ imageURL: text().notNull(),
+ salary: text().notNull(),
+ applicationDeadline: timestamp().notNull(),
+ active: boolean().notNull().default(false),
+ minCGPA: numeric({ precision: 4, scale: 2 }).notNull().default("0"),
+ minSSC: numeric({ precision: 4, scale: 2 }).notNull().default("0"),
+ minHSC: numeric({ precision: 4, scale: 2 }).notNull().default("0"),
+ allowDeadKT: boolean().notNull().default(true),
+ allowLiveKT: boolean().notNull().default(true),
+ createdAt: timestamp().notNull().defaultNow(),
+ updatedAt: timestamp()
+ .defaultNow()
+ .$onUpdate(() => new Date())
+ .notNull(),
+});
+
+export const applications = pgTable("applications", {
+ id: serial().primaryKey(),
+ jobId: integer("job_id")
+ .notNull()
+ .references(() => jobs.id),
+ studentId: integer("student_id")
+ .notNull()
+ .references(() => students.id),
+ resumeId: integer("resume_id")
+ .notNull()
+ .references(() => resumes.id),
+ status: text().notNull().default("pending"),
+ createdAt: timestamp().notNull().defaultNow(),
+ updatedAt: timestamp()
+ .defaultNow()
+ .$onUpdate(() => new Date())
+ .notNull(),
+});
+
+export const comapnyRelations = relations(companies, ({ many }) => ({
+ jobs: many(jobs),
+}));
+
+export const jobsRelations = relations(jobs, ({ one, many }) => ({
+ company: one(companies, {
+ fields: [jobs.companyId],
+ references: [companies.id],
+ }),
+ applications: many(applications),
+}));
+
+export const applicationsRelations = relations(applications, ({ one }) => ({
+ job: one(jobs, {
+ fields: [applications.jobId],
+ references: [jobs.id],
+ }),
+ student: one(students, {
+ fields: [applications.studentId],
+ references: [students.id],
+ }),
+ resume: one(resumes, {
+ fields: [applications.resumeId],
+ references: [resumes.id],
+ }),
+}));
+
+export const admins = pgTable("admins", {
+ id: serial().primaryKey(),
+ email: text().notNull().unique(),
+ createdAt: timestamp().notNull().defaultNow(),
+ updatedAt: timestamp()
+ .defaultNow()
+ .$onUpdate(() => new Date())
+ .notNull(),
+});
diff --git a/packages/ui/src/components/button.tsx b/packages/ui/src/components/button.tsx
index 9575a7e..e0e289d 100644
--- a/packages/ui/src/components/button.tsx
+++ b/packages/ui/src/components/button.tsx
@@ -14,7 +14,7 @@ const buttonVariants = cva(
destructive:
"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
outline:
- "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",
+ "bg-background border border-border text-foreground shadow transition-all duration-300 ease-out group relative overflow-hidden hover:bg-muted hover:border-muted-foreground hover:shadow-lg hover:shadow-primary/20 hover:scale-102 active:scale-98 active:shadow-md focus:ring-2 focus:ring-primary focus:ring-offset-2",
secondary:
"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
ghost: "hover:bg-accent hover:text-accent-foreground",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 0a0bf86..f53f39d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -15,17 +15,23 @@ importers:
specifier: workspace:*
version: link:packages/typescript-config
prettier:
- specifier: ^3.5.1
- version: 3.5.1
+ specifier: ^3.5.3
+ version: 3.5.3
turbo:
- specifier: ^2.4.2
- version: 2.4.2
+ specifier: ^2.5.4
+ version: 2.5.4
typescript:
specifier: 5.7.3
version: 5.7.3
- apps/web:
+ apps/admin:
dependencies:
+ '@workspace/auth':
+ specifier: workspace:*
+ version: link:../../packages/auth
+ '@workspace/db':
+ specifier: workspace:*
+ version: link:../../packages/db
'@workspace/ui':
specifier: workspace:*
version: link:../../packages/ui
@@ -35,6 +41,9 @@ importers:
next:
specifier: ^15.2.3
version: 15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ next-auth:
+ specifier: ^4.24.11
+ version: 4.24.11(next@15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
next-themes:
specifier: ^0.4.4
version: 0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -60,10 +69,91 @@ importers:
'@workspace/typescript-config':
specifier: workspace:*
version: link:../../packages/typescript-config
+ dotenv-cli:
+ specifier: ^8.0.0
+ version: 8.0.0
typescript:
specifier: ^5.7.3
version: 5.7.3
+ apps/student:
+ dependencies:
+ '@workspace/auth':
+ specifier: workspace:*
+ version: link:../../packages/auth
+ '@workspace/db':
+ specifier: workspace:*
+ version: link:../../packages/db
+ '@workspace/ui':
+ specifier: workspace:*
+ version: link:../../packages/ui
+ lucide-react:
+ specifier: ^0.475.0
+ version: 0.475.0(react@19.0.0)
+ next:
+ specifier: ^15.2.3
+ version: 15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ next-auth:
+ specifier: ^4.24.11
+ version: 4.24.11(next@15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ next-themes:
+ specifier: ^0.4.4
+ version: 0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react:
+ specifier: ^19.0.0
+ version: 19.0.0
+ react-dom:
+ specifier: ^19.0.0
+ version: 19.0.0(react@19.0.0)
+ devDependencies:
+ '@types/node':
+ specifier: ^20
+ version: 20.17.19
+ '@types/react':
+ specifier: ^19
+ version: 19.0.10
+ '@types/react-dom':
+ specifier: ^19
+ version: 19.0.4(@types/react@19.0.10)
+ '@workspace/eslint-config':
+ specifier: workspace:^
+ version: link:../../packages/eslint-config
+ '@workspace/typescript-config':
+ specifier: workspace:*
+ version: link:../../packages/typescript-config
+ dotenv-cli:
+ specifier: ^8.0.0
+ version: 8.0.0
+ typescript:
+ specifier: ^5.7.3
+ version: 5.7.3
+
+ packages/auth:
+ dependencies:
+ next-auth:
+ specifier: 5.0.0-beta.28
+ version: 5.0.0-beta.28(next@15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)
+ devDependencies:
+ dotenv:
+ specifier: ^16.5.0
+ version: 16.5.0
+
+ packages/db:
+ dependencies:
+ '@neondatabase/serverless':
+ specifier: ^1.0.1
+ version: 1.0.1
+ drizzle-orm:
+ specifier: ^0.44.2
+ version: 0.44.2(@neondatabase/serverless@1.0.1)(@types/pg@8.15.4)
+ devDependencies:
+ dotenv:
+ specifier: ^16.5.0
+ version: 16.5.0
+ drizzle-kit:
+ specifier: ^0.31.1
+ version: 0.31.1
+
packages/eslint-config:
devDependencies:
'@next/eslint-plugin-next':
@@ -92,7 +182,7 @@ importers:
version: 5.1.0(eslint@9.20.1(jiti@2.4.2))
eslint-plugin-turbo:
specifier: ^2.4.2
- version: 2.4.2(eslint@9.20.1(jiti@2.4.2))(turbo@2.4.2)
+ version: 2.4.2(eslint@9.20.1(jiti@2.4.2))(turbo@2.5.4)
globals:
specifier: ^15.15.0
version: 15.15.0
@@ -172,17 +262,328 @@ packages:
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
+ '@auth/core@0.39.1':
+ resolution: {integrity: sha512-McD8slui0oOA1pjR5sPjLPl5Zm//nLP/8T3kr8hxIsvNLvsiudYvPHhDFPjh1KcZ2nFxCkZmP6bRxaaPd/AnLA==}
+ peerDependencies:
+ '@simplewebauthn/browser': ^9.0.1
+ '@simplewebauthn/server': ^9.0.2
+ nodemailer: ^6.8.0
+ peerDependenciesMeta:
+ '@simplewebauthn/browser':
+ optional: true
+ '@simplewebauthn/server':
+ optional: true
+ nodemailer:
+ optional: true
+
'@babel/runtime-corejs3@7.26.9':
resolution: {integrity: sha512-5EVjbTegqN7RSJle6hMWYxO4voo4rI+9krITk+DWR+diJgGrjZjrIBnJhjrHYYQsFgI7j1w1QnrvV7YSKBfYGg==}
engines: {node: '>=6.9.0'}
+ '@babel/runtime@7.27.6':
+ resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
+ engines: {node: '>=6.9.0'}
+
'@cspotcode/source-map-support@0.8.1':
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
+ '@drizzle-team/brocli@0.10.2':
+ resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==}
+
'@emnapi/runtime@1.3.1':
resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
+ '@esbuild-kit/core-utils@3.3.2':
+ resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
+ deprecated: 'Merged into tsx: https://tsx.is'
+
+ '@esbuild-kit/esm-loader@2.6.5':
+ resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
+ deprecated: 'Merged into tsx: https://tsx.is'
+
+ '@esbuild/aix-ppc64@0.25.5':
+ resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.18.20':
+ resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.25.5':
+ resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.18.20':
+ resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.25.5':
+ resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.18.20':
+ resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.25.5':
+ resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.18.20':
+ resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.25.5':
+ resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.18.20':
+ resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.25.5':
+ resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.18.20':
+ resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.25.5':
+ resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.18.20':
+ resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.25.5':
+ resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.18.20':
+ resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.25.5':
+ resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.18.20':
+ resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.25.5':
+ resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.18.20':
+ resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.25.5':
+ resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.18.20':
+ resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.25.5':
+ resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.18.20':
+ resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.25.5':
+ resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.18.20':
+ resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.25.5':
+ resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.18.20':
+ resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.25.5':
+ resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.18.20':
+ resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.25.5':
+ resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.18.20':
+ resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.25.5':
+ resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.25.5':
+ resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.18.20':
+ resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.25.5':
+ resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.25.5':
+ resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.18.20':
+ resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.25.5':
+ resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.18.20':
+ resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.25.5':
+ resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.18.20':
+ resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.25.5':
+ resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.18.20':
+ resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.25.5':
+ resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.18.20':
+ resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.25.5':
+ resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@eslint-community/eslint-utils@4.4.1':
resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -356,6 +757,10 @@ packages:
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+ '@neondatabase/serverless@1.0.1':
+ resolution: {integrity: sha512-O6yC5TT0jbw86VZVkmnzCZJB0hfxBl0JJz6f+3KHoZabjb/X08r9eFA+vuY06z1/qaovykvdkrXYq3SPUuvogA==}
+ engines: {node: '>=19.0.0'}
+
'@next/env@15.2.3':
resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==}
@@ -422,6 +827,9 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
+ '@panva/hkdf@1.2.1':
+ resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==}
+
'@radix-ui/react-compose-refs@1.1.1':
resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==}
peerDependencies:
@@ -563,6 +971,12 @@ packages:
'@types/node@20.17.19':
resolution: {integrity: sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==}
+ '@types/node@22.15.32':
+ resolution: {integrity: sha512-3jigKqgSjsH6gYZv2nEsqdXfZqIFGAV36XYYjf9KGZ3PSG+IhLecqPnI310RvjutyMwifE2hhhNEklOUrvx/wA==}
+
+ '@types/pg@8.15.4':
+ resolution: {integrity: sha512-I6UNVBAoYbvuWkkU3oosC8yxqH21f4/Jc4DK71JLG3dT2mdlGe1z+ep/LQGXaKaOgcvUrsQoPRqfgtMcvZiJhg==}
+
'@types/react-dom@19.0.4':
resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==}
peerDependencies:
@@ -738,6 +1152,9 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
@@ -845,6 +1262,10 @@ packages:
constant-case@2.0.0:
resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==}
+ cookie@0.7.2:
+ resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
+ engines: {node: '>= 0.6'}
+
core-js-pure@3.40.0:
resolution: {integrity: sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A==}
@@ -933,10 +1354,118 @@ packages:
dot-case@2.1.1:
resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==}
+ dotenv-cli@8.0.0:
+ resolution: {integrity: sha512-aLqYbK7xKOiTMIRf1lDPbI+Y+Ip/wo5k3eyp6ePysVaSqbyxjyK3dK35BTxG+rmd7djf5q2UPs4noPNH+cj0Qw==}
+ hasBin: true
+
+ dotenv-expand@10.0.0:
+ resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==}
+ engines: {node: '>=12'}
+
dotenv@16.0.3:
resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
engines: {node: '>=12'}
+ dotenv@16.5.0:
+ resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==}
+ engines: {node: '>=12'}
+
+ drizzle-kit@0.31.1:
+ resolution: {integrity: sha512-PUjYKWtzOzPtdtQlTHQG3qfv4Y0XT8+Eas6UbxCmxTj7qgMf+39dDujf1BP1I+qqZtw9uzwTh8jYtkMuCq+B0Q==}
+ hasBin: true
+
+ drizzle-orm@0.44.2:
+ resolution: {integrity: sha512-zGAqBzWWkVSFjZpwPOrmCrgO++1kZ5H/rZ4qTGeGOe18iXGVJWf3WPfHOVwFIbmi8kHjfJstC6rJomzGx8g/dQ==}
+ peerDependencies:
+ '@aws-sdk/client-rds-data': '>=3'
+ '@cloudflare/workers-types': '>=4'
+ '@electric-sql/pglite': '>=0.2.0'
+ '@libsql/client': '>=0.10.0'
+ '@libsql/client-wasm': '>=0.10.0'
+ '@neondatabase/serverless': '>=0.10.0'
+ '@op-engineering/op-sqlite': '>=2'
+ '@opentelemetry/api': ^1.4.1
+ '@planetscale/database': '>=1.13'
+ '@prisma/client': '*'
+ '@tidbcloud/serverless': '*'
+ '@types/better-sqlite3': '*'
+ '@types/pg': '*'
+ '@types/sql.js': '*'
+ '@upstash/redis': '>=1.34.7'
+ '@vercel/postgres': '>=0.8.0'
+ '@xata.io/client': '*'
+ better-sqlite3: '>=7'
+ bun-types: '*'
+ expo-sqlite: '>=14.0.0'
+ gel: '>=2'
+ knex: '*'
+ kysely: '*'
+ mysql2: '>=2'
+ pg: '>=8'
+ postgres: '>=3'
+ prisma: '*'
+ sql.js: '>=1'
+ sqlite3: '>=5'
+ peerDependenciesMeta:
+ '@aws-sdk/client-rds-data':
+ optional: true
+ '@cloudflare/workers-types':
+ optional: true
+ '@electric-sql/pglite':
+ optional: true
+ '@libsql/client':
+ optional: true
+ '@libsql/client-wasm':
+ optional: true
+ '@neondatabase/serverless':
+ optional: true
+ '@op-engineering/op-sqlite':
+ optional: true
+ '@opentelemetry/api':
+ optional: true
+ '@planetscale/database':
+ optional: true
+ '@prisma/client':
+ optional: true
+ '@tidbcloud/serverless':
+ optional: true
+ '@types/better-sqlite3':
+ optional: true
+ '@types/pg':
+ optional: true
+ '@types/sql.js':
+ optional: true
+ '@upstash/redis':
+ optional: true
+ '@vercel/postgres':
+ optional: true
+ '@xata.io/client':
+ optional: true
+ better-sqlite3:
+ optional: true
+ bun-types:
+ optional: true
+ expo-sqlite:
+ optional: true
+ gel:
+ optional: true
+ knex:
+ optional: true
+ kysely:
+ optional: true
+ mysql2:
+ optional: true
+ pg:
+ optional: true
+ postgres:
+ optional: true
+ prisma:
+ optional: true
+ sql.js:
+ optional: true
+ sqlite3:
+ optional: true
+
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
@@ -980,6 +1509,21 @@ packages:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'}
+ esbuild-register@3.6.0:
+ resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==}
+ peerDependencies:
+ esbuild: '>=0.12 <1'
+
+ esbuild@0.18.20:
+ resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.25.5:
+ resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
@@ -1156,6 +1700,9 @@ packages:
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
engines: {node: '>= 0.4'}
+ get-tsconfig@4.10.1:
+ resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
+
get-uri@6.0.4:
resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==}
engines: {node: '>= 14'}
@@ -1449,6 +1996,12 @@ packages:
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
hasBin: true
+ jose@4.15.9:
+ resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==}
+
+ jose@6.0.11:
+ resolution: {integrity: sha512-QxG7EaliDARm1O1S8BGakqncGT9s25bKL1WSf6/oa17Tkqwi8D2ZNglqCF+DsYF88/rV66Q/Q2mFAy697E1DUg==}
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -1578,6 +2131,10 @@ packages:
lower-case@1.1.4:
resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==}
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+
lru-cache@7.18.3:
resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
engines: {node: '>=12'}
@@ -1649,6 +2206,36 @@ packages:
resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
engines: {node: '>= 0.4.0'}
+ next-auth@4.24.11:
+ resolution: {integrity: sha512-pCFXzIDQX7xmHFs4KVH4luCjaCbuPRtZ9oBUjUhOk84mZ9WVPf94n87TxYI4rSRf9HmfHEF8Yep3JrYDVOo3Cw==}
+ peerDependencies:
+ '@auth/core': 0.34.2
+ next: ^12.2.5 || ^13 || ^14 || ^15
+ nodemailer: ^6.6.5
+ react: ^17.0.2 || ^18 || ^19
+ react-dom: ^17.0.2 || ^18 || ^19
+ peerDependenciesMeta:
+ '@auth/core':
+ optional: true
+ nodemailer:
+ optional: true
+
+ next-auth@5.0.0-beta.28:
+ resolution: {integrity: sha512-2RDR1h3DJb4nizcd5UBBwC2gtyP7j/jTvVLvEtDaFSKUWNfou3Gek2uTNHSga/Q4I/GF+OJobA4mFbRaWJgIDQ==}
+ peerDependencies:
+ '@simplewebauthn/browser': ^9.0.1
+ '@simplewebauthn/server': ^9.0.2
+ next: ^14.0.0-0 || ^15.0.0-0
+ nodemailer: ^6.6.5
+ react: ^18.2.0 || ^19.0.0-0
+ peerDependenciesMeta:
+ '@simplewebauthn/browser':
+ optional: true
+ '@simplewebauthn/server':
+ optional: true
+ nodemailer:
+ optional: true
+
next-themes@0.4.4:
resolution: {integrity: sha512-LDQ2qIOJF0VnuVrrMSMLrWGjRMkq+0mpgl6e0juCLqdJ+oo8Q84JRWT6Wh11VDQKkMMe+dVzDKLWs5n87T+PkQ==}
peerDependencies:
@@ -1687,10 +2274,20 @@ packages:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
+ oauth4webapi@3.5.3:
+ resolution: {integrity: sha512-2bnHosmBLAQpXNBLOvaJMyMkr4Yya5ohE5Q9jqyxiN+aa7GFCzvDN1RRRMrp0NkfqRR2MTaQNkcSUCCjILD9oQ==}
+
+ oauth@0.9.15:
+ resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==}
+
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
+ object-hash@2.2.0:
+ resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==}
+ engines: {node: '>= 6'}
+
object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
@@ -1715,6 +2312,10 @@ packages:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines: {node: '>= 0.4'}
+ oidc-token-hash@5.1.0:
+ resolution: {integrity: sha512-y0W+X7Ppo7oZX6eovsRkuzcSM40Bicg2JEJkDJ4irIt1wsYAP5MLSNv+QAogO8xivMffw/9OvV3um1pxXgt1uA==}
+ engines: {node: ^10.13.0 || >=12.0.0}
+
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
@@ -1722,6 +2323,9 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
+ openid-client@5.7.1:
+ resolution: {integrity: sha512-jDBPgSVfTnkIh71Hg9pRvtJc6wTwqjRkN88+gCFtYWrlP4Yx2Dsrow8uPi3qLr/aeymPF3o2+dS+wOpglK04ew==}
+
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -1794,6 +2398,17 @@ packages:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
+ pg-int8@1.0.1:
+ resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
+ engines: {node: '>=4.0.0'}
+
+ pg-protocol@1.10.0:
+ resolution: {integrity: sha512-IpdytjudNuLv8nhlHs/UrVBhU0e78J0oIS/0AVdTbWxSOkFUVdsHC/NrorO6nXsQNDTT1kzDSOMJubBQviX18Q==}
+
+ pg-types@2.2.0:
+ resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
+ engines: {node: '>=4'}
+
picocolors@1.0.1:
resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
@@ -1816,15 +2431,50 @@ packages:
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
engines: {node: ^10 || ^12 || >=14}
+ postgres-array@2.0.0:
+ resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
+ engines: {node: '>=4'}
+
+ postgres-bytea@1.0.0:
+ resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
+ engines: {node: '>=0.10.0'}
+
+ postgres-date@1.0.7:
+ resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
+ engines: {node: '>=0.10.0'}
+
+ postgres-interval@1.2.0:
+ resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
+ engines: {node: '>=0.10.0'}
+
+ preact-render-to-string@5.2.6:
+ resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==}
+ peerDependencies:
+ preact: '>=10'
+
+ preact-render-to-string@6.5.11:
+ resolution: {integrity: sha512-ubnauqoGczeGISiOh6RjX0/cdaF8v/oDXIjO85XALCQjwQP+SB4RDXXtvZ6yTYSjG+PC1QRP2AhPgCEsM2EvUw==}
+ peerDependencies:
+ preact: '>=10'
+
+ preact@10.24.3:
+ resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==}
+
+ preact@10.26.9:
+ resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==}
+
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
- prettier@3.5.1:
- resolution: {integrity: sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==}
+ prettier@3.5.3:
+ resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
engines: {node: '>=14'}
hasBin: true
+ pretty-format@3.8.0:
+ resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
+
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
@@ -1884,6 +2534,9 @@ packages:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
resolve@1.22.10:
resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
engines: {node: '>= 0.4'}
@@ -2027,6 +2680,9 @@ packages:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
@@ -2164,38 +2820,38 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
- turbo-darwin-64@2.4.2:
- resolution: {integrity: sha512-HFfemyWB60CJtEvVQj9yby5rkkWw9fLAdLtAPGtPQoU3tKh8t/uzCAZKso2aPVbib9vGUuGbPGoGpaRXdVhj5g==}
+ turbo-darwin-64@2.5.4:
+ resolution: {integrity: sha512-ah6YnH2dErojhFooxEzmvsoZQTMImaruZhFPfMKPBq8sb+hALRdvBNLqfc8NWlZq576FkfRZ/MSi4SHvVFT9PQ==}
cpu: [x64]
os: [darwin]
- turbo-darwin-arm64@2.4.2:
- resolution: {integrity: sha512-uwSx1dsBSSFeEC0nxyx2O219FEsS/haiESaWwE9JI8mHkQK61s6w6fN2G586krKxyNam4AIxRltleL+O2Em94g==}
+ turbo-darwin-arm64@2.5.4:
+ resolution: {integrity: sha512-2+Nx6LAyuXw2MdXb7pxqle3MYignLvS7OwtsP9SgtSBaMlnNlxl9BovzqdYAgkUW3AsYiQMJ/wBRb7d+xemM5A==}
cpu: [arm64]
os: [darwin]
- turbo-linux-64@2.4.2:
- resolution: {integrity: sha512-Fy/uL8z/LAYcPbm7a1LwFnTY9pIi5FAi12iuHsgB7zHjdh4eeIKS2NIg4nroAmTcUTUZ0/cVTo4bDOCUcS3aKw==}
+ turbo-linux-64@2.5.4:
+ resolution: {integrity: sha512-5May2kjWbc8w4XxswGAl74GZ5eM4Gr6IiroqdLhXeXyfvWEdm2mFYCSWOzz0/z5cAgqyGidF1jt1qzUR8hTmOA==}
cpu: [x64]
os: [linux]
- turbo-linux-arm64@2.4.2:
- resolution: {integrity: sha512-AEA0d8h5W/K6iiXfEgiNwWt0yqRL1NpBs8zQCLdc4/L7WeYeJW3sORWX8zt7xhutF/KW9gTm8ehKpiK6cCIsAA==}
+ turbo-linux-arm64@2.5.4:
+ resolution: {integrity: sha512-/2yqFaS3TbfxV3P5yG2JUI79P7OUQKOUvAnx4MV9Bdz6jqHsHwc9WZPpO4QseQm+NvmgY6ICORnoVPODxGUiJg==}
cpu: [arm64]
os: [linux]
- turbo-windows-64@2.4.2:
- resolution: {integrity: sha512-CybtIZ9wRgnnNFVN9En9G+rxsO+mwU81fvW4RpE8BWyNEkhQ8J28qYf4PaimueMxGHHp/28i/G7Kcdn2GAWG0g==}
+ turbo-windows-64@2.5.4:
+ resolution: {integrity: sha512-EQUO4SmaCDhO6zYohxIjJpOKRN3wlfU7jMAj3CgcyTPvQR/UFLEKAYHqJOnJtymbQmiiM/ihX6c6W6Uq0yC7mA==}
cpu: [x64]
os: [win32]
- turbo-windows-arm64@2.4.2:
- resolution: {integrity: sha512-7V0yneVPL8Y3TgrkUIjw7Odmwu1tHnyIiPHFM7eFcA7U+H6hPXyCxge7nC3wOKfjhKCQqUm+Vf/k6kjmLz5G4g==}
+ turbo-windows-arm64@2.5.4:
+ resolution: {integrity: sha512-oQ8RrK1VS8lrxkLriotFq+PiF7iiGgkZtfLKF4DDKsmdbPo0O9R2mQxm7jHLuXraRCuIQDWMIw6dpcr7Iykf4A==}
cpu: [arm64]
os: [win32]
- turbo@2.4.2:
- resolution: {integrity: sha512-Qxi0ioQCxMRUCcHKHZkTnYH8e7XCpNfg9QiJcyfWIc+ZXeaCjzV5rCGlbQlTXMAtI8qgfP8fZADv3CFtPwqdPQ==}
+ turbo@2.5.4:
+ resolution: {integrity: sha512-kc8ZibdRcuWUG1pbYSBFWqmIjynlD8Lp7IB6U3vIzvOv9VG+6Sp8bzyeBWE3Oi8XV5KsQrznyRTBPvrf99E4mA==}
hasBin: true
tw-animate-css@1.2.4:
@@ -2249,6 +2905,9 @@ packages:
undici-types@6.19.8:
resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
@@ -2268,6 +2927,10 @@ packages:
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
@@ -2313,6 +2976,13 @@ packages:
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ xtend@4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
yn@3.1.1:
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
engines: {node: '>=6'}
@@ -2328,20 +2998,183 @@ snapshots:
'@alloc/quick-lru@5.2.0': {}
+ '@auth/core@0.39.1':
+ dependencies:
+ '@panva/hkdf': 1.2.1
+ jose: 6.0.11
+ oauth4webapi: 3.5.3
+ preact: 10.24.3
+ preact-render-to-string: 6.5.11(preact@10.24.3)
+
'@babel/runtime-corejs3@7.26.9':
dependencies:
core-js-pure: 3.40.0
regenerator-runtime: 0.14.1
+ '@babel/runtime@7.27.6': {}
+
'@cspotcode/source-map-support@0.8.1':
dependencies:
'@jridgewell/trace-mapping': 0.3.9
+ '@drizzle-team/brocli@0.10.2': {}
+
'@emnapi/runtime@1.3.1':
dependencies:
tslib: 2.8.1
optional: true
+ '@esbuild-kit/core-utils@3.3.2':
+ dependencies:
+ esbuild: 0.18.20
+ source-map-support: 0.5.21
+
+ '@esbuild-kit/esm-loader@2.6.5':
+ dependencies:
+ '@esbuild-kit/core-utils': 3.3.2
+ get-tsconfig: 4.10.1
+
+ '@esbuild/aix-ppc64@0.25.5':
+ optional: true
+
+ '@esbuild/android-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/android-arm64@0.25.5':
+ optional: true
+
+ '@esbuild/android-arm@0.18.20':
+ optional: true
+
+ '@esbuild/android-arm@0.25.5':
+ optional: true
+
+ '@esbuild/android-x64@0.18.20':
+ optional: true
+
+ '@esbuild/android-x64@0.25.5':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.25.5':
+ optional: true
+
+ '@esbuild/darwin-x64@0.18.20':
+ optional: true
+
+ '@esbuild/darwin-x64@0.25.5':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.25.5':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.25.5':
+ optional: true
+
+ '@esbuild/linux-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-arm64@0.25.5':
+ optional: true
+
+ '@esbuild/linux-arm@0.18.20':
+ optional: true
+
+ '@esbuild/linux-arm@0.25.5':
+ optional: true
+
+ '@esbuild/linux-ia32@0.18.20':
+ optional: true
+
+ '@esbuild/linux-ia32@0.25.5':
+ optional: true
+
+ '@esbuild/linux-loong64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-loong64@0.25.5':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.18.20':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.25.5':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.25.5':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.25.5':
+ optional: true
+
+ '@esbuild/linux-s390x@0.18.20':
+ optional: true
+
+ '@esbuild/linux-s390x@0.25.5':
+ optional: true
+
+ '@esbuild/linux-x64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-x64@0.25.5':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.25.5':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.25.5':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.25.5':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.25.5':
+ optional: true
+
+ '@esbuild/sunos-x64@0.18.20':
+ optional: true
+
+ '@esbuild/sunos-x64@0.25.5':
+ optional: true
+
+ '@esbuild/win32-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/win32-arm64@0.25.5':
+ optional: true
+
+ '@esbuild/win32-ia32@0.18.20':
+ optional: true
+
+ '@esbuild/win32-ia32@0.25.5':
+ optional: true
+
+ '@esbuild/win32-x64@0.18.20':
+ optional: true
+
+ '@esbuild/win32-x64@0.25.5':
+ optional: true
+
'@eslint-community/eslint-utils@4.4.1(eslint@9.20.1(jiti@2.4.2))':
dependencies:
eslint: 9.20.1(jiti@2.4.2)
@@ -2485,6 +3318,11 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
+ '@neondatabase/serverless@1.0.1':
+ dependencies:
+ '@types/node': 22.15.32
+ '@types/pg': 8.15.4
+
'@next/env@15.2.3': {}
'@next/eslint-plugin-next@15.1.7':
@@ -2527,6 +3365,8 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.0
+ '@panva/hkdf@1.2.1': {}
+
'@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.10)(react@19.0.0)':
dependencies:
react: 19.0.0
@@ -2672,6 +3512,16 @@ snapshots:
dependencies:
undici-types: 6.19.8
+ '@types/node@22.15.32':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/pg@8.15.4':
+ dependencies:
+ '@types/node': 20.17.19
+ pg-protocol: 1.10.0
+ pg-types: 2.2.0
+
'@types/react-dom@19.0.4(@types/react@19.0.10)':
dependencies:
'@types/react': 19.0.10
@@ -2897,6 +3747,8 @@ snapshots:
dependencies:
fill-range: 7.1.1
+ buffer-from@1.1.2: {}
+
buffer@5.7.1:
dependencies:
base64-js: 1.5.1
@@ -3024,6 +3876,8 @@ snapshots:
snake-case: 2.1.0
upper-case: 1.1.3
+ cookie@0.7.2: {}
+
core-js-pure@3.40.0: {}
create-require@1.1.1: {}
@@ -3116,8 +3970,33 @@ snapshots:
dependencies:
no-case: 2.3.2
+ dotenv-cli@8.0.0:
+ dependencies:
+ cross-spawn: 7.0.6
+ dotenv: 16.5.0
+ dotenv-expand: 10.0.0
+ minimist: 1.2.8
+
+ dotenv-expand@10.0.0: {}
+
dotenv@16.0.3: {}
+ dotenv@16.5.0: {}
+
+ drizzle-kit@0.31.1:
+ dependencies:
+ '@drizzle-team/brocli': 0.10.2
+ '@esbuild-kit/esm-loader': 2.6.5
+ esbuild: 0.25.5
+ esbuild-register: 3.6.0(esbuild@0.25.5)
+ transitivePeerDependencies:
+ - supports-color
+
+ drizzle-orm@0.44.2(@neondatabase/serverless@1.0.1)(@types/pg@8.15.4):
+ optionalDependencies:
+ '@neondatabase/serverless': 1.0.1
+ '@types/pg': 8.15.4
+
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -3229,6 +4108,66 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
+ esbuild-register@3.6.0(esbuild@0.25.5):
+ dependencies:
+ debug: 4.4.0
+ esbuild: 0.25.5
+ transitivePeerDependencies:
+ - supports-color
+
+ esbuild@0.18.20:
+ optionalDependencies:
+ '@esbuild/android-arm': 0.18.20
+ '@esbuild/android-arm64': 0.18.20
+ '@esbuild/android-x64': 0.18.20
+ '@esbuild/darwin-arm64': 0.18.20
+ '@esbuild/darwin-x64': 0.18.20
+ '@esbuild/freebsd-arm64': 0.18.20
+ '@esbuild/freebsd-x64': 0.18.20
+ '@esbuild/linux-arm': 0.18.20
+ '@esbuild/linux-arm64': 0.18.20
+ '@esbuild/linux-ia32': 0.18.20
+ '@esbuild/linux-loong64': 0.18.20
+ '@esbuild/linux-mips64el': 0.18.20
+ '@esbuild/linux-ppc64': 0.18.20
+ '@esbuild/linux-riscv64': 0.18.20
+ '@esbuild/linux-s390x': 0.18.20
+ '@esbuild/linux-x64': 0.18.20
+ '@esbuild/netbsd-x64': 0.18.20
+ '@esbuild/openbsd-x64': 0.18.20
+ '@esbuild/sunos-x64': 0.18.20
+ '@esbuild/win32-arm64': 0.18.20
+ '@esbuild/win32-ia32': 0.18.20
+ '@esbuild/win32-x64': 0.18.20
+
+ esbuild@0.25.5:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.5
+ '@esbuild/android-arm': 0.25.5
+ '@esbuild/android-arm64': 0.25.5
+ '@esbuild/android-x64': 0.25.5
+ '@esbuild/darwin-arm64': 0.25.5
+ '@esbuild/darwin-x64': 0.25.5
+ '@esbuild/freebsd-arm64': 0.25.5
+ '@esbuild/freebsd-x64': 0.25.5
+ '@esbuild/linux-arm': 0.25.5
+ '@esbuild/linux-arm64': 0.25.5
+ '@esbuild/linux-ia32': 0.25.5
+ '@esbuild/linux-loong64': 0.25.5
+ '@esbuild/linux-mips64el': 0.25.5
+ '@esbuild/linux-ppc64': 0.25.5
+ '@esbuild/linux-riscv64': 0.25.5
+ '@esbuild/linux-s390x': 0.25.5
+ '@esbuild/linux-x64': 0.25.5
+ '@esbuild/netbsd-arm64': 0.25.5
+ '@esbuild/netbsd-x64': 0.25.5
+ '@esbuild/openbsd-arm64': 0.25.5
+ '@esbuild/openbsd-x64': 0.25.5
+ '@esbuild/sunos-x64': 0.25.5
+ '@esbuild/win32-arm64': 0.25.5
+ '@esbuild/win32-ia32': 0.25.5
+ '@esbuild/win32-x64': 0.25.5
+
escape-string-regexp@1.0.5: {}
escape-string-regexp@4.0.0: {}
@@ -3273,11 +4212,11 @@ snapshots:
string.prototype.matchall: 4.0.12
string.prototype.repeat: 1.0.0
- eslint-plugin-turbo@2.4.2(eslint@9.20.1(jiti@2.4.2))(turbo@2.4.2):
+ eslint-plugin-turbo@2.4.2(eslint@9.20.1(jiti@2.4.2))(turbo@2.5.4):
dependencies:
dotenv: 16.0.3
eslint: 9.20.1(jiti@2.4.2)
- turbo: 2.4.2
+ turbo: 2.5.4
eslint-scope@8.2.0:
dependencies:
@@ -3468,6 +4407,10 @@ snapshots:
es-errors: 1.3.0
get-intrinsic: 1.2.7
+ get-tsconfig@4.10.1:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
get-uri@6.0.4:
dependencies:
basic-ftp: 5.0.5
@@ -3794,6 +4737,10 @@ snapshots:
jiti@2.4.2: {}
+ jose@4.15.9: {}
+
+ jose@6.0.11: {}
+
js-tokens@4.0.0: {}
js-yaml@4.1.0:
@@ -3904,6 +4851,10 @@ snapshots:
lower-case@1.1.4: {}
+ lru-cache@6.0.0:
+ dependencies:
+ yallist: 4.0.0
+
lru-cache@7.18.3: {}
lucide-react@0.475.0(react@19.0.0):
@@ -3953,6 +4904,27 @@ snapshots:
netmask@2.0.2: {}
+ next-auth@4.24.11(next@15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@panva/hkdf': 1.2.1
+ cookie: 0.7.2
+ jose: 4.15.9
+ next: 15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ oauth: 0.9.15
+ openid-client: 5.7.1
+ preact: 10.26.9
+ preact-render-to-string: 5.2.6(preact@10.26.9)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ uuid: 8.3.2
+
+ next-auth@5.0.0-beta.28(next@15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0):
+ dependencies:
+ '@auth/core': 0.39.1
+ next: 15.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+
next-themes@0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
dependencies:
react: 19.0.0
@@ -4005,8 +4977,14 @@ snapshots:
dependencies:
path-key: 3.1.1
+ oauth4webapi@3.5.3: {}
+
+ oauth@0.9.15: {}
+
object-assign@4.1.1: {}
+ object-hash@2.2.0: {}
+
object-inspect@1.13.4: {}
object-keys@1.1.1: {}
@@ -4040,6 +5018,8 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.1
+ oidc-token-hash@5.1.0: {}
+
once@1.4.0:
dependencies:
wrappy: 1.0.2
@@ -4048,6 +5028,13 @@ snapshots:
dependencies:
mimic-fn: 2.1.0
+ openid-client@5.7.1:
+ dependencies:
+ jose: 4.15.9
+ lru-cache: 6.0.0
+ object-hash: 2.2.0
+ oidc-token-hash: 5.1.0
+
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
@@ -4145,6 +5132,18 @@ snapshots:
path-type@4.0.0: {}
+ pg-int8@1.0.1: {}
+
+ pg-protocol@1.10.0: {}
+
+ pg-types@2.2.0:
+ dependencies:
+ pg-int8: 1.0.1
+ postgres-array: 2.0.0
+ postgres-bytea: 1.0.0
+ postgres-date: 1.0.7
+ postgres-interval: 1.2.0
+
picocolors@1.0.1: {}
picocolors@1.1.1: {}
@@ -4165,9 +5164,34 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
+ postgres-array@2.0.0: {}
+
+ postgres-bytea@1.0.0: {}
+
+ postgres-date@1.0.7: {}
+
+ postgres-interval@1.2.0:
+ dependencies:
+ xtend: 4.0.2
+
+ preact-render-to-string@5.2.6(preact@10.26.9):
+ dependencies:
+ preact: 10.26.9
+ pretty-format: 3.8.0
+
+ preact-render-to-string@6.5.11(preact@10.24.3):
+ dependencies:
+ preact: 10.24.3
+
+ preact@10.24.3: {}
+
+ preact@10.26.9: {}
+
prelude-ls@1.2.1: {}
- prettier@3.5.1: {}
+ prettier@3.5.3: {}
+
+ pretty-format@3.8.0: {}
prop-types@15.8.1:
dependencies:
@@ -4249,6 +5273,8 @@ snapshots:
resolve-from@4.0.0: {}
+ resolve-pkg-maps@1.0.0: {}
+
resolve@1.22.10:
dependencies:
is-core-module: 2.16.1
@@ -4435,6 +5461,11 @@ snapshots:
source-map-js@1.2.1: {}
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
source-map@0.6.1: {}
sprintf-js@1.1.3: {}
@@ -4579,32 +5610,32 @@ snapshots:
tslib@2.8.1: {}
- turbo-darwin-64@2.4.2:
+ turbo-darwin-64@2.5.4:
optional: true
- turbo-darwin-arm64@2.4.2:
+ turbo-darwin-arm64@2.5.4:
optional: true
- turbo-linux-64@2.4.2:
+ turbo-linux-64@2.5.4:
optional: true
- turbo-linux-arm64@2.4.2:
+ turbo-linux-arm64@2.5.4:
optional: true
- turbo-windows-64@2.4.2:
+ turbo-windows-64@2.5.4:
optional: true
- turbo-windows-arm64@2.4.2:
+ turbo-windows-arm64@2.5.4:
optional: true
- turbo@2.4.2:
+ turbo@2.5.4:
optionalDependencies:
- turbo-darwin-64: 2.4.2
- turbo-darwin-arm64: 2.4.2
- turbo-linux-64: 2.4.2
- turbo-linux-arm64: 2.4.2
- turbo-windows-64: 2.4.2
- turbo-windows-arm64: 2.4.2
+ turbo-darwin-64: 2.5.4
+ turbo-darwin-arm64: 2.5.4
+ turbo-linux-64: 2.5.4
+ turbo-linux-arm64: 2.5.4
+ turbo-windows-64: 2.5.4
+ turbo-windows-arm64: 2.5.4
tw-animate-css@1.2.4: {}
@@ -4671,6 +5702,8 @@ snapshots:
undici-types@6.19.8: {}
+ undici-types@6.21.0: {}
+
universalify@2.0.1: {}
update-check@1.5.4:
@@ -4690,6 +5723,8 @@ snapshots:
util-deprecate@1.0.2: {}
+ uuid@8.3.2: {}
+
v8-compile-cache-lib@3.0.1: {}
validate-npm-package-name@5.0.1: {}
@@ -4754,6 +5789,10 @@ snapshots:
wrappy@1.0.2: {}
+ xtend@4.0.2: {}
+
+ yallist@4.0.0: {}
+
yn@3.1.1: {}
yocto-queue@0.1.0: {}