From c42fdade52ae5a03a459b1e7816fab56b233fbfa Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Wed, 17 Sep 2025 15:46:15 +0000 Subject: [PATCH] Auto commit: 2025-09-17T15:46:15.288Z --- admin/add-job.php | 121 ++++++++++++ admin/applications.php | 125 ++++++++++++ admin/delete-job.php | 23 +++ admin/download.php | 43 ++++ admin/edit-job.php | 144 ++++++++++++++ admin/index.php | 105 ++++++++++ admin/jobs.php | 121 ++++++++++++ admin/login.php | 74 +++++++ admin/logout.php | 6 + apply.php | 178 +++++++++++++++++ assets/css/custom.css | 64 +++++- careers.php | 32 +-- ...=> 002_create_comments_table.php.disabled} | 0 .../003_create_applications_table.php | 24 +++ db/migrations/004_create_jobs_table.php | 27 +++ index.php | 49 +---- job-details.php | 184 ++++-------------- 17 files changed, 1103 insertions(+), 217 deletions(-) create mode 100644 admin/add-job.php create mode 100644 admin/applications.php create mode 100644 admin/delete-job.php create mode 100644 admin/download.php create mode 100644 admin/edit-job.php create mode 100644 admin/index.php create mode 100644 admin/jobs.php create mode 100644 admin/login.php create mode 100644 admin/logout.php create mode 100644 apply.php rename db/migrations/{002_create_comments_table.php => 002_create_comments_table.php.disabled} (100%) create mode 100644 db/migrations/003_create_applications_table.php create mode 100644 db/migrations/004_create_jobs_table.php diff --git a/admin/add-job.php b/admin/add-job.php new file mode 100644 index 0000000..88c677b --- /dev/null +++ b/admin/add-job.php @@ -0,0 +1,121 @@ +prepare("INSERT INTO jobs (title, department, location, type, description, requirements, benefits) VALUES (?, ?, ?, ?, ?, ?, ?)"); + $stmt->execute([$title, $department, $location, $type, $description, json_encode($requirements_arr), json_encode($benefits_arr)]); + header('Location: jobs.php'); + exit; + } catch (PDOException $e) { + $error_message = 'Database error: ' . $e->getMessage(); + } + } +} +?> + + + + + + Admin - Add Job + + + + + + +
+

Add New Job

+ +
+ +
+
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
Enter one requirement per line.
+
+
+ + +
Enter one benefit per line.
+
+
+ Cancel + +
+
+
+
+ + diff --git a/admin/applications.php b/admin/applications.php new file mode 100644 index 0000000..784ef93 --- /dev/null +++ b/admin/applications.php @@ -0,0 +1,125 @@ +query("SELECT id, title FROM jobs"); +$jobs_data = $stmt->fetchAll(); +$job_titles = array_column($jobs_data, 'title', 'id'); + +// Fetch job titles from the database +$pdo = db(); +$stmt = $pdo->query("SELECT id, title FROM jobs"); +$jobs_data = $stmt->fetchAll(); +$job_titles = array_column($jobs_data, 'title', 'id'); + +// Pagination settings +$results_per_page = 10; +$page = isset($_GET['page']) ? (int)$_GET['page'] : 1; +$page = max(1, $page); +$offset = ($page - 1) * $results_per_page; + +// Get total number of applications +$total_results = $pdo->query("SELECT COUNT(*) FROM applications")->fetchColumn(); +$total_pages = ceil($total_results / $results_per_page); + +// Fetch applications for the current page +$stmt = $pdo->prepare("SELECT id, job_id, name, email, resume_path, applied_at FROM applications ORDER BY applied_at DESC LIMIT :limit OFFSET :offset"); +$stmt->bindValue(':limit', $results_per_page, PDO::PARAM_INT); +$stmt->bindValue(':offset', $offset, PDO::PARAM_INT); +$stmt->execute(); +$applications = $stmt->fetchAll(); + +?> + + + + + + Admin - Applications + + + + + + +
+

