diff --git a/.env.example b/.env.example index 8fede2ae..4d4baa0b 100644 --- a/.env.example +++ b/.env.example @@ -1,2 +1,3 @@ -AUTH_SECRET="MY_SECRET_KEY" -DATABASE_URL="postgresql://postgres:postgres@db:5432/job-board-db" \ No newline at end of file +DATABASE_URL="postgres://emptystring:password@localhost:5432/" +NEXTAUTH_SECRET="koXrQGB5TFDhiX47swxHW+4KALDX4kAvnQ5RHHvAOIzB" +NEXTAUTH_URL="http://localhost:3000" \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..69199829 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +*.d.ts +.eslintrc +.prettierrc +.prettierignore +.next \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index bffb357a..81200060 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,3 +1,20 @@ { - "extends": "next/core-web-vitals" + "extends": "next/core-web-vitals", + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "rules": { + "no-console": ["error", { "allow": ["error"] }], + "eqeqeq": "error", + "@typescript-eslint/no-unused-vars": [ + "error", + { + "vars": "all", + "args": "after-used", + "caughtErrors": "all", + "ignoreRestSiblings": true, + "reportUsedIgnorePattern": false, + "caughtErrorsIgnorePattern": "^_" + } + ] + } } diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9ec41d48..fbc9911b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,7 +1,7 @@ -name: "🐛 Bug Report" -description: "Submit a bug report to help us improve" -title: "🐛 Bug Report: " -labels: ["type: bug"] +name: '🐛 Bug Report' +description: 'Submit a bug report to help us improve' +title: '🐛 Bug Report: ' +labels: ['type: bug'] body: - type: markdown attributes: @@ -11,16 +11,16 @@ body: validations: required: true attributes: - label: "📜 Description" - description: "A clear and concise description of what the bug is." - placeholder: "It bugs out when ..." + label: '📜 Description' + description: 'A clear and concise description of what the bug is.' + placeholder: 'It bugs out when ...' - type: textarea id: steps-to-reproduce validations: required: true attributes: - label: "👟 Reproduction steps" - description: "How do you trigger this bug? Please walk us through it step by step." + label: '👟 Reproduction steps' + description: 'How do you trigger this bug? Please walk us through it step by step.' placeholder: "1. Go to '...' 2. Click on '....' 3. Scroll down to '....' @@ -30,17 +30,17 @@ body: validations: required: true attributes: - label: "👍 Expected behavior" - description: "What did you think should happen?" - placeholder: "It should ..." + label: '👍 Expected behavior' + description: 'What did you think should happen?' + placeholder: 'It should ...' - type: textarea id: actual-behavior validations: required: true attributes: - label: "👎 Actual Behavior with Screenshots" - description: "What did actually happen? Add screenshots, if applicable." - placeholder: "It actually ..." + label: '👎 Actual Behavior with Screenshots' + description: 'What did actually happen? Add screenshots, if applicable.' + placeholder: 'It actually ...' - type: dropdown id: os-version validations: @@ -86,26 +86,26 @@ body: validations: required: false attributes: - label: "📃 Provide any additional context for the Bug." - description: "Add any other context about the problem here." - placeholder: "It actually ..." + label: '📃 Provide any additional context for the Bug.' + description: 'Add any other context about the problem here.' + placeholder: 'It actually ...' - type: checkboxes id: no-duplicate-issues attributes: - label: "👀 Have you spent some time to check if this bug has been raised before?" + label: '👀 Have you spent some time to check if this bug has been raised before?' options: - label: "I checked and didn't find a similar issue" required: true - type: checkboxes id: read-code-of-conduct attributes: - label: "🏢 Have you read the Contributing Guidelines?" + label: '🏢 Have you read the Contributing Guidelines?' options: - - label: "I have read the [Contributing Guidelines](https://github.com/code100x/job-board/blob/main/CONTRIBUTING.md)" + - label: 'I have read the [Contributing Guidelines](https://github.com/code100x/job-board/blob/main/CONTRIBUTING.md)' required: true - type: dropdown attributes: label: Are you willing to submit PR? description: This is absolutely not required, but we are happy to guide you in the contribution process. options: - - "Yes I am willing to submit a PR!" + - 'Yes I am willing to submit a PR!' diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 16230d6e..6957969e 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,6 +1,6 @@ name: 🚀 Feature -description: "Submit a proposal for a new feature" -title: "🚀 Feature: " +description: 'Submit a proposal for a new feature' +title: '🚀 Feature: ' labels: [feature] body: - type: markdown @@ -12,46 +12,46 @@ body: validations: required: true attributes: - label: "🔖 Feature description" - description: "A clear and concise description of what the feature is." - placeholder: "You should add ..." + label: '🔖 Feature description' + description: 'A clear and concise description of what the feature is.' + placeholder: 'You should add ...' - type: textarea id: pitch validations: required: true attributes: - label: "🎤 Why is this feature needed ?" - description: "Please explain why this feature should be implemented and how it would be used. Add examples, if applicable." - placeholder: "In my use-case, ..." + label: '🎤 Why is this feature needed ?' + description: 'Please explain why this feature should be implemented and how it would be used. Add examples, if applicable.' + placeholder: 'In my use-case, ...' - type: textarea id: solution validations: required: true attributes: - label: "✌️ How do you aim to achieve this?" - description: "A clear and concise description of what you want to happen." - placeholder: "I want this feature to, ..." + label: '✌️ How do you aim to achieve this?' + description: 'A clear and concise description of what you want to happen.' + placeholder: 'I want this feature to, ...' - type: textarea id: alternative validations: required: false attributes: - label: "🔄️ Additional Information" + label: '🔄️ Additional Information' description: "A clear and concise description of any alternative solutions or additional solutions you've considered." - placeholder: "I tried, ..." + placeholder: 'I tried, ...' - type: checkboxes id: no-duplicate-issues attributes: - label: "👀 Have you spent some time to check if this feature request has been raised before?" + label: '👀 Have you spent some time to check if this feature request has been raised before?' options: - label: "I checked and didn't find similar issue" required: true - type: checkboxes id: read-code-of-conduct attributes: - label: "🏢 Have you read the Code of Conduct?" + label: '🏢 Have you read the Code of Conduct?' options: - - label: "I have read the [Contributing Guidelines](https://github.com/code100x/job-board/blob/main/CONTRIBUTING.md)" + - label: 'I have read the [Contributing Guidelines](https://github.com/code100x/job-board/blob/main/CONTRIBUTING.md)' required: true - type: dropdown id: willing-to-submit-pr @@ -59,4 +59,4 @@ body: label: Are you willing to submit PR? description: This is absolutely not required, but we are happy to guide you in the contribution process. options: - - "Yes I am willing to submit a PR!" + - 'Yes I am willing to submit a PR!' diff --git a/.github/ISSUE_TEMPLATE/improvement.yml b/.github/ISSUE_TEMPLATE/improvement.yml index 7b1b175e..46aebebd 100644 --- a/.github/ISSUE_TEMPLATE/improvement.yml +++ b/.github/ISSUE_TEMPLATE/improvement.yml @@ -1,7 +1,7 @@ -name: "✨ Improvement" -description: "Submit a improvement report to help us improve" -title: "✨ Improvement: " -labels: ["improvement"] +name: '✨ Improvement' +description: 'Submit a improvement report to help us improve' +title: '✨ Improvement: ' +labels: ['improvement'] body: - type: markdown attributes: @@ -11,14 +11,14 @@ body: validations: required: true attributes: - label: "📜 Description" - description: "A clear and concise description of what the improvement is." + label: '📜 Description' + description: 'A clear and concise description of what the improvement is.' placeholder: "It's a improvement when ..." - type: textarea id: steps-to-reproduce attributes: - label: "👟 Reproduction steps" - description: "How do you encountered this behaviour? Please walk us through it step by step." + label: '👟 Reproduction steps' + description: 'How do you encountered this behaviour? Please walk us through it step by step.' placeholder: "1. Go to '...' 2. Click on '....' 3. Scroll down to '....' @@ -26,28 +26,28 @@ body: - type: textarea id: expected-behavior attributes: - label: "👍 Expected behavior" - description: "What did you think should happen?" - placeholder: "It should ..." + label: '👍 Expected behavior' + description: 'What did you think should happen?' + placeholder: 'It should ...' - type: textarea id: additional-context validations: required: false attributes: - label: "📃 Provide any additional context for the Bug." - description: "Add any other context about the problem here." - placeholder: "It actually ..." + label: '📃 Provide any additional context for the Bug.' + description: 'Add any other context about the problem here.' + placeholder: 'It actually ...' - type: checkboxes id: no-duplicate-issues attributes: - label: "👀 Have you spent some time to check if this bug has been raised before?" + label: '👀 Have you spent some time to check if this bug has been raised before?' options: - label: "I checked and didn't find similar issue" required: true - type: checkboxes id: read-code-of-conduct attributes: - label: "🏢 Have you read the Contributing Guidelines?" + label: '🏢 Have you read the Contributing Guidelines?' options: - - label: "I have read the [Contributing Guidelines](https://github.com/code100x/job-board/blob/main/CONTRIBUTING.md)" + - label: 'I have read the [Contributing Guidelines](https://github.com/code100x/job-board/blob/main/CONTRIBUTING.md)' required: true diff --git a/.gitignore b/.gitignore index ad9eb19b..8bf0160c 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,7 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts +pnpm-lock.yaml +bun.lockb +package-lock.json +yarn.lock \ No newline at end of file diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100644 index 00000000..7e5b516e --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npm run build \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..32216e96 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,8 @@ +dist +node_modules +.next +/package-lock.json +*.yaml +build +.env +out \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..4e932067 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,12 @@ +{ + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "trailingComma": "es5", + "printWidth": 80, + "bracketSpacing": true, + "bracketSameLine": false, + "arrowParens": "always", + "endOfLine": "auto" +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bd2c0d44..34151a9a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,6 +3,7 @@ First off, thank you for considering contributing to job-board! It's people like you that make the job-board such a great tool. ## Table of Contents + 1. [Code of Conduct](#code-of-conduct) 2. [Flow of Contribution](#flow-of-contribution) 3. [Getting Started](#getting-started) @@ -11,14 +12,12 @@ First off, thank you for considering contributing to job-board! It's people like - [Conventional Commits](#conventional-commits) 4. [Setting Up the Development Environment](#setting-up-the-development-environment) - - - ## Code of Conduct This project and everyone participating in it is governed by the 100x. By participating, you are expected to uphold this code. Please report unacceptable behavior to maintainers. ## Flow of Contribution + The following is a summary of the ideal contribution flow. Please, note that Pull Requests can also be rejected by the maintainers when appropriate. ┌───────────────────────┐ @@ -74,6 +73,7 @@ Pull requests should have a title that follows the specification, otherwise, mer - `chore: ` prefix in the title indicates that PR is only related to cleanup in the project and there is no need to trigger release. ## Setting Up the Development Environment + We have discussed this in detail [here](README.md). Happy contributing :) diff --git a/README.md b/README.md index c65bc9d8..f333fa5f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # Project Name: Job Board - ## Table of Contents - [Description](#description) @@ -8,7 +7,6 @@ - [Technologies](#technologies) - [Getting Started](#getting-started) - ## Description Job Board is a platform designed to connect employers with potential employees. Employers can post job listings, and job seekers can apply for these positions. The application ensures a seamless and efficient job search and hiring process. @@ -46,11 +44,12 @@ Follow these steps to set up the repository locally and run it. 1. Create a `.env` file in the root folder of your project. Update it following the convention of the `.env.example` file. Here's an example: ```bash - AUTH_SECRET="MY_SECRET_KEY" - DATABASE_URL=postgres://******** + DATABASE_URL="postgres://postgres:password@localhost:5432/postgres" + NEXTAUTH_SECRET="koXrQGB5TFD4KALDX4kAvnQ5RHHvAOIzB" + NEXTAUTH_URL="http://localhost:3000" ``` -2. To generate AUTH_SECRET, +2. To generate AUTH_SECRET, Run this command in your terminal: @@ -71,6 +70,7 @@ docker compose up --build ### Running the Project without Docker 1. Install the necessary dependencies: + ```bash npm install ``` @@ -78,8 +78,7 @@ docker compose up --build 2. Sync & Seed your database: ```bash - npx prisma db push - npx prisma db seed + npm run db:seed ``` 3. Start the development server: @@ -93,6 +92,6 @@ Now, you can run the project and make changes as needed. ### Test User Credentials ```js -Emails: "user1@gmail.com, user2@gmail.com, admin@gmail.com" -Password: "123456" +Emails: 'user@gmail.com, admin@gmail.com'; +Password: '123456'; ``` diff --git a/actions/job.ts b/actions/job.ts deleted file mode 100644 index 81d7ffc7..00000000 --- a/actions/job.ts +++ /dev/null @@ -1,78 +0,0 @@ -"use server"; - -import { auth } from "@/auth"; -import { SAPayload } from "@/types"; -import { NewJob } from "@/zod/job"; -import { prisma } from "@/lib/db"; -import { Currency, Job } from "@prisma/client"; -import z from "zod"; - -export const createJob = async (data: NewJob): Promise => { - const session = await auth(); - - if (!session) { - return { status: "error", message: "Internal Server Error" }; - } - - try { - const newJob = await prisma.job.create({ - data: { - userId: session.user.id as string, - title: data.title, - description: data.description, - companyName: data.companyName, - currency: data.currency as Currency, - salary: data.salary, - location: data.location, - }, - }); - - return { status: "success", message: "Job created Successfully" }; - } catch (error) { - console.log(error); - return { status: "error", message: "Internal Server Error" }; - } -}; - -const GetJobSchema = z.object({ - title: z.string().optional().default(""), - companyName: z.string().min(5, { - message: "Company Name must be at least 5 characters long.", - }).optional(), - location: z.string().optional().default(""), - currency: z.enum(["INR", "USD"]).optional(), - salRange: z.array(z.number()).optional().default([0, 1000000]), -}); - -type GetJobSchemaType = z.infer; - -export const getJobs = async (data: GetJobSchemaType) => { - const session = await auth(); - - if (!session) { - return { status: "error", message: "Internal Server Error" }; - } - - const { salRange, title, companyName, location, currency } = data; - - try { - const jobs = await prisma.job.findMany({ - where: { - ...(title && { title: { contains: title, mode: "insensitive" } }), - ...(companyName && { companyName: { contains: companyName, mode: "insensitive" } }), - ...(location && { location: { contains: location, mode: "insensitive" } }), - ...(currency && { currency }), - }, - }); - - const filteredJobs = jobs.filter((job) => { - const salary = parseFloat(job.salary); - return !isNaN(salary) && salary >= salRange[0] && salary <= salRange[1]; - }); - - return { status: "success", data: filteredJobs }; - } catch (error) { - console.log(error); - return { status: "error", message: "Internal Server Error" }; - } -}; diff --git a/actions/user.ts b/actions/user.ts deleted file mode 100644 index accc755f..00000000 --- a/actions/user.ts +++ /dev/null @@ -1,44 +0,0 @@ -"use server"; -import { signIn, signOut } from "@/auth"; -import { userLoginSchema } from "@/zod/user"; -import { prisma } from "@/lib/db"; -import { LoginAction, SAPayload } from "@/types"; - -export const loginUser = async ( - credentials: LoginAction -): Promise => { - const isValidated = await userLoginSchema.safeParseAsync(credentials); - - if (!isValidated.success) { - return { status: "error", message: "Invalid Credentials" }; - } - - const { email, password } = isValidated.data; - - try { - const existingUser = await prisma.user.findUnique({ - where: { - email, - }, - }); - - if (!existingUser) { - return { status: "error", message: "User does not Exists" }; - } - - await signIn("credentials", { email, password, redirect: false }); - - return { status: "success", message: "Login Successful" }; - } catch (error) { - return { status: "error", message: "Internal Server Error" }; - } -}; - -export const logOutUser = async (): Promise => { - try { - await signOut({ redirect: false }); - return { status: "success", message: "Logout Successful" }; - } catch (error) { - return { status: "error", message: "Internal Server Error" }; - } -}; diff --git a/app/(auth)/layout.tsx b/app/(auth)/layout.tsx deleted file mode 100644 index a844cb3b..00000000 --- a/app/(auth)/layout.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import Footer from "@/components/Footer"; -import { ReactNode } from "react"; -import { SiteHeader } from "@/components/SiteHeader"; - -type AuthLayoutProps = { - children: ReactNode; -}; - -const AuthLayout = async ({ children }: AuthLayoutProps) => { - return ( -
- - {children} -
- ); -}; - -export default AuthLayout; \ No newline at end of file diff --git a/app/(auth)/login/page.tsx b/app/(auth)/login/page.tsx deleted file mode 100644 index 13ed000a..00000000 --- a/app/(auth)/login/page.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import LoginForm from "@/components/forms/LoginForm"; - -const LoginPage = () => { - return ( -
- -
- ); -}; - -export default LoginPage; diff --git a/app/(protected)/jobs/layout.tsx b/app/(protected)/jobs/layout.tsx deleted file mode 100644 index 8f0a6fa1..00000000 --- a/app/(protected)/jobs/layout.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { SiteHeader } from "@/components/SiteHeader"; -import { ReactNode } from "react"; - -type MainLayoutProps = { - children: ReactNode; -}; - -const MainLayout = ({ children }: MainLayoutProps) => { - return ( -
- - {children} -
- ); -}; - -export default MainLayout; diff --git a/app/(protected)/jobs/manage/page.tsx b/app/(protected)/jobs/manage/page.tsx deleted file mode 100644 index 7997df17..00000000 --- a/app/(protected)/jobs/manage/page.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { auth } from "@/auth"; -import NewJobModal from "@/components/NewJobModal"; -import { redirect } from "next/navigation"; - -const ManageJobsPage = async () => { - - const session = await auth(); - const role = session?.user.role; - - if(role !== "ADMIN") { - redirect("/") - } - - return ( -
- -
- ) -} - -export default ManageJobsPage; \ No newline at end of file diff --git a/app/(protected)/jobs/page.tsx b/app/(protected)/jobs/page.tsx deleted file mode 100644 index e0d6c2ae..00000000 --- a/app/(protected)/jobs/page.tsx +++ /dev/null @@ -1,65 +0,0 @@ -"use client"; - -import { useState, useEffect } from "react"; -import JobCard from "@/components/JobCard"; -import Sidebar from "@/components/Sidebar"; -import { cn } from "@/lib/utils"; -import { getJobs } from "@/actions/job"; -import { Job } from "@prisma/client"; - -const JobsPage = () => { - const [jobs, setJobs] = useState([]); - const [loading, setLoading] = useState(false); - - useEffect(() => { - const fetchJobs = async () => { - setLoading(true); - //@ts-ignore - const response = await getJobs({}); - if (response.status === "success") { - //@ts-ignore - setJobs(response.data); - } - setLoading(false); - }; - - fetchJobs(); - }, []); - - return ( -
- -
-
-

- All Developer Jobs -

-

- Amplify Your Career: Where Top Developers Meet 100x Opportunities -

-
-
- {loading ? ( -

Loading...

- ) : jobs.length === 0 ? ( -

- No Jobs Found! -

- ) : ( - jobs.map((job) => ) - )} -
-
-
- ); -}; - -export default JobsPage; diff --git a/app/api/auth/[...nextauth]/route.ts b/app/api/auth/[...nextauth]/route.ts deleted file mode 100644 index 7c62e2db..00000000 --- a/app/api/auth/[...nextauth]/route.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { handlers } from "@/auth"; -export const { GET, POST } = handlers; diff --git a/app/globals.css b/app/globals.css deleted file mode 100644 index 86d1c43d..00000000 --- a/app/globals.css +++ /dev/null @@ -1,89 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - - - -@layer base { - :root { - --background: 0 0% 100%; - --foreground: 240 10% 3.9%; - --card: 0 0% 100%; - --card-foreground: 240 10% 3.9%; - --popover: 0 0% 100%; - --popover-foreground: 240 10% 3.9%; - --primary: 240 5.9% 10%; - --primary-foreground: 0 0% 98%; - --secondary: 240 4.8% 95.9%; - --secondary-foreground: 240 5.9% 10%; - --blue: 202 100% 50%; - --blueBackground: 205 100% 93%; - --red : 0 100% 59%; - --redBackground : 0 100% 95%; - --green: 144 90% 36%; - --greenBackground: 142 50% 89%; - --purple: 259 100% 71%; - --purpleBackground: 259 100% 95%; - --orange: 36 100% 50%; - --orangeBackground: 36 100% 91%; - --muted: 240 4.8% 95.9%; - --muted-foreground: 240 3.8% 46.1%; - --accent: 240 4.8% 95.9%; - --accent-foreground: 240 5.9% 10%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 0 0% 98%; - --border: 240 5.9% 90%; - --input: 240 5.9% 90%; - --ring: 240 5.9% 10%; - --radius: 0.5rem; - --chart-1: 12 76% 61%; - --chart-2: 173 58% 39%; - --chart-3: 197 37% 24%; - --chart-4: 43 74% 66%; - --chart-5: 27 87% 67%; - } - - .dark { - --background: 240 10% 3.9%; - --blueBackground: 205 100% 10%; - --redBackground : 0 100% 10%; - --greenBackground: 142 50% 10%; - --purpleBackground: 259 100% 10%; - --orangeBackground: 36, 100%, 10%; - --foreground: 0 0% 98%; - --card: 240 10% 3.9%; - --card-foreground: 0 0% 98%; - --popover: 240 10% 3.9%; - --popover-foreground: 0 0% 98%; - --primary: 0 0% 98%; - --primary-foreground: 240 5.9% 10%; - --secondary: 240 3.7% 15.9%; - --secondary-foreground: 0 0% 98%; - --muted: 240 3.7% 15.9%; - --muted-foreground: 240 5% 64.9%; - --accent: 240 3.7% 15.9%; - --accent-foreground: 0 0% 98%; - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 0 0% 98%; - --border: 240 3.7% 15.9%; - --input: 240 3.7% 15.9%; - --ring: 240 4.9% 83.9%; - --chart-1: 220 70% 50%; - --chart-2: 160 60% 45%; - --chart-3: 30 80% 55%; - --chart-4: 280 65% 60%; - --chart-5: 340 75% 55%; - } -} -@layer base { - * { - @apply border-border; - } - body { - @apply bg-background text-foreground; - } -} - -.jobs::-webkit-scrollbar { - width: 0; -} \ No newline at end of file diff --git a/app/layout.tsx b/app/layout.tsx deleted file mode 100644 index 73a68064..00000000 --- a/app/layout.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import type { Metadata } from "next"; -import { Inter as FontSans } from "next/font/google"; -import { cn } from "@/lib/utils"; -import "./globals.css"; -import { Toaster } from "@/components/ui/toaster"; -import { ThemeProvider } from "@/components/ThemeProvider"; -import Footer from "@/components/Footer"; - -const fontSans = FontSans({ - subsets: ["latin"], - variable: "--font-sans", -}); - -export const metadata: Metadata = { - title: "100xJobs", - description: "Generated by create next app", -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - - - {children} - - -