From f49320b8db12d5b4cb08eff1e2b27f15d25585ee Mon Sep 17 00:00:00 2001 From: bender Date: Sun, 8 Mar 2026 22:12:38 +0000 Subject: [PATCH] Add src/app/applications/page.tsx --- src/app/applications/page.tsx | 299 ++++++++++++++++++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 src/app/applications/page.tsx diff --git a/src/app/applications/page.tsx b/src/app/applications/page.tsx new file mode 100644 index 0000000..17ee7e8 --- /dev/null +++ b/src/app/applications/page.tsx @@ -0,0 +1,299 @@ +"use client"; + +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import NavbarStyleCentered from "@/components/navbar/NavbarStyleCentered/NavbarStyleCentered"; +import FeatureCardEight from "@/components/sections/feature/FeatureCardEight"; +import CardStack from "@/components/cardStack/CardStack"; +import ContactCenter from "@/components/sections/contact/ContactCenter"; +import FooterBase from "@/components/sections/footer/FooterBase"; +import { CheckCircle, Clock, AlertCircle, Mail } from "lucide-react"; +import { useState } from "react"; + +const navItems = [ + { name: "Search Jobs", id: "search" }, + { name: "Post a Job", id: "post-job" }, + { name: "Admin", id: "admin-login" }, + { name: "Browse", id: "browse" }, + { name: "Applications", id: "/applications" }, + { name: "Contact", id: "contact" }, +]; + +const footerColumns = [ + { + title: "Product", items: [ + { label: "Search Jobs", href: "/search" }, + { label: "Post a Job", href: "/post-job" }, + { label: "Browse by Province", href: "#provinces" }, + { label: "For Employers", href: "#" }, + ], + }, + { + title: "Company", items: [ + { label: "About Jobee", href: "#about" }, + { label: "Careers", href: "#" }, + { label: "Contact Us", href: "#contact" }, + { label: "Blog", href: "#" }, + ], + }, + { + title: "Resources", items: [ + { label: "Privacy Policy", href: "#" }, + { label: "Terms of Service", href: "#" }, + { label: "FAQ", href: "#" }, + { label: "Support", href: "#" }, + ], + }, +]; + +interface Application { + id: string; + jobTitle: string; + company: string; + status: "pending" | "accepted" | "rejected" | "interviewing"; + appliedDate: string; + lastUpdated: string; + description: string; +} + +export default function ApplicationsPage() { + const [applications] = useState([ + { + id: "1", jobTitle: "Senior Frontend Developer", company: "Tech Innovations Amsterdam", status: "interviewing", appliedDate: "2025-01-10", lastUpdated: "2025-01-15", description: + "You've been selected for the interview round. Check your email for scheduling details and prepare for a technical assessment."}, + { + id: "2", jobTitle: "UX/UI Designer", company: "Creative Studio Rotterdam", status: "accepted", appliedDate: "2025-01-08", lastUpdated: "2025-01-16", description: + "Congratulations! Your application has been accepted. Please review the job offer details and respond within 5 business days."}, + { + id: "3", jobTitle: "Data Analyst", company: "Analytics Corp Utrecht", status: "pending", appliedDate: "2025-01-12", lastUpdated: "2025-01-12", description: + "Your application is being reviewed by the hiring team. You'll receive an update within 7-10 business days."}, + { + id: "4", jobTitle: "Marketing Manager", company: "Brand Solutions Hague", status: "rejected", appliedDate: "2025-01-05", lastUpdated: "2025-01-14", description: + "Thank you for your application. We've decided to move forward with other candidates but encourage you to apply for future opportunities."}, + { + id: "5", jobTitle: "Full Stack Developer", company: "Web Tech Solutions", status: "interviewing", appliedDate: "2025-01-11", lastUpdated: "2025-01-16", description: + "First round interview scheduled for January 20, 2025 at 14:00 CET. Confirmation link sent to your email."}, + { + id: "6", jobTitle: "Content Writer", company: "Digital Media Groningen", status: "pending", appliedDate: "2025-01-13", lastUpdated: "2025-01-13", description: + "Your portfolio and writing samples are being evaluated. We'll contact you soon with next steps."}, + ]); + + const getStatusIcon = (status: string) => { + switch (status) { + case "accepted": + return CheckCircle; + case "interviewing": + return Clock; + case "rejected": + return AlertCircle; + default: + return Clock; + } + }; + + const getStatusColor = (status: string): string => { + switch (status) { + case "accepted": + return "success"; + case "interviewing": + return "info"; + case "rejected": + return "error"; + default: + return "warning"; + } + }; + + const applicationCards = applications.map((app) => ( +
+
+
+

+ {app.jobTitle} +

+

{app.company}

+
+
+ {getStatusIcon(app.status) && + (() => { + const Icon = getStatusIcon(app.status); + return ( + + ); + })()} + + {app.status} + +
+
+

{app.description}

+
+ Applied: {new Date(app.appliedDate).toLocaleDateString()} + Updated: {new Date(app.lastUpdated).toLocaleDateString()} +
+
+ )); + + return ( + + + +
+ +
+ +
+ + {applicationCards} + +
+ +
+ a.status !== "pending").length / applications.length) * 100)}% of your applications have received responses from employers.`, + imageSrc: + "http://img.b2bpic.net/free-photo/corporate-workers-brainstorming-together_23-2148804568.jpg?_wi=1", imageAlt: "Response rate"}, + { + id: 3, + title: "Interviews Scheduled", description: `You have ${applications.filter((a) => a.status === "interviewing").length} interviews currently in the process or scheduled. Prepare and shine!",`, + imageSrc: + "http://img.b2bpic.net/free-photo/personal-information-form-identity-concept_53876-137622.jpg?_wi=1", imageAlt: "Interviews"}, + { + id: 4, + title: "Success Stories", description: `Congratulations! You have ${applications.filter((a) => a.status === "accepted").length} job offers. Review and respond to secure your next opportunity!`, + imageSrc: + "http://img.b2bpic.net/free-vector/professional-recruitment-plan-diversity-general-infographic-template_23-2148947635.jpg?_wi=1", imageAlt: "Accepted offers"}, + ]} + buttons={[ + { + text: "Continue Searching", href: "/search"}, + ]} + buttonAnimation="slide-up" + /> +
+ +
+ +
+ + +
+ ); +}