Submitted Applications

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Job TitleNameEmailApplied AtResume
No applications found.
Download
+
+ 1): ?> + + +
+
+ + diff --git a/admin/delete-job.php b/admin/delete-job.php new file mode 100644 index 0000000..5c3825a --- /dev/null +++ b/admin/delete-job.php @@ -0,0 +1,23 @@ +prepare("DELETE FROM jobs WHERE id = ?"); + $stmt->execute([$job_id]); + } catch (PDOException $e) { + // Optional: log the error + } +} + +header('Location: jobs.php'); +exit; diff --git a/admin/download.php b/admin/download.php new file mode 100644 index 0000000..4e7ccd2 --- /dev/null +++ b/admin/download.php @@ -0,0 +1,43 @@ +prepare("SELECT resume_path FROM applications WHERE id = ?"); +$stmt->execute([$app_id]); +$application = $stmt->fetch(); + +if (!$application) { + http_response_code(404); + die('Application not found.'); +} + +$resume_path = $application['resume_path']; + +if (!file_exists($resume_path)) { + http_response_code(404); + die('Resume file not found.'); +} + +header('Content-Description: File Transfer'); +header('Content-Type: application/octet-stream'); +header('Content-Disposition: attachment; filename="' . basename($resume_path) . '"'); +header('Expires: 0'); +header('Cache-Control: must-revalidate'); +header('Pragma: public'); +header('Content-Length: ' . filesize($resume_path)); +readfile($resume_path); +exit; diff --git a/admin/edit-job.php b/admin/edit-job.php new file mode 100644 index 0000000..2c94c95 --- /dev/null +++ b/admin/edit-job.php @@ -0,0 +1,144 @@ +prepare("UPDATE jobs SET title = ?, department = ?, location = ?, type = ?, description = ?, requirements = ?, benefits = ? WHERE id = ?"); + $stmt->execute([$title, $department, $location, $type, $description, json_encode($requirements_arr), json_encode($benefits_arr), $job_id]); + header('Location: jobs.php'); + exit; + } catch (PDOException $e) { + $error_message = 'Database error: ' . $e->getMessage(); + } + } +} else { + $stmt = $pdo->prepare("SELECT * FROM jobs WHERE id = ?"); + $stmt->execute([$job_id]); + $job = $stmt->fetch(); + + if (!$job) { + header('Location: jobs.php'); + exit; + } + + $title = $job['title']; + $department = $job['department']; + $location = $job['location']; + $type = $job['type']; + $description = $job['description']; + $requirements = implode("\n", json_decode($job['requirements'], true)); + $benefits = implode("\n", json_decode($job['benefits'], true)); +} +?> + + + + + + Admin - Edit Job + + + + + + +
+

Edit Job

+ +
+ +
+
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
Enter one requirement per line.
+
+
+ + +
Enter one benefit per line.
+
+
+ Cancel + +
+
+
+
+ + diff --git a/admin/index.php b/admin/index.php new file mode 100644 index 0000000..a7db147 --- /dev/null +++ b/admin/index.php @@ -0,0 +1,105 @@ +query("SELECT COUNT(*) FROM jobs")->fetchColumn(); +$total_applications = $pdo->query("SELECT COUNT(*) FROM applications")->fetchColumn(); + +// Get recent applications +$stmt = $pdo->query("SELECT a.id, a.name, a.email, j.title AS job_title FROM applications a JOIN jobs j ON a.job_id = j.id ORDER BY a.applied_at DESC LIMIT 5"); +$recent_applications = $stmt->fetchAll(); + +?> + + + + + + Admin - Dashboard + + + + + + +
+

Dashboard

+
+
+
+
+
Total Jobs
+

+ Manage Jobs +
+
+
+
+
+
+
Total Applications
+

+ Manage Applications +
+
+
+
+ +

Recent Applications

+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
Job TitleNameEmail
No recent applications.
+
+
+
+ + diff --git a/admin/jobs.php b/admin/jobs.php new file mode 100644 index 0000000..ed1d022 --- /dev/null +++ b/admin/jobs.php @@ -0,0 +1,121 @@ +query("SELECT COUNT(*) FROM jobs")->fetchColumn(); +$total_pages = ceil($total_results / $results_per_page); + +// Fetch jobs for the current page +$stmt = $pdo->prepare("SELECT * FROM jobs ORDER BY created_at DESC LIMIT :limit OFFSET :offset"); +$stmt->bindValue(':limit', $results_per_page, PDO::PARAM_INT); +$stmt->bindValue(':offset', $offset, PDO::PARAM_INT); +$stmt->execute(); +$jobs = $stmt->fetchAll(); + +?> + + + + + + Admin - Jobs + + + + + + +
+
+

Manage Jobs

+ Add New Job +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
TitleDepartmentLocationTypeActions
No jobs found.
+ Edit + Delete +
+
+ 1): ?> + + +
+
+ + diff --git a/admin/login.php b/admin/login.php new file mode 100644 index 0000000..0ed59c6 --- /dev/null +++ b/admin/login.php @@ -0,0 +1,74 @@ +prepare("SELECT * FROM users WHERE username = ?"); + $stmt->execute([$username]); + $user = $stmt->fetch(); + + if ($user && password_verify($password, $user['password'])) { + $_SESSION['user'] = $user['username']; + header('Location: index.php'); + exit; + } else { + $error_message = 'Invalid username or password.'; + } + } catch (PDOException $e) { + $error_message = 'Database error. Please try again later.'; + // Optional: Log the detailed error: error_log($e->getMessage()); + } + } +} + +if (isset($_SESSION['user'])) { + header('Location: index.php'); + exit; +} +?> + + + + + + Admin Login - CosmicHire + + + + +
+
+
+
+

Admin Login

+ +
+ +
+
+ + +
+
+ + +
+ +
+
+
+
+
+ + diff --git a/admin/logout.php b/admin/logout.php new file mode 100644 index 0000000..95db42c --- /dev/null +++ b/admin/logout.php @@ -0,0 +1,6 @@ +prepare("SELECT * FROM jobs WHERE id = ?"); + $stmt->execute([$job_id]); + $job = $stmt->fetch(); +} + +// Redirect if job not found +if (!$job) { + header("Location: careers.php"); + exit; +} + +$success_message = ''; +$error_message = ''; + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $name = trim($_POST['name'] ?? ''); + $email = trim($_POST['email'] ?? ''); + $resume = $_FILES['resume'] ?? null; + + if (empty($name) || empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL) || empty($resume) || $resume['error'] !== UPLOAD_ERR_OK) { + $error_message = 'Please fill in all fields and upload a valid resume.'; + } else { + // Handle file upload + $upload_dir = __DIR__ . '/uploads/resumes/'; + $file_extension = pathinfo($resume['name'], PATHINFO_EXTENSION); + $safe_filename = uniqid('resume_', true) . '.' . $file_extension; + $upload_path = $upload_dir . $safe_filename; + + if (move_uploaded_file($resume['tmp_name'], $upload_path)) { + try { + // Save application to database + $pdo = db(); + $stmt = $pdo->prepare("INSERT INTO applications (job_id, name, email, resume_path) VALUES (?, ?, ?, ?)"); + $stmt->execute([$job_id, $name, $email, $upload_path]); + + // Send email notification + $to = getenv('MAIL_TO') ?: 'your-email@example.com'; // Fallback email + $subject = "New Application for " . $job['title']; + $html_content = "

