From 1b261ba790ec50fd637326dc94beaf0cdfd392da Mon Sep 17 00:00:00 2001 From: ajeeshRS Date: Sat, 21 Sep 2024 21:49:07 +0530 Subject: [PATCH 1/3] Added new landing page ui --- public/BG-Grid-Light.svg | 87 +++++++++++ public/BG-Grid.svg | 87 +++++++++++ public/adobe.svg | 17 +++ public/atlassian.svg | 20 +++ public/coinbase.svg | 10 ++ public/fonts/satoshi.ttf | Bin 0 -> 127420 bytes public/framer.svg | 11 ++ public/google.svg | 25 ++-- public/main.svg | 10 ++ public/medium.svg | 10 ++ public/spotify.svg | 10 ++ src/actions/job.action.ts | 26 ++++ src/app/create/page.tsx | 4 +- src/app/globals.css | 14 +- src/app/layout.tsx | 20 ++- src/app/page.tsx | 22 +-- src/components/DescriptionEditor.tsx | 2 +- src/components/Faqs.tsx | 20 ++- src/components/RecentJobs.tsx | 81 ++++++++++ src/components/TestimonialCard.tsx | 41 ++++-- src/components/Testimonials.tsx | 22 ++- src/components/gmaps-autosuggest.tsx | 2 +- src/components/hero-section.tsx | 69 +++++---- src/components/job-form.tsx | 78 +++++----- src/components/job-landing.tsx | 154 +++---------------- src/components/navitem.tsx | 2 +- src/components/ui/sheet.tsx | 7 +- src/layouts/footer.tsx | 85 +++-------- src/layouts/header.tsx | 111 ++++++++------ src/layouts/mobile-nav.tsx | 164 ++++++++++++++------- src/lib/constant/app.constant.ts | 100 ++++++++----- src/lib/constant/testimonials.constants.ts | 5 - tailwind.config.ts | 11 +- 33 files changed, 843 insertions(+), 484 deletions(-) create mode 100644 public/BG-Grid-Light.svg create mode 100644 public/BG-Grid.svg create mode 100644 public/adobe.svg create mode 100644 public/atlassian.svg create mode 100644 public/coinbase.svg create mode 100644 public/fonts/satoshi.ttf create mode 100644 public/framer.svg create mode 100644 public/main.svg create mode 100644 public/medium.svg create mode 100644 public/spotify.svg create mode 100644 src/components/RecentJobs.tsx diff --git a/public/BG-Grid-Light.svg b/public/BG-Grid-Light.svg new file mode 100644 index 00000000..605c50ee --- /dev/null +++ b/public/BG-Grid-Light.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/BG-Grid.svg b/public/BG-Grid.svg new file mode 100644 index 00000000..bc3ad0b1 --- /dev/null +++ b/public/BG-Grid.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/adobe.svg b/public/adobe.svg new file mode 100644 index 00000000..daf07c3a --- /dev/null +++ b/public/adobe.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/public/atlassian.svg b/public/atlassian.svg new file mode 100644 index 00000000..069d641a --- /dev/null +++ b/public/atlassian.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/public/coinbase.svg b/public/coinbase.svg new file mode 100644 index 00000000..ee909ff9 --- /dev/null +++ b/public/coinbase.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/fonts/satoshi.ttf b/public/fonts/satoshi.ttf new file mode 100644 index 0000000000000000000000000000000000000000..976e85cb58307b184289e3cdb11ddfd3a530a3e3 GIT binary patch literal 127420 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 literal 0 HcmV?d00001 diff --git a/public/framer.svg b/public/framer.svg new file mode 100644 index 00000000..380a14e7 --- /dev/null +++ b/public/framer.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/google.svg b/public/google.svg index 95932e27..0da1cadc 100644 --- a/public/google.svg +++ b/public/google.svg @@ -1,10 +1,15 @@ - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + diff --git a/public/main.svg b/public/main.svg new file mode 100644 index 00000000..8b2115f7 --- /dev/null +++ b/public/main.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/medium.svg b/public/medium.svg new file mode 100644 index 00000000..681f8201 --- /dev/null +++ b/public/medium.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/spotify.svg b/public/spotify.svg new file mode 100644 index 00000000..0540f2fa --- /dev/null +++ b/public/spotify.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/actions/job.action.ts b/src/actions/job.action.ts index 3b752977..e33069bc 100644 --- a/src/actions/job.action.ts +++ b/src/actions/job.action.ts @@ -158,3 +158,29 @@ export const getCityFilters = async () => { cities, }).serialize(); }; + +export const getRecentJobs = async () => { + const recentJobs = await prisma.job.findMany({ + orderBy: { + postedAt: 'desc', + }, + select: { + id: true, + title: true, + description: true, + companyName: true, + city: true, + address: true, + workMode: true, + minSalary: true, + maxSalary: true, + postedAt: true, + companyLogo: true, + type: true, + }, + take: 6, + }); + return new SuccessResponse('Recently added jobs fetch successfully', 200, { + recentJobs, + }).serialize(); +}; diff --git a/src/app/create/page.tsx b/src/app/create/page.tsx index 92548bd3..f0a33bc3 100644 --- a/src/app/create/page.tsx +++ b/src/app/create/page.tsx @@ -3,10 +3,10 @@ import React from 'react'; const page = () => { return ( -
+

Post a job

-

+

100xJobs is trusted by leading companies

diff --git a/src/app/globals.css b/src/app/globals.css index 1ed50e36..9978c3b8 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -299,11 +299,16 @@ } /* Custom styles for Quill editor */ -.ql-toolbar.ql-snow { +.dark .ql-toolbar.ql-snow { border: none !important; background-color: #1f2937 !important; border-bottom: 1px solid #374151 !important; } +.ql-toolbar.ql-snow { + border: none !important; + background-color: #fff !important; + border-bottom: 1px solid #dfdfdf !important; +} .ql-container.ql-snow { border: none !important; @@ -375,4 +380,9 @@ html { scroll-behavior: smooth; -} \ No newline at end of file +} + +.career-span { + display: inline-block; + transform: rotate(-2deg); +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index b92cdc45..fb3dacde 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -3,14 +3,19 @@ import Header from '@/layouts/header'; import { cn } from '@/lib/utils'; import Providers from '@/providers/providers'; import type { Metadata } from 'next'; -import { Inter as FontSans } from 'next/font/google'; import './globals.css'; -/* import TopLoader from '@/components/Toploader'; */ import ScrollToTop from '@/components/ScrollToTop'; +import localFont from 'next/font/local'; -const fontSans = FontSans({ - subsets: ['latin'], - variable: '--font-sans', + +const satoshi = localFont({ + display: 'swap', + src: [ + { + path: '../../public/fonts/satoshi.ttf', + }, + ], + variable: '--font-satoshi', }); export const metadata: Metadata = { @@ -27,11 +32,10 @@ export default async function RootLayout({ - {/* */}
{children}
diff --git a/src/app/page.tsx b/src/app/page.tsx index f654ef4d..bd78e16e 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,29 +1,15 @@ -import BackgroundSvg from '@/components/BackgroundSvg'; import Faqs from '@/components/Faqs'; -import HalfCircleGradient from '@/components/HalfCircleGradient'; import HeroSection from '@/components/hero-section'; import { JobLanding } from '@/components/job-landing'; import Testimonials from '@/components/Testimonials'; -import { JobQuerySchemaType } from '@/lib/validators/jobs.validator'; -const HomePage = async ({ - searchParams, -}: { - searchParams: JobQuerySchemaType; -}) => { +const HomePage = async () => { return (
- - -
- -
-
- -
- + + + -
); }; diff --git a/src/components/DescriptionEditor.tsx b/src/components/DescriptionEditor.tsx index 0bc0878f..23fffce0 100644 --- a/src/components/DescriptionEditor.tsx +++ b/src/components/DescriptionEditor.tsx @@ -55,7 +55,7 @@ const DescriptionEditor: React.FC = ({ value={description} onChange={handleChange} placeholder={placeholder} - className="text-white bg-gray-800 overflow-hidden job-description-editor" + className="dark:text-white dark:bg-gray-800 bg-[#FFFF] overflow-hidden job-description-editor" /> ); }; diff --git a/src/components/Faqs.tsx b/src/components/Faqs.tsx index c31641c8..ab139374 100644 --- a/src/components/Faqs.tsx +++ b/src/components/Faqs.tsx @@ -3,7 +3,6 @@ import { faqData } from '@/lib/constant/faqs.constants'; import { ChevronDown } from 'lucide-react'; import { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; -import FaqsGetintouchCard from './FaqsGetintouchCard'; export default function Faqs() { const [expandedIndex, setExpandedIndex] = useState(null); @@ -15,26 +14,26 @@ export default function Faqs() { return (
-

FAQs

-

+

+ Frequently Asked Questions +

+

Quick answers to any questions you may have.

-
+
{faqData.map((faq, i) => (
-
); } diff --git a/src/components/RecentJobs.tsx b/src/components/RecentJobs.tsx new file mode 100644 index 00000000..39c67f33 --- /dev/null +++ b/src/components/RecentJobs.tsx @@ -0,0 +1,81 @@ +import { getRecentJobs } from '@/actions/job.action'; +import { calculateTimeSincePosted, getFirstLetterCaps } from './job-landing'; +import Image from 'next/image'; +import { formatSalary } from '@/lib/utils'; +import { Briefcase, MapPin } from 'lucide-react'; + +export default async function RecentJobs() { + const recentJobs = await getRecentJobs(); + if (!recentJobs.status) { + return
Error {recentJobs.message}
; + } + + return ( +
+ {recentJobs.additional.recentJobs.map((job, i) => ( +
+
+ {job.companyLogo ? ( +
+ company-logo +
+ ) : ( +
+

+ {getFirstLetterCaps(job.companyName)} +

+
+ )} +
+

+ {job.title} +

+
+

{job.companyName}

+

+ + {calculateTimeSincePosted(job.postedAt)} +

+
+
+
+
+

+ {job.type} +

+
+ +

2-3 Yrs

+
+

+ {job.maxSalary ? `$${formatSalary(job.maxSalary)}` : '$$$$$'} +

+
+ +

{job.city}

+
+
+
+ {['Git', 'Aws', 'Javascript', 'Nodejs', 'Python', 'Typescript'].map( + (data, i) => ( +

+ {data} +

+ ) + )} +
+
+ ))} +
+ ); +} diff --git a/src/components/TestimonialCard.tsx b/src/components/TestimonialCard.tsx index 72369199..08ebd659 100644 --- a/src/components/TestimonialCard.tsx +++ b/src/components/TestimonialCard.tsx @@ -1,27 +1,48 @@ 'use client'; import { testimonialItem } from '@/types/testimonials.types'; import { motion } from 'framer-motion'; +import { Quote } from 'lucide-react'; +import { useTheme } from 'next-themes'; interface testimonialCardProps { testimonial: testimonialItem; } -export default function TestimonialCard({ - testimonial, -}: testimonialCardProps) { +export default function TestimonialCard({ testimonial }: testimonialCardProps) { + const { theme } = useTheme(); return ( -
-

- {testimonial.name.charAt(0).toUpperCase()} -

-

{testimonial.name}

+
+
+
+ +

+ {testimonial.name.charAt(0).toUpperCase()} +

+
+

{testimonial.name}

+

+ Talent Acquisition Lead at Spotify +

+
+
+

{testimonial.testimonial}

+
-

"{testimonial.testimonial}"

); } diff --git a/src/components/Testimonials.tsx b/src/components/Testimonials.tsx index 575dbaf7..d028af0d 100644 --- a/src/components/Testimonials.tsx +++ b/src/components/Testimonials.tsx @@ -1,29 +1,27 @@ 'use client'; -import { Button } from './ui/button'; import { testimonials } from '@/lib/constant/testimonials.constants'; import TestimonialCard from './TestimonialCard'; export default function Testimonials() { return (

Testimonials

-

- Trusted by those who matter. +

+ Real Success Stories from Job Seekers and Employers

-
- {testimonials.map((testimonial, i) => ( - +
+ {testimonials.slice(0,3).map((testimonial, i) => ( + ))}
-
-

- Your story matters. Share it with us! -

- +
+ {testimonials.slice(3,5).map((testimonial, i) => ( + + ))}
); diff --git a/src/components/gmaps-autosuggest.tsx b/src/components/gmaps-autosuggest.tsx index a13f04ee..1822e634 100644 --- a/src/components/gmaps-autosuggest.tsx +++ b/src/components/gmaps-autosuggest.tsx @@ -34,7 +34,7 @@ export function GmapsAutocompleteAddress({ form }: { form: any }) { diff --git a/src/components/hero-section.tsx b/src/components/hero-section.tsx index ef8b3dad..7f9815c6 100644 --- a/src/components/hero-section.tsx +++ b/src/components/hero-section.tsx @@ -1,41 +1,54 @@ -import { GITHUB_REPO } from '@/lib/constant/app.constant'; +import Image from 'next/image'; +import { trustedCompanies } from '@/lib/constant/app.constant'; import Link from 'next/link'; -import Icon from './ui/icon'; -import { LogoMarquee } from './infinitescroll'; - const HeroSection = () => { return ( <> -
-
- - -

Star us on Github

- -
-
-

- {/* Find the Right{' '} - - Opportunity +
+
+
+
+

+ #1 Platform for jobs +

+

+ Build Your + + Career - , Hire the Perfect Talent */} - Find Your Perfect Job Today! +
+ with 100xJobs

-
-
-

- Discover a thoughtfully selected collection of job opportunities - chosen by our dedicated team of experts. +

+ Unlock exclusive job and internship opportunities. Remote, + onsite, or hybrid—we've got what you’re looking for.

+
+ + +
+
+
+

+ Trusted By Leading Companies +

+
+ {trustedCompanies.map((company, i) => ( + {`${company.name}-icon`} + ))} +
-
); diff --git a/src/components/job-form.tsx b/src/components/job-form.tsx index ac217430..6d026794 100644 --- a/src/components/job-form.tsx +++ b/src/components/job-form.tsx @@ -148,32 +148,34 @@ const PostJobForm = () => { form.setValue('companyLogo', 'https://wwww.example.com'); }, [watchHasSalaryRange, form]); return ( -
-
-
+
+
+

Posted for

-

30 days

+

30 days

-
+

Emailed to

-

290,301 subscribers

+

+ 290,301 subscribers +

-
+

Reach

-

+

300,000+

- -
+ +

Job details

{ @@ -205,7 +207,7 @@ const PostJobForm = () => { defaultValue={field.value} > - + @@ -233,7 +235,7 @@ const PostJobForm = () => { defaultValue={field.value} > - + @@ -260,7 +262,7 @@ const PostJobForm = () => { defaultValue={field.value} > - + @@ -275,9 +277,9 @@ const PostJobForm = () => { )} />
-
+
-
+
{ @@ -301,7 +303,7 @@ const PostJobForm = () => { />
{watchHasSalaryRange && ( -
+
{ @@ -333,7 +335,7 @@ const PostJobForm = () => { {' '} @@ -358,7 +360,7 @@ const PostJobForm = () => { @@ -366,9 +368,11 @@ const PostJobForm = () => { )} />
-
-

Job description

-
+
+

+ Job description +

+
{ />
-
-

+
+

Company

{/* Logo Upload Section */}
{previewImg ? ( @@ -398,7 +402,7 @@ const PostJobForm = () => { height={80} /> ) : ( - + )}
{ @@ -447,7 +451,7 @@ const PostJobForm = () => { @@ -470,7 +474,7 @@ const PostJobForm = () => {

-
+
@@ -478,14 +482,16 @@ const PostJobForm = () => { -
-

Payment

+
+

+ Payment +

-

+

"I'm a huge fan of remote work and 100xJobs is by far my favorite job board."

@@ -496,8 +502,8 @@ const PostJobForm = () => { height={40} className="rounded-full" /> -

Harkirat Singh

-

100xJobs.com

+

Harkirat Singh

+

100xJobs.com

diff --git a/src/components/job-landing.tsx b/src/components/job-landing.tsx index f82645ce..aca96faf 100644 --- a/src/components/job-landing.tsx +++ b/src/components/job-landing.tsx @@ -1,145 +1,39 @@ -import { getAllJobs } from '@/actions/job.action'; -import { formatSalary } from '@/lib/utils'; -import Link from 'next/link'; -import JobCardLoader from '@/components/job-card-loader'; - -import { DEFAULT_PAGE, JOBS_PER_PAGE } from '@/config/app.config'; -import JobsHeader from '@/layouts/jobs-header'; -import { Suspense } from 'react'; -import { - JobQuerySchema, - JobQuerySchemaType, -} from '@/lib/validators/jobs.validator'; -import { Pagination, PaginationContent, PaginationItem } from './ui/pagination'; -import { - PaginationNextButton, - PaginationPreviousButton, -} from './pagination-client'; -import { PaginationPages } from './ui/paginator'; -import APP_PATHS from '@/config/path.config'; - import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; -import { redirect } from 'next/navigation'; -import Image from 'next/image'; - +import { ChevronRight } from 'lucide-react'; +import RecentJobs from './RecentJobs'; +import Link from 'next/link'; dayjs.extend(relativeTime); export const calculateTimeSincePosted = (postedAt: Date): string => { return dayjs(postedAt).fromNow(); }; -export const JobLanding = async ({ - searchParams, -}: { - searchParams: JobQuerySchemaType; -}) => { - const parsedData = JobQuerySchema.safeParse(searchParams); - if (!(parsedData.success && parsedData.data)) { - console.error(parsedData.error); - redirect('/'); - } - const parsedSearchParams = parsedData.data; - return ( -
-
- - }> - - -
-
- ); -}; - -type PaginatorProps = { - searchParams: JobQuerySchemaType; +export const getFirstLetterCaps = (str: string): string => { + return str.charAt(0).toUpperCase(); }; -const JobCard = async ({ searchParams }: PaginatorProps) => { - const jobs = await getAllJobs(searchParams); - if (!jobs.status) { - return
Error {jobs.message}
; - } - - const totalPages = - Math.ceil((jobs.additional?.totalJobs || 0) / JOBS_PER_PAGE) || - DEFAULT_PAGE; - const currentPage = parseInt(searchParams.page?.toString()) || DEFAULT_PAGE; +export const JobLanding = () => { return ( -
- {jobs.additional?.jobs.map((job) => { - return ( - -
-
-
- {job.companyLogo && ( - job image - )} -
-
-
-

- {job.title} - {job.companyName} -

-

- {calculateTimeSincePosted(job.postedAt)} • {job.workMode} -

-
- -
- - {job.minSalary && job.maxSalary - ? `$${formatSalary(job.maxSalary)}` - : 'Not Disclosed'} - -

- per annum -

-
-
+
+
+

Recently Added jobs

+

+ Stay ahead with newly added jobs +

+
+ +
+ +
); }; diff --git a/src/components/navitem.tsx b/src/components/navitem.tsx index e1595950..9b90519e 100644 --- a/src/components/navitem.tsx +++ b/src/components/navitem.tsx @@ -31,7 +31,7 @@ export const NavItem = ({ {label} diff --git a/src/components/ui/sheet.tsx b/src/components/ui/sheet.tsx index 037a5baf..5ee97cd2 100644 --- a/src/components/ui/sheet.tsx +++ b/src/components/ui/sheet.tsx @@ -31,7 +31,7 @@ const SheetOverlay = React.forwardRef< SheetOverlay.displayName = SheetPrimitive.Overlay.displayName; const sheetVariants = cva( - 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500', + 'fixed z-50 gap-4 dark:bg-[#020817F2] bg-[#ffff] p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500', { variants: { side: { @@ -65,10 +65,7 @@ const SheetContent = React.forwardRef< {...props} > {children} - - - Close - + )); diff --git a/src/layouts/footer.tsx b/src/layouts/footer.tsx index d5a30f56..b2b75c40 100644 --- a/src/layouts/footer.tsx +++ b/src/layouts/footer.tsx @@ -1,76 +1,25 @@ import Icon from '@/components/ui/icon'; -import { socials, footerLinks } from '@/lib/constant/app.constant'; -import Image from 'next/image'; +import { footerItems, socials } from '@/lib/constant/app.constant'; import Link from 'next/link'; const Footer = () => { return ( -
-
-
-
- 100xJobs -
-

- 100xDevs -

-

- because 10x ain't enough -

-
-
-
-

Follow us on

-
- {socials.map((social, index) => ( - - - - ))} -
-
-
-
-
-

100xLinks

- - {footerLinks['100xlinks'].map((link, index) => ( - - {link.label} - - ))} -
-
-

100xLegal

- - {footerLinks['100xlegal'].map((link, index) => ( - - {link.label} - - ))} -
+
+
    + {footerItems.map((item, i) => ( +
  • + {item.label} +
  • + ))} +
+
+

© 2024 100xJobs. All rights reserved.

+
+ {socials.map((social, i) => ( + + + + ))}
diff --git a/src/layouts/header.tsx b/src/layouts/header.tsx index d65020d3..f79bafef 100644 --- a/src/layouts/header.tsx +++ b/src/layouts/header.tsx @@ -1,25 +1,31 @@ 'use client'; import { MobileNav } from '@/layouts/mobile-nav'; -import { navbar } from '@/lib/constant/app.constant'; +import { + adminNavbar, + nonUserNavbar, + userNavbar, +} from '@/lib/constant/app.constant'; import { useSession } from 'next-auth/react'; import Link from 'next/link'; import { NavItem } from '@/components/navitem'; import Image from 'next/image'; import { Skeleton } from '@/components/ui/skeleton'; import { useState, useEffect } from 'react'; - -const CompanyLogo = () => { +import { Moon, Sun } from 'lucide-react'; +import { useTheme } from 'next-themes'; +import { ADMIN_ROLE } from '@/config/app.config'; +export const CompanyLogo = () => { return (
100xJobs -

- 100xJobs +

+ 100xJobs

); @@ -27,57 +33,68 @@ const CompanyLogo = () => { const Header = () => { const session = useSession(); - const [opacity, setOpacity] = useState(1); - - useEffect(() => { - const handleScroll = () => { - const scrollPosition = window.scrollY; - const windowHeight = window.innerHeight; + const { theme, setTheme } = useTheme(); + const [mounted, setMounted] = useState(false); - const fadeStart = 0; - const fadeEnd = windowHeight * 0.3; + const toggleTheme = () => { + setTheme(theme === 'dark' ? 'light' : 'dark'); + }; - if (scrollPosition <= fadeStart) { - setOpacity(1); - } else if (scrollPosition >= fadeEnd) { - setOpacity(0); - } else { - setOpacity(1 - (scrollPosition - fadeStart) / (fadeEnd - fadeStart)); - } - }; - - window.addEventListener('scroll', handleScroll); - return () => window.removeEventListener('scroll', handleScroll); + useEffect(() => { + setMounted(true); }, []); return ( -
-
- +
+ ); }; diff --git a/src/layouts/mobile-nav.tsx b/src/layouts/mobile-nav.tsx index 6b3c8750..a0d0d7b6 100644 --- a/src/layouts/mobile-nav.tsx +++ b/src/layouts/mobile-nav.tsx @@ -1,20 +1,36 @@ -import Icon from '@/components/ui/icon'; import { Sheet, SheetClose, SheetContent, - SheetDescription, SheetHeader, SheetTitle, SheetTrigger, } from '@/components/ui/sheet'; import { toast } from '@/components/ui/use-toast'; import APP_PATHS from '@/config/path.config'; -import { navbar } from '@/lib/constant/app.constant'; +import { + adminNavbar, + nonUserNavbar, + userNavbar, +} from '@/lib/constant/app.constant'; +import { + CircleHelp, + Contact, + DollarSign, + LogOut, + Menu, + PackageSearch, + Pen, + Users, + X, +} from 'lucide-react'; import { signOut, useSession } from 'next-auth/react'; import Link from 'next/link'; import { usePathname, useRouter } from 'next/navigation'; - +import { CompanyLogo } from './header'; +import spotifyLogo from '../../public/spotify.svg'; +import Image from 'next/image'; +import { ADMIN_ROLE } from '@/config/app.config'; export function MobileNav() { const router = useRouter(); const session = useSession(); @@ -47,64 +63,87 @@ export function MobileNav() { return ( - - + + - - Menu - -
    - {navbar.map((item) => ( - - ))} + + + + + + Close + + +
      + {session.status !== 'loading' && session.data?.user && ( +
      + {session.data?.user.role === ADMIN_ROLE ? ( +
      +

      HS

      +
      + ) : ( +
      + company-logo +
      + )} +
      +

      + {session.data?.user.role === ADMIN_ROLE + ? 'Harkirat Singh' + : 'User'} +

      +
      +

      + {session.data?.user.role === ADMIN_ROLE + ? 'admin@gmail.com' + : 'work@spotify.com'} +

      +
      +
      +
      + )} {session.status !== 'loading' && !session.data?.user && ( <> -
    • - - Login - -
    • -
    • - - Start Free - -
    • + {nonUserNavbar.map((item) => ( + + ))} + )} {session.status !== 'loading' && session.data?.user && ( <> -
    • - - Create Job - -
    • -
    • - - Setting - -
    • -
    • - - Logout - - -
    • + {userNavbar.map((item) => ( + + ))} )} + {session.status !== 'loading' && + session.data?.user.role === ADMIN_ROLE && ( + <> + {adminNavbar.map((item) => ( + + ))} + + )}
    + {session.status !== 'loading' && session.data?.user && ( + + + + )}
    @@ -133,13 +172,32 @@ const Item = ({ if (session && roleRequired && session.data?.user.role !== roleRequired) return; return ( -
  • +
  • - {label} + + {label === 'Explore jobs' ? ( + + ) : label === 'Pricing' ? ( + + ) : label === 'Contact us' ? ( + + ) : label === 'Manage Jobs' ? ( + + ) : label === 'Payment History' ? ( + + ) : label === 'Post a Job' ? ( + + ) : label === 'Help' ? ( + + ) : ( + label === 'Manage Recruiters' && + )} +

    {label}

    +
  • ); diff --git a/src/lib/constant/app.constant.ts b/src/lib/constant/app.constant.ts index d1b02b36..5c16e51f 100644 --- a/src/lib/constant/app.constant.ts +++ b/src/lib/constant/app.constant.ts @@ -1,61 +1,91 @@ import { IconProps } from '@/components/ui/icon'; import APP_PATHS from '@/config/path.config'; +import adobe from '../../../public/adobe.svg'; +import atlassian from '../../../public/atlassian.svg'; +import google from '../../../public/google.svg'; +import medium from '../../../public/medium.svg'; +import framer from '../../../public/framer.svg'; +import coinbase from '../../../public/coinbase.svg'; export const GITHUB_REPO = 'https://github.com/code100x/job-board'; -export const navbar = [ - { id: 1, label: 'Jobs', path: APP_PATHS.JOBS }, + +export const nonUserNavbar = [ + { id: 1, label: 'Explore jobs', path: APP_PATHS.JOBS }, + + { id: 2, label: 'Pricing', path: '/' }, + { id: 3, label: 'Contact us', path: APP_PATHS.TESTIMONIALS }, +]; + +export const userNavbar = [ + { + id: 1, + label: 'Manage Jobs', + path: APP_PATHS.MANAGE_JOBS, + }, + { id: 2, label: 'Payment History', path: '/' }, + { id: 4, label: 'Post a Job', path: '/create' }, + { id: 3, label: 'Help', path: '/' }, +]; +export const adminNavbar = [ { - id: 2, - label: 'Manage', + id: 1, + label: 'Manage Jobs', path: APP_PATHS.MANAGE_JOBS, roleRequired: 'ADMIN', }, - // todo: add actual path - { id: 3, label: 'Internship', path: '/' }, - { id: 4, label: 'Testimonials', path: APP_PATHS.TESTIMONIALS }, - { id: 5, label: 'FAQs', path: APP_PATHS.FAQS }, - { id: 6, label: 'Post a Job', path: APP_PATHS.POST_JOB }, - + { id: 2, label: 'Manage Recruiters', path: '/' }, + { id: 3, label: 'Payment History', path: '/' }, ]; export const socials: { href: string; - label: string; icon: IconProps['icon']; }[] = [ { icon: 'youtube', - label: 'Youtube', href: 'https://www.youtube.com/@100xDevs-n1w', }, - { icon: 'twitter', label: 'Twitter', href: 'https://x.com/100xDevs' }, - { icon: 'github', label: 'Github', href: 'https://github.com/code100x' }, + { icon: 'twitter', href: 'https://x.com/100xDevs' }, +]; + +export const footerItems = [ { - icon: 'instagram', - label: 'Instagram', - href: 'https://www.instagram.com/100xdevsofficial/', + label: 'About Us', + href: '/', }, { - icon: 'linkedin', - label: 'Linkedin', - href: 'https://www.linkedin.com/company/100xdevs/', + label: 'Terms of Service', + href: '/', }, { - icon: 'telergam', - label: 'Telegram', - href: 'https://t.me/kirat_internal_group', + label: 'Privacy Policy', + href: '/', }, ]; -export const footerLinks = { - '100xlinks': [ - { label: 'App', href: 'https://app.100xdevs.com' }, - { label: 'Projects', href: '' }, - { label: 'Reports', href: '' }, - ], - '100xlegal': [ - { label: 'Privacy Policy', href: '' }, - { label: 'Terms of Service', href: '' }, - { label: 'Desclaimer', href: '' }, - ], -}; +export const trustedCompanies = [ + { + icon: adobe, + name: 'adobe', + }, + { + icon: atlassian, + name: 'atlassian', + }, + { + icon: medium, + name: 'medium', + }, + { + icon: coinbase, + name: 'coinbase', + }, + { + icon: framer, + name: 'framer', + }, + { + icon: google, + name: 'google', + }, +]; diff --git a/src/lib/constant/testimonials.constants.ts b/src/lib/constant/testimonials.constants.ts index 7eb4ebfb..440a8d01 100644 --- a/src/lib/constant/testimonials.constants.ts +++ b/src/lib/constant/testimonials.constants.ts @@ -6,11 +6,6 @@ export const testimonials: testimonialItem[] = [ testimonial: 'The job board made my job search seamless. I found my dream job in just a few weeks, and the application process was super easy!', }, - { - name: 'John Smith', - testimonial: - 'This platform is incredibly user-friendly and helped me land a great position. The filtering and search options are fantastic!', - }, { name: 'Emily Johnson', testimonial: diff --git a/tailwind.config.ts b/tailwind.config.ts index 096c1de8..48a5f83f 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -23,7 +23,13 @@ const config = { fontFamily: { sans: ['var(--font-sans)', ...fontFamily.sans], }, - + backgroundImage: { + 'hero-bg-dark': "url('/BG-Grid.svg')", + 'hero-bg-light': "url('/BG-Grid-Light.svg')", + 'grad-dark': "linear-gradient(180deg, rgba(15, 23, 42, 0.4) 0%, rgba(2, 8, 23, 0.4) 100%)", + 'faq-dark': "linear-gradient(180deg, rgba(15, 23, 42, 0.4) 0%, rgba(2, 8, 23, 0.4) 100%)", + 'grad-light': "linear-gradient(180deg, rgba(241, 245, 249, 0.4) 0%, rgba(255, 255, 255, 0.4) 100%)", + }, colors: { 'stroke-primary': 'hsl(var(--stroke-primary))', 'stroke-secondary': 'hsl(var(--stroke-secondary))', @@ -101,6 +107,9 @@ const config = { 'loop-scroll': 'loop-scroll 50s linear infinite', }, }, + fontFamily: { + satoshi: ['var(--font-satoshi)'], + }, }, plugins: [require('tailwindcss-animate')], } satisfies Config; From 4928a28d03f851124648e343bf2bd34fda8cf48d Mon Sep 17 00:00:00 2001 From: ajeeshRS Date: Sat, 21 Sep 2024 23:08:14 +0530 Subject: [PATCH 2/3] fix height and padding issues --- src/components/hero-section.tsx | 10 +++++----- src/components/job-landing.tsx | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/hero-section.tsx b/src/components/hero-section.tsx index 7f9815c6..e24139da 100644 --- a/src/components/hero-section.tsx +++ b/src/components/hero-section.tsx @@ -4,10 +4,10 @@ import Link from 'next/link'; const HeroSection = () => { return ( <> -
    -
    +
    +
    -
    +

    #1 Platform for jobs

    @@ -16,12 +16,12 @@ const HeroSection = () => { Career -
    +
    with 100xJobs

Unlock exclusive job and internship opportunities. Remote, - onsite, or hybrid—we've got what you’re looking for. + onsite, or hybrid—we've got what you're looking for.

diff --git a/src/components/job-landing.tsx b/src/components/job-landing.tsx index 06e8c27a..c8a22018 100644 --- a/src/components/job-landing.tsx +++ b/src/components/job-landing.tsx @@ -17,7 +17,7 @@ export const JobLanding = () => { return (

Recently Added jobs

From 52a90856f250c6ff49c62822e139cce74e1c84df Mon Sep 17 00:00:00 2001 From: ajeeshRS Date: Sun, 22 Sep 2024 09:48:03 +0530 Subject: [PATCH 3/3] Fix landing page bg width issue --- src/components/RecentJobs.tsx | 2 +- src/components/hero-section.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/RecentJobs.tsx b/src/components/RecentJobs.tsx index 39c67f33..fed56a11 100644 --- a/src/components/RecentJobs.tsx +++ b/src/components/RecentJobs.tsx @@ -27,7 +27,7 @@ export default async function RecentJobs() { />
) : ( -
+

{getFirstLetterCaps(job.companyName)}

diff --git a/src/components/hero-section.tsx b/src/components/hero-section.tsx index e24139da..67e1b839 100644 --- a/src/components/hero-section.tsx +++ b/src/components/hero-section.tsx @@ -4,7 +4,7 @@ import Link from 'next/link'; const HeroSection = () => { return ( <> -
+