🚀 UTAS Oman Portal Demo - Complete AI-Enhanced University Portal

 Features:
• Real AI chatbot with OpenRouter API (bilingual Arabic/English)
• Comprehensive UTAS Oman content with programs and admissions
• Modern responsive design with Tailwind CSS
• Student/Admin authentication and dashboards
• Full course catalog with search and filtering
• Contact forms and application processes

🤖 AI Capabilities:
• Language detection (Arabic/English)
• UTAS Oman knowledge base integration
• Contextual responses about programs, admissions, scholarships
• No mock data - all responses from real AI

🛠️ Technology Stack:
• Next.js 14 + React 19 + TypeScript
• OpenRouter API with Meta LLaMA 3.1
• Prisma ORM with SQLite
• Tailwind CSS for styling

📋 Demo Ready:
• Test users file included (TEST-USERS.md)
• Navigation test checklist (NAVIGATION-TEST.md)
• Clean codebase with proper gitignore
• Production-ready configuration
This commit is contained in:
Krikorios
2025-07-13 19:18:26 +04:00
parent f83b27db61
commit 0c22188feb
52 changed files with 6454 additions and 14454 deletions
+388 -472
View File
@@ -1,544 +1,460 @@
'use client';
import React, { useState } from 'react';
import { useLanguage } from '@/components/providers/LanguageProvider';
import {
GraduationCap,
Calendar,
Users,
CheckCircle,
Clock,
DollarSign,
Globe,
MapPin,
Mail,
Phone,
ExternalLink
GraduationCap, Calendar, CheckCircle, MapPin, Mail, Phone,
FileText, Award, AlertCircle, BookOpen, CreditCard, ArrowRight
} from 'lucide-react';
import { mockCourses } from '@/lib/mockData';
export default function AdmissionsPage() {
const { language, dir } = useLanguage();
const [activeTab, setActiveTab] = useState('requirements');
// Application process steps
// Application process steps for UTAS Oman
const applicationSteps = [
{
step: 1,
titleEn: 'Choose Your Program',
titleAr: 'اختر برنامجك',
descriptionEn: 'Browse our extensive range of undergraduate and postgraduate programs.',
descriptionAr: 'تصفح مجموعتنا الواسعة من البرامج الجامعية والدراسات العليا.',
timelineEn: '1-2 weeks',
timelineAr: '1-2 أسابيع'
title: 'Choose Your Program',
description: 'Explore our undergraduate and postgraduate programs aligned with Oman Vision 2040.',
timeline: '1-2 weeks',
action: 'Browse Programs'
},
{
step: 2,
titleEn: 'Submit Application',
titleAr: 'تقديم الطلب',
descriptionEn: 'Complete your online application with all required documents.',
descriptionAr: 'أكمل طلبك عبر الإنترنت مع جميع الوثائق المطلوبة.',
timelineEn: '2-3 days',
timelineAr: '2-3 أيام'
title: 'Submit Application',
description: 'Complete online application with required documents and pay application fee.',
timeline: '2-3 days',
action: 'Apply Online'
},
{
step: 3,
titleEn: 'Application Review',
titleAr: 'مراجعة الطلب',
descriptionEn: 'Our admissions team reviews your application and documents.',
descriptionAr: 'يراجع فريق القبول لدينا طلبك ووثائقك.',
timelineEn: '2-4 weeks',
timelineAr: '2-4 أسابيع'
title: 'Document Verification',
description: 'Our admissions team verifies your academic credentials and documents.',
timeline: '1-2 weeks',
action: 'Track Status'
},
{
step: 4,
titleEn: 'Receive Offer',
titleAr: 'استلام العرض',
descriptionEn: 'If successful, you\'ll receive a conditional or unconditional offer.',
descriptionAr: 'في حالة النجاح، ستتلقى عرضاً مشروطاً أو غير مشروط.',
timelineEn: '1 week',
timelineAr: '1 أسبوع'
title: 'Assessment & Interview',
description: 'Complete entrance exam or interview if required for your program.',
timeline: '1 week',
action: 'Schedule Test'
},
{
step: 5,
titleEn: 'Accept & Enroll',
titleAr: 'القبول والتسجيل',
descriptionEn: 'Accept your offer and complete enrollment procedures.',
descriptionAr: 'اقبل عرضك وأكمل إجراءات التسجيل.',
timelineEn: '1-2 weeks',
timelineAr: '1-2 أسابيع'
title: 'Admission Decision',
description: 'Receive your admission decision and enrollment instructions.',
timeline: '1-2 weeks',
action: 'Check Result'
},
{
step: 6,
title: 'Enrollment & Registration',
description: 'Confirm enrollment, pay fees, and register for courses.',
timeline: '1 week',
action: 'Complete Enrollment'
}
];
// Entry requirements by level
const entryRequirements = {
undergraduate: {
titleEn: 'Undergraduate Requirements',
titleAr: 'متطلبات البكالوريوس',
requirements: {
en: [
'Australian Year 12 or equivalent international qualification',
'English language proficiency (IELTS 6.0 or equivalent)',
'Prerequisites specific to chosen program',
'Personal statement (for some programs)',
'Portfolio (for creative programs)'
],
ar: [
'الصف الثاني عشر الأسترالي أو مؤهل دولي معادل',
'إجادة اللغة الإنجليزية (IELTS 6.0 أو ما يعادله)',
'المتطلبات المسبقة الخاصة بالبرنامج المختار',
'بيان شخصي (لبعض البرامج)',
'محفظة أعمال (للبرامج الإبداعية)'
const requirements = {
undergraduate: [
{
category: 'Academic Requirements',
items: [
'High School Diploma or equivalent (minimum 60%)',
'Strong performance in relevant subjects (Math, Science, English)',
'Grade 12 certificate with subject-specific requirements'
]
},
{
category: 'English Proficiency',
items: [
'IELTS Academic: 5.5 overall (5.0 in each band)',
'TOEFL iBT: 71 overall',
'UTAS English Placement Test (available on campus)',
'High school English: Grade B or above'
]
},
{
category: 'Additional Requirements',
items: [
'Completed application form',
'Recent passport-size photographs',
'Copy of passport/Emirates ID',
'Medical fitness certificate (for some programs)'
]
}
},
postgraduate: {
titleEn: 'Postgraduate Requirements',
titleAr: 'متطلبات الدراسات العليا',
requirements: {
en: [
'Bachelor\'s degree or equivalent from recognized institution',
'English language proficiency (IELTS 6.5 or equivalent)',
'Academic transcripts and certificates',
'CV/Resume and personal statement',
'Letters of recommendation (for research degrees)',
'Research proposal (for PhD programs)'
],
ar: [
'درجة البكالوريوس أو ما يعادلها من مؤسسة معترف بها',
'إجادة اللغة الإنجليزية (IELTS 6.5 أو ما يعادله)',
'كشوف الدرجات والشهادات الأكاديمية',
'السيرة الذاتية والبيان الشخصي',
'خطابات التوصية (لدرجات البحث)',
'مقترح البحث (لبرامج الدكتوراه)'
],
postgraduate: [
{
category: 'Academic Requirements',
items: [
'Bachelor\'s degree from recognized institution',
'Minimum GPA of 2.5/4.0 or equivalent',
'Relevant undergraduate degree for chosen program',
'Professional experience (for MBA and some programs)'
]
},
{
category: 'English Proficiency',
items: [
'IELTS Academic: 6.0-6.5 overall (depending on program)',
'TOEFL iBT: 79-88 overall',
'UTAS English Placement Test',
'Previous degree taught in English (with certification)'
]
},
{
category: 'Program-Specific Requirements',
items: [
'Statement of purpose (500-1000 words)',
'Letters of recommendation (2-3)',
'CV/Resume with work experience',
'Portfolio (for design and creative programs)',
'GMAT/GRE scores (for some business programs)'
]
}
},
international: {
titleEn: 'International Student Requirements',
titleAr: 'متطلبات الطلاب الدوليين',
requirements: {
en: [
'Valid passport and student visa',
'Academic credentials assessment',
'English language test results',
'Financial capacity evidence',
'Health insurance coverage',
'Overseas Student Health Cover (OSHC)'
],
ar: [
'جواز سفر صالح وتأشيرة طالب',
'تقييم الأوراق الأكاديمية',
'نتائج اختبار اللغة الإنجليزية',
'دليل القدرة المالية',
'تغطية التأمين الصحي',
'تغطية صحية للطلاب الأجانب (OSHC)'
]
}
}
]
};
// Important dates
// Application documents checklist
const documentChecklist = [
{ document: 'Completed application form', required: true, note: 'Available online' },
{ document: 'Academic transcripts (certified)', required: true, note: 'Original + translation if needed' },
{ document: 'English proficiency test results', required: true, note: 'IELTS/TOEFL or equivalent' },
{ document: 'Copy of passport/Emirates ID', required: true, note: 'Valid identification' },
{ document: 'Passport-size photographs', required: true, note: '4 recent photos' },
{ document: 'Statement of purpose', required: false, note: 'For postgraduate programs' },
{ document: 'Letters of recommendation', required: false, note: '2-3 letters for postgraduate' },
{ document: 'CV/Resume', required: false, note: 'For postgraduate and professional programs' },
{ document: 'Portfolio', required: false, note: 'For design and creative programs' },
{ document: 'Medical certificate', required: false, note: 'For specific programs only' }
];
// Important dates and deadlines
const importantDates = [
{
dateEn: 'October 31, 2024',
dateAr: '31 أكتوبر 2024',
eventEn: 'Applications Open',
eventAr: 'فتح التطبيقات',
typeEn: 'Application',
typeAr: 'التطبيق'
},
{
dateEn: 'January 15, 2025',
dateAr: '15 يناير 2025',
eventEn: 'Semester 1 Applications Close',
eventAr: 'إغلاق طلبات الفصل الأول',
typeEn: 'Deadline',
typeAr: 'الموعد النهائي'
},
{
dateEn: 'February 24, 2025',
dateAr: '24 فبراير 2025',
eventEn: 'Semester 1 Commences',
eventAr: 'بداية الفصل الأول',
typeEn: 'Start Date',
typeAr: 'تاريخ البداية'
},
{
dateEn: 'June 15, 2025',
dateAr: '15 يونيو 2025',
eventEn: 'Semester 2 Applications Close',
eventAr: 'إغلاق طلبات الفصل الثاني',
typeEn: 'Deadline',
typeAr: 'الموعد النهائي'
},
{
dateEn: 'July 28, 2025',
dateAr: '28 يوليو 2025',
eventEn: 'Semester 2 Commences',
eventAr: 'بداية الفصل الثاني',
typeEn: 'Start Date',
typeAr: 'تاريخ البداية'
}
{ event: 'Fall Semester Application Deadline', date: 'July 15, 2025', type: 'deadline' },
{ event: 'Fall Semester Classes Begin', date: 'September 1, 2025', type: 'start' },
{ event: 'Spring Semester Application Deadline', date: 'December 15, 2025', type: 'deadline' },
{ event: 'Spring Semester Classes Begin', date: 'February 1, 2026', type: 'start' },
{ event: 'Summer Session Application Deadline', date: 'April 15, 2026', type: 'deadline' },
{ event: 'Summer Session Classes Begin', date: 'June 1, 2026', type: 'start' }
];
// Support services
const supportServices = [
{
titleEn: 'Academic Support',
titleAr: 'الدعم الأكاديمي',
descriptionEn: 'Tutoring, study groups, and academic skills workshops.',
descriptionAr: 'التدريس والمجموعات الدراسية وورش المهارات الأكاديمية.',
iconColor: 'text-blue-500'
},
{
titleEn: 'Student Accommodation',
titleAr: 'سكن الطلاب',
descriptionEn: 'On-campus and off-campus housing options with support.',
descriptionAr: 'خيارات السكن داخل وخارج الحرم الجامعي مع الدعم.',
iconColor: 'text-green-500'
},
{
titleEn: 'Career Services',
titleAr: 'خدمات الوظائف',
descriptionEn: 'Job placement, internships, and career development programs.',
descriptionAr: 'التوظيف والتدريب وبرامج تطوير المهنة.',
iconColor: 'text-purple-500'
},
{
titleEn: 'International Student Support',
titleAr: 'دعم الطلاب الدوليين',
descriptionEn: 'Visa assistance, orientation programs, and cultural integration.',
descriptionAr: 'مساعدة التأشيرة وبرامج التوجيه والاندماج الثقافي.',
iconColor: 'text-orange-500'
},
{
titleEn: 'Financial Aid',
titleAr: 'المساعدة المالية',
descriptionEn: 'Scholarships, grants, and financial planning assistance.',
descriptionAr: 'المنح الدراسية والمنح والمساعدة في التخطيط المالي.',
iconColor: 'text-green-600'
},
{
titleEn: 'Disability Services',
titleAr: 'خدمات الإعاقة',
descriptionEn: 'Accessibility support and reasonable adjustments.',
descriptionAr: 'دعم إمكانية الوصول والتعديلات المعقولة.',
iconColor: 'text-red-500'
}
// Application fees
const applicationFees = [
{ category: 'Undergraduate Programs', fee: 'OMR 25', note: 'Non-refundable application fee' },
{ category: 'Postgraduate Programs', fee: 'OMR 50', note: 'Non-refundable application fee' },
{ category: 'International Students', fee: '+OMR 25', note: 'Additional processing fee' },
{ category: 'Late Application', fee: '+OMR 25', note: 'After deadline submission' }
];
// Filter popular courses
const popularCourses = mockCourses.slice(0, 6);
return (
<div className={`min-h-screen bg-gray-50 ${dir === 'rtl' ? 'font-arabic' : ''}`} dir={dir}>
<div className="min-h-screen bg-gray-50">
{/* Hero Section */}
<div className="bg-gradient-to-r from-purple-600 to-blue-600 text-white py-16">
<div className="container mx-auto px-4">
<div className="max-w-4xl mx-auto text-center">
<div className="bg-gradient-to-r from-blue-900 via-indigo-900 to-purple-900 text-white">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16">
<div className="text-center">
<h1 className="text-4xl md:text-5xl font-bold mb-6">
{language === 'en' ? 'Admissions' : 'القبول'}
Join UTAS Oman
</h1>
<p className="text-xl opacity-90 mb-8">
{language === 'en'
? 'Join UTAS and embark on your educational journey. We\'re here to guide you through every step of the application process.'
: 'انضم إلى UTAS وابدأ رحلتك التعليمية. نحن هنا لإرشادك خلال كل خطوة من خطوات عملية التقديم.'
}
<p className="text-xl text-blue-100 max-w-3xl mx-auto mb-8">
Start your journey toward academic excellence and career success. Apply now for our world-class programs
designed to meet Oman&apos;s Vision 2040 goals.
</p>
<div className="flex justify-center space-x-8 text-center">
<div>
<div className="text-3xl font-bold">150+</div>
<div className="opacity-80">{language === 'en' ? 'Programs' : 'برنامج'}</div>
</div>
<div>
<div className="text-3xl font-bold">95%</div>
<div className="opacity-80">{language === 'en' ? 'Graduate Employment' : 'توظيف الخريجين'}</div>
</div>
<div>
<div className="text-3xl font-bold">100+</div>
<div className="opacity-80">{language === 'en' ? 'Countries Represented' : 'دولة ممثلة'}</div>
</div>
<div className="flex flex-col sm:flex-row gap-4 justify-center">
<button className="bg-white text-blue-900 px-8 py-3 rounded-lg font-semibold hover:bg-gray-100 transition-colors flex items-center gap-2">
<FileText className="w-5 h-5" />
Apply Online Now
</button>
<button className="border-2 border-white text-white px-8 py-3 rounded-lg font-semibold hover:bg-white hover:text-blue-900 transition-colors flex items-center gap-2">
<BookOpen className="w-5 h-5" />
View Programs
</button>
</div>
</div>
</div>
</div>
<div className="container mx-auto px-4 py-8">
{/* Navigation Tabs */}
<div className="flex justify-center mb-8">
<div className="bg-white rounded-lg p-1 shadow-lg">
{[
{ id: 'requirements', labelEn: 'Requirements', labelAr: 'المتطلبات' },
{ id: 'process', labelEn: 'Application Process', labelAr: 'عملية التقديم' },
{ id: 'dates', labelEn: 'Important Dates', labelAr: 'تواريخ مهمة' },
{ id: 'support', labelEn: 'Student Support', labelAr: 'دعم الطلاب' }
].map(tab => (
<button
key={tab.id}
onClick={() => setActiveTab(tab.id)}
className={`px-6 py-3 rounded-md font-semibold transition-colors ${
activeTab === tab.id
? 'bg-purple-600 text-white'
: 'text-gray-600 hover:text-purple-600'
}`}
>
{language === 'en' ? tab.labelEn : tab.labelAr}
</button>
))}
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
{/* Application Process */}
<section className="mb-16">
<div className="text-center mb-12">
<h2 className="text-3xl font-bold text-gray-900 mb-4">Application Process</h2>
<p className="text-lg text-gray-600 max-w-3xl mx-auto">
Follow these simple steps to apply for your chosen program at UTAS Oman
</p>
</div>
</div>
{/* Requirements Tab */}
{activeTab === 'requirements' && (
<div className="space-y-8">
{Object.values(entryRequirements).map((category, index) => (
<div key={index} className="bg-white rounded-xl shadow-lg p-8">
<h2 className="text-2xl font-bold text-gray-900 mb-6 flex items-center">
<GraduationCap className="mr-3 text-purple-600" size={28} />
{language === 'en' ? category.titleEn : category.titleAr}
</h2>
<div className="grid lg:grid-cols-2 gap-6">
<div>
<ul className="space-y-4">
{(language === 'en' ? category.requirements.en : category.requirements.ar).map((requirement, reqIndex) => (
<li key={reqIndex} className="flex items-start">
<CheckCircle className="w-5 h-5 text-green-500 mr-3 mt-0.5 flex-shrink-0" />
<span className="text-gray-700">{requirement}</span>
</li>
))}
</ul>
</div>
<div className="bg-purple-50 rounded-lg p-6">
<h3 className="font-semibold text-purple-900 mb-3">
{language === 'en' ? 'Quick Tips' : 'نصائح سريعة'}
</h3>
<ul className="space-y-2 text-sm text-purple-700">
<li> {language === 'en' ? 'Apply early for better chances' : 'تقدم مبكراً لفرص أفضل'}</li>
<li> {language === 'en' ? 'Prepare documents in advance' : 'حضر الوثائق مسبقاً'}</li>
<li> {language === 'en' ? 'Contact our admissions team for help' : 'اتصل بفريق القبول للمساعدة'}</li>
</ul>
</div>
</div>
</div>
))}
</div>
)}
{/* Application Process Tab */}
{activeTab === 'process' && (
<div className="space-y-8">
<div className="bg-white rounded-xl shadow-lg p-8">
<h2 className="text-3xl font-bold text-gray-900 mb-8 text-center">
{language === 'en' ? 'Application Process' : 'عملية التقديم'}
</h2>
<div className="space-y-8">
{applicationSteps.map((step, index) => (
<div key={step.step} className="flex items-start">
<div className="flex-shrink-0 w-12 h-12 bg-purple-600 text-white rounded-full flex items-center justify-center font-bold text-lg mr-6">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
{applicationSteps.map((step, index) => (
<div key={step.step} className="relative">
<div className="bg-white rounded-xl shadow-lg p-6 hover:shadow-xl transition-shadow">
<div className="flex items-center mb-4">
<div className="w-10 h-10 bg-blue-600 text-white rounded-full flex items-center justify-center font-bold mr-4">
{step.step}
</div>
<div className="flex-1">
<div className="flex flex-col lg:flex-row lg:items-center lg:justify-between mb-2">
<h3 className="text-xl font-bold text-gray-900">
{language === 'en' ? step.titleEn : step.titleAr}
</h3>
<div className="flex items-center text-sm text-purple-600 font-medium">
<Clock className="w-4 h-4 mr-1" />
{language === 'en' ? step.timelineEn : step.timelineAr}
<h3 className="text-lg font-semibold text-gray-900">{step.title}</h3>
<p className="text-sm text-blue-600">{step.timeline}</p>
</div>
</div>
<p className="text-gray-600 mb-4">{step.description}</p>
<button className="text-blue-600 hover:text-blue-800 font-medium text-sm flex items-center gap-1">
{step.action}
<ArrowRight className="w-4 h-4" />
</button>
</div>
{index < applicationSteps.length - 1 && (
<div className="hidden lg:block absolute top-1/2 -right-4 transform -translate-y-1/2">
<ArrowRight className="w-8 h-8 text-gray-300" />
</div>
)}
</div>
))}
</div>
</section>
{/* Requirements Tabs */}
<section className="mb-16">
<div className="text-center mb-8">
<h2 className="text-3xl font-bold text-gray-900 mb-4">Entry Requirements</h2>
<p className="text-lg text-gray-600">
Requirements vary by program level. Select your study level below.
</p>
</div>
<div className="bg-white rounded-xl shadow-lg overflow-hidden">
{/* Tab Navigation */}
<div className="border-b border-gray-200">
<nav className="flex">
<button
onClick={() => setActiveTab('requirements')}
className={`px-6 py-4 text-sm font-medium ${
activeTab === 'requirements'
? 'border-b-2 border-blue-500 text-blue-600'
: 'text-gray-500 hover:text-gray-700'
}`}
>
Academic Requirements
</button>
<button
onClick={() => setActiveTab('documents')}
className={`px-6 py-4 text-sm font-medium ${
activeTab === 'documents'
? 'border-b-2 border-blue-500 text-blue-600'
: 'text-gray-500 hover:text-gray-700'
}`}
>
Required Documents
</button>
<button
onClick={() => setActiveTab('deadlines')}
className={`px-6 py-4 text-sm font-medium ${
activeTab === 'deadlines'
? 'border-b-2 border-blue-500 text-blue-600'
: 'text-gray-500 hover:text-gray-700'
}`}
>
Deadlines & Fees
</button>
</nav>
</div>
{/* Tab Content */}
<div className="p-8">
{activeTab === 'requirements' && (
<div className="space-y-8">
{/* Undergraduate Requirements */}
<div>
<h3 className="text-xl font-semibold text-gray-900 mb-6 flex items-center gap-2">
<GraduationCap className="w-6 h-6 text-blue-600" />
Undergraduate Programs
</h3>
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{requirements.undergraduate.map((req, index) => (
<div key={index} className="border border-gray-200 rounded-lg p-6">
<h4 className="text-lg font-medium text-gray-900 mb-4">{req.category}</h4>
<ul className="space-y-2">
{req.items.map((item, itemIndex) => (
<li key={itemIndex} className="flex items-start gap-2">
<CheckCircle className="w-4 h-4 text-green-600 mt-1 flex-shrink-0" />
<span className="text-gray-600 text-sm">{item}</span>
</li>
))}
</ul>
</div>
))}
</div>
</div>
{/* Postgraduate Requirements */}
<div>
<h3 className="text-xl font-semibold text-gray-900 mb-6 flex items-center gap-2">
<Award className="w-6 h-6 text-purple-600" />
Postgraduate Programs
</h3>
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{requirements.postgraduate.map((req, index) => (
<div key={index} className="border border-gray-200 rounded-lg p-6">
<h4 className="text-lg font-medium text-gray-900 mb-4">{req.category}</h4>
<ul className="space-y-2">
{req.items.map((item, itemIndex) => (
<li key={itemIndex} className="flex items-start gap-2">
<CheckCircle className="w-4 h-4 text-green-600 mt-1 flex-shrink-0" />
<span className="text-gray-600 text-sm">{item}</span>
</li>
))}
</ul>
</div>
))}
</div>
</div>
</div>
)}
{activeTab === 'documents' && (
<div>
<h3 className="text-xl font-semibold text-gray-900 mb-6 flex items-center gap-2">
<FileText className="w-6 h-6 text-blue-600" />
Document Checklist
</h3>
<div className="space-y-4">
{documentChecklist.map((doc, index) => (
<div key={index} className="flex items-start gap-4 p-4 border border-gray-200 rounded-lg">
<div className="mt-1">
{doc.required ? (
<AlertCircle className="w-5 h-5 text-red-600" />
) : (
<CheckCircle className="w-5 h-5 text-green-600" />
)}
</div>
<div className="flex-1">
<div className="flex items-center gap-2 mb-1">
<h4 className="font-medium text-gray-900">{doc.document}</h4>
<span className={`px-2 py-1 text-xs rounded-full ${
doc.required
? 'bg-red-100 text-red-800'
: 'bg-green-100 text-green-800'
}`}>
{doc.required ? 'Required' : 'Optional'}
</span>
</div>
<p className="text-sm text-gray-600">{doc.note}</p>
</div>
</div>
<p className="text-gray-600">
{language === 'en' ? step.descriptionEn : step.descriptionAr}
</p>
{index < applicationSteps.length - 1 && (
<div className="w-px h-8 bg-gray-300 ml-6 mt-4"></div>
)}
</div>
))}
</div>
))}
</div>
<div className="mt-8 text-center">
<button className="bg-purple-600 text-white px-8 py-3 rounded-lg font-semibold hover:bg-purple-700 transition-colors">
{language === 'en' ? 'Start Your Application' : 'ابدأ طلبك'}
</button>
</div>
</div>
</div>
)}
{/* Popular Programs */}
<div className="bg-white rounded-xl shadow-lg p-8">
<h2 className="text-2xl font-bold text-gray-900 mb-6">
{language === 'en' ? 'Popular Programs' : 'البرامج الشائعة'}
</h2>
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
{popularCourses.map(course => (
<div key={course.id} className="border border-gray-200 rounded-lg p-6 hover:shadow-md transition-shadow">
<h3 className="text-lg font-bold text-gray-900 mb-2">
{language === 'en' ? course.title : course.titleAr}
{activeTab === 'deadlines' && (
<div className="space-y-8">
{/* Important Dates */}
<div>
<h3 className="text-xl font-semibold text-gray-900 mb-6 flex items-center gap-2">
<Calendar className="w-6 h-6 text-blue-600" />
Important Dates
</h3>
<div className="space-y-2 text-sm text-gray-600 mb-4">
<div className="flex items-center">
<Clock className="w-4 h-4 mr-2" />
<span>{course.duration}</span>
</div>
<div className="flex items-center">
<MapPin className="w-4 h-4 mr-2" />
<span>{language === 'en' ? course.campus : course.campusAr}</span>
</div>
<div className="flex items-center">
<DollarSign className="w-4 h-4 mr-2" />
<span>{course.fees}</span>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
{importantDates.map((date, index) => (
<div key={index} className="flex items-center gap-4 p-4 border border-gray-200 rounded-lg">
<div className={`w-3 h-3 rounded-full ${
date.type === 'deadline' ? 'bg-red-500' : 'bg-green-500'
}`}></div>
<div className="flex-1">
<h4 className="font-medium text-gray-900">{date.event}</h4>
<p className="text-sm text-gray-600">{date.date}</p>
</div>
</div>
))}
</div>
<button className="w-full bg-purple-50 text-purple-700 py-2 px-4 rounded-lg font-medium hover:bg-purple-100 transition-colors">
{language === 'en' ? 'Learn More' : 'تعلم المزيد'}
</button>
</div>
))}
</div>
</div>
</div>
)}
{/* Important Dates Tab */}
{activeTab === 'dates' && (
<div className="bg-white rounded-xl shadow-lg p-8">
<h2 className="text-3xl font-bold text-gray-900 mb-8 text-center">
{language === 'en' ? 'Important Dates 2024-2025' : 'تواريخ مهمة 2024-2025'}
</h2>
<div className="space-y-6">
{importantDates.map((date, index) => (
<div key={index} className="flex items-center justify-between p-6 bg-gray-50 rounded-lg hover:bg-gray-100 transition-colors">
<div className="flex items-center">
<div className="w-12 h-12 bg-purple-600 text-white rounded-full flex items-center justify-center mr-4">
<Calendar size={20} />
</div>
<div>
<h3 className="font-semibold text-gray-900">
{language === 'en' ? date.eventEn : date.eventAr}
</h3>
<p className="text-sm text-gray-600">
{language === 'en' ? date.typeEn : date.typeAr}
</p>
</div>
</div>
<div className="text-right">
<div className="font-semibold text-purple-600">
{language === 'en' ? date.dateEn : date.dateAr}
{/* Application Fees */}
<div>
<h3 className="text-xl font-semibold text-gray-900 mb-6 flex items-center gap-2">
<CreditCard className="w-6 h-6 text-green-600" />
Application Fees
</h3>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
{applicationFees.map((fee, index) => (
<div key={index} className="flex items-center justify-between p-4 border border-gray-200 rounded-lg">
<div>
<h4 className="font-medium text-gray-900">{fee.category}</h4>
<p className="text-sm text-gray-600">{fee.note}</p>
</div>
<div className="text-right">
<p className="text-lg font-semibold text-green-600">{fee.fee}</p>
</div>
</div>
))}
</div>
</div>
</div>
))}
)}
</div>
<div className="mt-8 text-center">
<button className="bg-purple-600 text-white px-6 py-3 rounded-lg font-semibold hover:bg-purple-700 transition-colors mr-4">
{language === 'en' ? 'Download Academic Calendar' : 'تحميل التقويم الأكاديمي'}
</div>
</section>
{/* Contact & Support */}
<section className="mb-16">
<div className="bg-gradient-to-r from-blue-50 to-indigo-50 rounded-2xl p-8">
<div className="text-center mb-8">
<h2 className="text-3xl font-bold text-gray-900 mb-4">Need Help with Your Application?</h2>
<p className="text-lg text-gray-600">
Our admissions team is here to support you throughout the application process.
</p>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
<div className="text-center">
<div className="w-16 h-16 bg-blue-600 text-white rounded-full flex items-center justify-center mx-auto mb-4">
<Phone className="w-8 h-8" />
</div>
<h3 className="text-lg font-semibold text-gray-900 mb-2">Call Us</h3>
<p className="text-gray-600 mb-2">+968 2414 3555</p>
<p className="text-sm text-gray-500">Mon-Thu: 8AM-4PM, Fri: 8AM-12PM</p>
</div>
<div className="text-center">
<div className="w-16 h-16 bg-green-600 text-white rounded-full flex items-center justify-center mx-auto mb-4">
<Mail className="w-8 h-8" />
</div>
<h3 className="text-lg font-semibold text-gray-900 mb-2">Email Us</h3>
<p className="text-gray-600 mb-2">admissions@utas.edu.om</p>
<p className="text-sm text-gray-500">Response within 24 hours</p>
</div>
<div className="text-center">
<div className="w-16 h-16 bg-purple-600 text-white rounded-full flex items-center justify-center mx-auto mb-4">
<MapPin className="w-8 h-8" />
</div>
<h3 className="text-lg font-semibold text-gray-900 mb-2">Visit Us</h3>
<p className="text-gray-600 mb-2">Campus Tours Available</p>
<p className="text-sm text-gray-500">Schedule your visit online</p>
</div>
</div>
</div>
</section>
{/* Final CTA */}
<section className="text-center">
<div className="bg-gradient-to-r from-blue-900 to-purple-900 rounded-2xl p-8 text-white">
<h2 className="text-3xl font-bold mb-4">Ready to Start Your Application?</h2>
<p className="text-xl text-blue-100 mb-8 max-w-2xl mx-auto">
Take the first step toward your future. Join UTAS Oman and be part of Oman&apos;s Vision 2040.
</p>
<div className="flex flex-col sm:flex-row gap-4 justify-center">
<button className="bg-white text-blue-900 px-8 py-3 rounded-lg font-semibold hover:bg-gray-100 transition-colors">
Start Application
</button>
<button className="bg-gray-200 text-gray-700 px-6 py-3 rounded-lg font-semibold hover:bg-gray-300 transition-colors">
{language === 'en' ? 'Set Reminders' : 'تعيين التذكيرات'}
<button className="border-2 border-white text-white px-8 py-3 rounded-lg font-semibold hover:bg-white hover:text-blue-900 transition-colors">
Download Application Guide
</button>
</div>
</div>
)}
{/* Student Support Tab */}
{activeTab === 'support' && (
<div className="space-y-8">
<div className="bg-white rounded-xl shadow-lg p-8">
<h2 className="text-3xl font-bold text-gray-900 mb-8 text-center">
{language === 'en' ? 'Student Support Services' : 'خدمات دعم الطلاب'}
</h2>
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
{supportServices.map((service, index) => (
<div key={index} className="text-center">
<div className={`w-16 h-16 rounded-full bg-gray-100 flex items-center justify-center mx-auto mb-4 ${service.iconColor}`}>
<Users size={32} />
</div>
<h3 className="text-lg font-bold text-gray-900 mb-3">
{language === 'en' ? service.titleEn : service.titleAr}
</h3>
<p className="text-gray-600 text-sm">
{language === 'en' ? service.descriptionEn : service.descriptionAr}
</p>
</div>
))}
</div>
</div>
{/* Contact Information */}
<div className="bg-white rounded-xl shadow-lg p-8">
<h2 className="text-2xl font-bold text-gray-900 mb-6">
{language === 'en' ? 'Contact Admissions' : 'اتصل بالقبول'}
</h2>
<div className="grid md:grid-cols-2 gap-8">
<div>
<h3 className="font-semibold text-gray-900 mb-4">
{language === 'en' ? 'General Inquiries' : 'الاستفسارات العامة'}
</h3>
<div className="space-y-3">
<div className="flex items-center">
<Mail className="w-5 h-5 text-purple-600 mr-3" />
<span>admissions@utas.edu.au</span>
</div>
<div className="flex items-center">
<Phone className="w-5 h-5 text-purple-600 mr-3" />
<span>+61 3 6226 2999</span>
</div>
<div className="flex items-center">
<Globe className="w-5 h-5 text-purple-600 mr-3" />
<span>www.utas.edu.au/admissions</span>
</div>
</div>
</div>
<div>
<h3 className="font-semibold text-gray-900 mb-4">
{language === 'en' ? 'International Students' : 'الطلاب الدوليون'}
</h3>
<div className="space-y-3">
<div className="flex items-center">
<Mail className="w-5 h-5 text-blue-600 mr-3" />
<span>international@utas.edu.au</span>
</div>
<div className="flex items-center">
<Phone className="w-5 h-5 text-blue-600 mr-3" />
<span>+61 3 6226 1800</span>
</div>
</div>
</div>
</div>
<div className="mt-6 flex gap-4">
<button className="flex-1 bg-purple-600 text-white py-3 px-4 rounded-lg font-semibold hover:bg-purple-700 transition-colors">
{language === 'en' ? 'Schedule a Call' : 'جدولة مكالمة'}
</button>
<button className="flex-1 bg-gray-200 text-gray-700 py-3 px-4 rounded-lg font-semibold hover:bg-gray-300 transition-colors flex items-center justify-center gap-2">
<ExternalLink size={16} />
{language === 'en' ? 'Live Chat' : 'الدردشة المباشرة'}
</button>
</div>
</div>
</div>
)}
{/* Call to Action */}
<div className="mt-16 bg-gradient-to-r from-purple-600 to-blue-600 rounded-xl p-8 text-white text-center">
<h2 className="text-3xl font-bold mb-4">
{language === 'en' ? 'Ready to Start Your Journey?' : 'هل أنت مستعد لبدء رحلتك؟'}
</h2>
<p className="text-xl opacity-90 mb-8 max-w-2xl mx-auto">
{language === 'en'
? 'Join thousands of students who have chosen UTAS for their education. Apply now and take the first step towards your future.'
: 'انضم إلى آلاف الطلاب الذين اختاروا UTAS لتعليمهم. تقدم الآن واتخذ الخطوة الأولى نحو مستقبلك.'
}
</p>
<div className="flex flex-col sm:flex-row gap-4 justify-center">
<button className="bg-white text-purple-600 px-8 py-3 rounded-lg font-semibold hover:bg-gray-100 transition-colors">
{language === 'en' ? 'Apply Now' : 'تقدم الآن'}
</button>
<button className="bg-purple-700 text-white px-8 py-3 rounded-lg font-semibold hover:bg-purple-800 transition-colors">
{language === 'en' ? 'Book Information Session' : 'احجز جلسة معلومات'}
</button>
</div>
</div>
</section>
</div>
</div>
);