A new application has been submitted for the position of " . htmlspecialchars($job['title']) . ".

" + . "

Applicant Name: " . htmlspecialchars($name) . "

" + . "

Applicant Email: " . htmlspecialchars($email) . "

" + . "

The resume has been saved to the server.

"; + $text_content = "New Application for " . $job['title'] . "\n" + . "Applicant Name: " . $name . "\n" + . "Applicant Email: " . $email; + + $result = MailService::sendMail($to, $subject, $html_content, $text_content); + + if (!empty($result['success'])) { + // Send confirmation email to applicant + $applicant_subject = "Your Application for " . $job['title']; + $applicant_html_content = "

Dear " . htmlspecialchars($name) . ",

" + . "

Thank you for applying for the position of " . htmlspecialchars($job['title']) . " at CosmicHire.

" + . "

We have received your application and will be in touch shortly if your qualifications match our requirements.

" + . "

Best regards,
The CosmicHire Team

"; + $applicant_text_content = "Dear " . $name . ",\n\nThank you for applying for the position of " . $job['title'] . " at CosmicHire.\n\nWe have received your application and will be in touch shortly if your qualifications match our requirements.\n\nBest regards,\nThe CosmicHire Team"; + + MailService::sendMail($email, $applicant_subject, $applicant_html_content, $applicant_text_content); + + $success_message = 'Your application has been submitted successfully! A confirmation email has been sent to you.'; + } else { + $error_message = 'Your application was saved, but there was an error sending the notification email.'; + // Optional: Log the detailed error: error_log($result['error']); + } + } catch (PDOException $e) { + $error_message = 'There was a database error. Please try again later.'; + // Optional: Log the detailed error: error_log($e->getMessage()); + } + } else { + $error_message = 'There was an error uploading your resume. Please try again.'; + } + } +} +?> + + + + + + + Apply for <?php echo htmlspecialchars($job['title']); ?> - CosmicHire + + + + + + + + + + + + + +
+
+
+

