diff --git a/apps/admin/app/(main)/jobs/[jobId]/page.tsx b/apps/admin/app/(main)/jobs/[jobId]/page.tsx
index f77a7e2..efd02cc 100644
--- a/apps/admin/app/(main)/jobs/[jobId]/page.tsx
+++ b/apps/admin/app/(main)/jobs/[jobId]/page.tsx
@@ -3,6 +3,21 @@ import { eq } from '@workspace/db/drizzle';
import { notFound } from 'next/navigation';
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@workspace/ui/components/card';
import { Table, TableBody, TableHead, TableHeader, TableRow, TableCell } from '@workspace/ui/components/table';
+import { Badge } from '@workspace/ui/components/badge';
+import { Button } from '@workspace/ui/components/button';
+import {
+ ArrowLeft,
+ MapPin,
+ DollarSign,
+ Calendar,
+ GraduationCap,
+ Building2,
+ ExternalLink,
+ Users,
+ FileText,
+ Clock
+} from 'lucide-react';
+import Link from 'next/link';
interface JobPageProps {
params: { jobId: string };
@@ -34,47 +49,301 @@ export default async function JobDetailPage({ params }: JobPageProps) {
.where(eq(applications.jobId, jobId));
return (
-
-
-
- {job.title}
- Company: {company?.name ?? 'Unknown'}
-
-
- Location: {job.location}
- Salary: {job.salary}
- Deadline: {job.applicationDeadline.toLocaleDateString()}
- {job.description}
-
-
-
-
- Students Applied
- {applicants.length === 0 ? (
- No applications yet.
- ) : (
-
-
-
-
- Name
- Email
- Status
-
-
-
- {applicants.map((a) => (
-
- {`${a.firstName ?? ''} ${a.lastName ?? ''}`.trim()}
- {a.email}
- {a.status}
-
- ))}
-
-
+
+ {/* Header */}
+
+
+
+
+
+
+
+
+
Job Details
+
View and manage job information
+
- )}
-
+
+
+
+
+
+ {/* Main Job Information */}
+
+ {/* Job Header Card */}
+
+
+
+
+
+ {company?.imageURL ? (
+

+ ) : (
+
+ )}
+
+
+
+ {job.title}
+
+
+ {company?.name ?? 'Unknown Company'}
+
+
+
+
+ {job.active ? 'Active' : 'Inactive'}
+
+
+
+
+ {/* Key Details Grid */}
+
+
+
+
+
Location
+
{job.location}
+
+
+
+
+
+
Salary
+
{job.salary}
+
+
+
+
+
+
Application Deadline
+
{job.applicationDeadline.toLocaleDateString()}
+
+
+
+
+
+
Applications
+
{applicants.length} students
+
+
+
+
+ {/* Job Link */}
+
+
+
+
+ {/* Job Description */}
+
+
+
+
+ Job Description
+
+
+
+
+
+ {job.description}
+
+
+
+
+
+ {/* Academic Requirements */}
+
+
+
+
+ Academic Requirements
+
+
+
+
+
+
{job.minCGPA}
+
Minimum CGPA
+
+
+
{job.minSSC}%
+
Minimum SSC
+
+
+
{job.minHSC}%
+
Minimum HSC
+
+
+
+
+
+
+ Dead KT: {job.allowDeadKT ? 'Allowed' : 'Not Allowed'}
+
+
+
+
+
+ Live KT: {job.allowLiveKT ? 'Allowed' : 'Not Allowed'}
+
+
+
+
+
+
+
+ {/* Sidebar */}
+
+ {/* Company Information */}
+
+
+
+
+ Company Details
+
+
+
+
+
+ {company?.imageURL ? (
+

+ ) : (
+
+ )}
+
+
+
{company?.name}
+
{company?.email}
+
+
+ {company?.description && (
+ {company.description}
+ )}
+
+
+
+ {/* Job Timeline */}
+
+
+
+
+ Timeline
+
+
+
+
+ Created
+ {job.createdAt.toLocaleDateString()}
+
+
+ Last Updated
+ {job.updatedAt.toLocaleDateString()}
+
+
+ Application Deadline
+ {job.applicationDeadline.toLocaleDateString()}
+
+
+
+
+
+
+ {/* Applications Section */}
+
+
+
+
+
+ Student Applications ({applicants.length})
+
+
+ View all students who have applied for this position
+
+
+
+ {applicants.length === 0 ? (
+
+
+
No applications yet
+
Students will appear here once they apply for this job.
+
+ ) : (
+
+
+
+
+ Name
+ Email
+ Status
+
+
+
+ {applicants.map((applicant) => (
+
+
+ {`${applicant.firstName ?? ''} ${applicant.lastName ?? ''}`.trim() || 'Unknown'}
+
+ {applicant.email}
+
+
+ {applicant.status.charAt(0).toUpperCase() + applicant.status.slice(1)}
+
+
+
+ ))}
+
+
+
+ )}
+
+
+
+
);
}
\ No newline at end of file
diff --git a/apps/admin/app/(main)/jobs/page.tsx b/apps/admin/app/(main)/jobs/page.tsx
index dfca32f..cf6fe0f 100644
--- a/apps/admin/app/(main)/jobs/page.tsx
+++ b/apps/admin/app/(main)/jobs/page.tsx
@@ -3,6 +3,20 @@ import { eq } from '@workspace/db/drizzle';
import Link from 'next/link';
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@workspace/ui/components/card';
import { Button } from '@workspace/ui/components/button';
+import { Input } from '@workspace/ui/components/input';
+import { Badge } from '@workspace/ui/components/badge';
+import {
+ Search,
+ MapPin,
+ DollarSign,
+ Calendar,
+ GraduationCap,
+ Building2,
+ ExternalLink,
+ Plus,
+ Filter,
+ Briefcase
+} from 'lucide-react';
export const dynamic = 'force-dynamic';
@@ -16,54 +30,198 @@ export default async function JobsListPage() {
const jobsWithCompany = await getAllJobsWithCompany();
return (
-
-
All Jobs
-
- {jobsWithCompany.length === 0 && (
-
No jobs found.
- )}
- {jobsWithCompany.map((job) => (
-
-
-
- {job.title}
-
- {job.active ? 'Active' : 'Inactive'}
-
-
-
- Company: {job.company?.name ?? 'Unknown'}
-
-
-
-
-

-
-
{job.company?.name}
-
{job.company?.email}
-
-
-
-
Location: {job.location}
-
Salary: {job.salary}
-
Deadline: {job.applicationDeadline.toLocaleDateString()}
-
Min CGPA: {job.minCGPA}
-
Min SSC: {job.minSSC}
-
Min HSC: {job.minHSC}
-
Dead KT: {job.allowDeadKT ? 'Yes' : 'No'}
-
Live KT: {job.allowLiveKT ? 'Yes' : 'No'}
-
-
- Description: {job.description}
- Created: {job.createdAt.toLocaleDateString()} | Updated: {job.updatedAt.toLocaleDateString()}
-
-
-
-
-
+
+ {/* Header Section */}
+
+
+
+
+
Job Listings
+
Manage and monitor all job opportunities
-
- ))}
+
+
+
+
+
+
+
+ {/* Search and Filters Section */}
+
+
+
+
+
+
+
+
+
+
+ {jobsWithCompany.length} Jobs
+
+
+
+
+
+
+ {/* Jobs Grid */}
+
+ {jobsWithCompany.length === 0 ? (
+
+
+
+
+
No jobs found
+
Get started by creating your first job listing
+
+
+
+
+ ) : (
+
+ {jobsWithCompany.map((job) => (
+
+ {/* Card Header */}
+
+
+
+
+ {job.company?.imageURL ? (
+

+ ) : (
+
+ )}
+
+
+
+ {job.title}
+
+
+ {job.company?.name ?? 'Unknown Company'}
+
+
+
+
+ {job.active ? 'Active' : 'Inactive'}
+
+
+
+
+ {/* Card Content */}
+
+ {/* Key Details */}
+
+
+
+ {job.location}
+
+
+
+ {job.salary}
+
+
+
+ Deadline: {job.applicationDeadline.toLocaleDateString()}
+
+
+
+ {/* Academic Requirements */}
+
+
+
+ Requirements
+
+
+
CGPA: {job.minCGPA}
+
SSC: {job.minSSC}%
+
HSC: {job.minHSC}%
+
+
+ Dead KT: {job.allowDeadKT ? 'Allowed' : 'Not Allowed'}
+
+
+ Live KT: {job.allowLiveKT ? 'Allowed' : 'Not Allowed'}
+
+
+
+
+
+ {/* Job Link */}
+
+
+ {/* Description Preview */}
+ {job.description && (
+
+
+ {job.description}
+
+
+ )}
+
+ {/* Timestamps */}
+
+
+ Created: {job.createdAt.toLocaleDateString()}
+ Updated: {job.updatedAt.toLocaleDateString()}
+
+
+
+
+ {/* Card Footer */}
+
+
+
+
+
+
+ ))}
+
+ )}
);