Apply for

+ + +
+ +
+ + +
+ +
+ + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + Cancel +
+ +
+
+
+ + + + + + + diff --git a/assets/css/custom.css b/assets/css/custom.css index a226c8d..e47e9e4 100644 --- a/assets/css/custom.css +++ b/assets/css/custom.css @@ -16,23 +16,45 @@ body { color: #4A90E2 !important; } +.navbar-brand img { + height: 30px; +} + /* Hero Section */ .hero-section { - background: linear-gradient(45deg, rgba(74, 144, 226, 0.9), rgba(80, 227, 194, 0.9)), url('https://picsum.photos/seed/space-odyssey/1600/500') no-repeat center center; + background: #222 url('https://picsum.photos/seed/milkyway/1600/800') no-repeat center center; background-size: cover; color: white; padding: 6rem 0; text-align: center; + position: relative; +} + +.hero-section::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.5); +} + +.hero-section .container { + position: relative; + z-index: 2; } .hero-section h1 { font-weight: 700; font-size: 3.5rem; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.7); } .hero-section p { font-size: 1.25rem; opacity: 0.9; + text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.7); } /* Job Listings */ @@ -66,13 +88,14 @@ body { padding: 0.4em 0.7em; } +/* Buttons */ .btn-primary { background-color: #4A90E2; border-color: #4A90E2; border-radius: 12px; padding: 0.75rem 1.5rem; font-weight: 600; - transition: background-color 0.2s; + transition: background-color 0.3s ease; } .btn-primary:hover { @@ -95,7 +118,6 @@ body { border-color: #40B59A; } - /* Footer */ .footer { background-color: #FFFFFF; @@ -116,4 +138,38 @@ body { #job-search-form { transition: all 0.3s ease-in-out; -} \ No newline at end of file +} + +/* Job Details Page */ +.job-header { + background: linear-gradient(135deg, #4A90E2 0%, #50E3C2 100%); + color: white; + padding: 4rem 0; + border-bottom-left-radius: 20px; + border-bottom-right-radius: 20px; +} + +.job-header h1 { + font-weight: 700; +} + +.card { + border-radius: 12px; + border: none; + box-shadow: 0 4px 12px rgba(0,0,0,0.08); +} + +.breadcrumb-item a { + color: #4A90E2; + text-decoration: none; +} + +.list-group-item { + border: none; + padding-left: 0; +} + +.list-group-item i { + color: #50E3C2; + margin-right: 10px; +} diff --git a/careers.php b/careers.php index a9584ac..e354899 100644 --- a/careers.php +++ b/careers.php @@ -5,30 +5,12 @@ header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Expires: 0"); -// Job listings data -$jobs = [ - [ - 'id' => 1, - 'title' => 'Senior Frontend Developer – Space Data Platform Engineering', - 'department' => 'Engineering', - 'location' => 'Remote', - 'type' => 'Full-time' - ], - [ - 'id' => 2, - 'title' => 'Product Manager – Orbital Systems & Services Product', - 'department' => 'Product', - 'location' => 'New York, NY', - 'type' => 'Full-time' - ], - [ - 'id' => 3, - 'title' => 'UI/UX Designer – Mission-Control Interfaces Design', - 'department' => 'Design', - 'location' => 'Remote', - 'type' => 'Contract' - ], -]; +require_once __DIR__ . '/db/config.php'; + +$pdo = db(); +$stmt = $pdo->query("SELECT * FROM jobs ORDER BY created_at DESC"); +$jobs = $stmt->fetchAll(); + ?> @@ -141,7 +123,7 @@ $jobs = [
- A person standing in front of the Milky Way, representing the vast opportunities at our company. + A beautiful image of a starry night sky, representing the vast opportunities at our company.

Our Benefits

diff --git a/db/migrations/002_create_comments_table.php b/db/migrations/002_create_comments_table.php.disabled similarity index 100% rename from db/migrations/002_create_comments_table.php rename to db/migrations/002_create_comments_table.php.disabled diff --git a/db/migrations/003_create_applications_table.php b/db/migrations/003_create_applications_table.php new file mode 100644 index 0000000..a2dbed8 --- /dev/null +++ b/db/migrations/003_create_applications_table.php @@ -0,0 +1,24 @@ +exec($sql); + echo "Migration 003: Applications table created successfully.\n"; + } catch (PDOException $e) { + die("Migration 003 failed: " . $e->getMessage() . "\n"); + } +} + diff --git a/db/migrations/004_create_jobs_table.php b/db/migrations/004_create_jobs_table.php new file mode 100644 index 0000000..c2c624c --- /dev/null +++ b/db/migrations/004_create_jobs_table.php @@ -0,0 +1,27 @@ +exec($sql); + echo "Migration 004: Jobs table created successfully.\n"; + } catch (PDOException $e) { + die("Migration 004 failed: " . $e->getMessage() . "\n"); + } +} + diff --git a/index.php b/index.php index d8b2dd0..3a2d589 100644 --- a/index.php +++ b/index.php @@ -5,45 +5,12 @@ header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Expires: 0"); -// Sample data for job listings -$jobs = [ - [ - 'title' => 'Senior Frontend Developer', - 'department' => 'Engineering', - 'location' => 'Remote', - 'type' => 'Full-time' - ], - [ - 'title' => 'Product Manager', - 'department' => 'Product', - 'location' => 'New York, NY', - 'type' => 'Full-time' - ], - [ - 'title' => 'UI/UX Designer', - 'department' => 'Design', - 'location' => 'Remote', - 'type' => 'Contract' - ], - [ - 'title' => 'HR Generalist', - 'department' => 'People Ops', - 'location' => 'San Francisco, CA', - 'type' => 'Full-time' - ], - [ - 'title' => 'DevOps Engineer', - 'department' => 'Engineering', - 'location' => 'Remote', - 'type' => 'Full-time' - ], - [ - 'title' => 'Marketing Specialist', - 'department' => 'Marketing', - 'location' => 'Austin, TX', - 'type' => 'Part-time' - ] -]; +require_once __DIR__ . '/db/config.php'; + +$pdo = db(); +$stmt = $pdo->query("SELECT * FROM jobs ORDER BY created_at DESC"); +$jobs = $stmt->fetchAll(); + ?> @@ -128,7 +95,7 @@ $jobs = [ ·

- View Details + View Details
@@ -155,7 +122,7 @@ $jobs = [
- A person standing in front of the Milky Way, representing the vast opportunities at our company. + A beautiful image of a starry night sky, representing the vast opportunities at our company.

Our Benefits

diff --git a/job-details.php b/job-details.php index 2a419a1..c4bf0ff 100644 --- a/job-details.php +++ b/job-details.php @@ -5,103 +5,21 @@ header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Expires: 0"); -// Simulate fetching job data based on an ID from the URL -$jobs = [ - [ - 'id' => 1, - 'title' => 'Senior Product Manager', - 'department' => 'Product', - 'location' => 'Remote', - 'description' => 'We are looking for an experienced Senior Product Manager to help us build the future of HR technology. You will be responsible for the product planning and execution throughout the Product Lifecycle, including: gathering and prioritizing product and customer requirements, defining the product vision, and working closely with engineering, sales, marketing and support to ensure revenue and customer satisfaction goals are met.', - 'requirements' => [ - '5+ years of product management experience', - 'Demonstrated success defining and launching excellent products', - 'Excellent written and verbal communication skills', - 'Bachelor’s degree (MBA preferred)', - 'Technical background, with experience in SaaS', - 'Excellent teamwork skills', - ], - 'benefits' => [ - 'Competitive salary and equity', - 'Comprehensive health, dental, and vision insurance', - 'Unlimited paid time off', - 'Remote work stipend', - 'Annual team offsites', - ] - ], - [ - 'id' => 2, - 'title' => 'Lead Software Engineer (Backend)', - 'department' => 'Engineering', - 'location' => 'New York, NY', - 'description' => 'As a Lead Software Engineer, you will be a key member of our engineering team, responsible for designing, developing, and deploying our backend services. You will work with a modern tech stack and have a significant impact on our product's architecture and performance.', - 'requirements' => [ - '8+ years of software development experience', - 'Expertise in PHP, Python, or similar languages', - 'Strong understanding of database design and SQL', - 'Experience with cloud platforms (AWS, GCP, Azure)', - 'Proven leadership and mentoring skills', - ], - 'benefits' => [ - 'Competitive salary and equity', - 'Comprehensive health, dental, and vision insurance', - '401(k) with company match', - 'Commuter benefits', - 'Catered lunches', - ] - ], - [ - 'id' => 3, - 'title' => 'UX/UI Designer', - 'department' => 'Design', - 'location' => 'Remote', - 'description' => 'We are seeking a talented UX/UI Designer to create amazing user experiences. The ideal candidate should have an eye for clean and artful design, possess superior UX/UI skills and be able to translate high-level requirements into interaction flows and artifacts, and transform them into beautiful, intuitive, and functional user interfaces.', - 'requirements' => [ - '3+ years of UX/UI design experience', - 'A strong portfolio of design projects', - 'Proficiency in Figma, Sketch, or other visual design and wire-framing tools', - 'Experience in creating wireframes, storyboards, user flows, process flows and site maps', - 'Excellent visual design skills with sensitivity to user-system interaction', - ], - 'benefits' => [ - 'Competitive salary', - 'Flexible work hours', - 'Health and wellness stipend', - 'Remote work stipend', - 'Opportunities for professional development', - ] - ], - [ - 'id' => 4, - 'title' => 'Marketing Manager', - 'department' => 'Marketing', - 'location' => 'San Francisco, CA', - 'description' => 'We are looking for a results-driven Marketing Manager to join our growing team. You will be responsible for developing and implementing marketing strategies to increase brand awareness and drive lead generation. This is a great opportunity for someone who is passionate about marketing and technology.', - 'requirements' => [ - '5+ years of marketing experience in the tech industry', - 'Proven experience in developing and executing marketing campaigns', - 'Strong understanding of digital marketing channels (SEO, SEM, social media, etc.)', - 'Excellent analytical and communication skills', - 'Bachelor's degree in Marketing or related field', - ], - 'benefits' => [ - 'Competitive salary and performance bonuses', - 'Comprehensive health, dental, and vision insurance', - 'Generous PTO and paid holidays', - '401(k) with company match', - 'A vibrant and collaborative work environment', - ] - ], -]; +require_once __DIR__ . '/db/config.php'; $job_id = isset($_GET['id']) ? (int)$_GET['id'] : 0; $job = null; -foreach ($jobs as $j) { - if ($j['id'] === $job_id) { - $job = $j; - break; - } +if ($job_id > 0) { + $pdo = db(); + $stmt = $pdo->prepare("SELECT * FROM jobs WHERE id = ?"); + $stmt->execute([$job_id]); + $job = $stmt->fetch(); +} + +if ($job) { + $job['requirements'] = json_decode($job['requirements'], true); + $job['benefits'] = json_decode($job['benefits'], true); } // SEO and page metadata @@ -135,60 +53,32 @@ $page_keywords = 'jobs, careers, hiring, ' . ($job ? htmlspecialchars($job['titl - + } + } + + + @@ -264,7 +154,7 @@ $page_keywords = 'jobs, careers, hiring, ' . ($job ? htmlspecialchars($job['titl

Interested?

Apply now to join our team and make an impact.

- Apply Now + Apply Now