'use client'; import { useState, useEffect } from 'react'; interface University { id: string; name: string; slug: string; domain: string; subdomain: string; branding: any; contact: any; features: any; ai: any; } interface Content { id: string; title: string; titleAr: string; contentType: string; content: string; contentAr: string; isPublished: boolean; universityId: string; } interface Program { id: string; title: string; titleAr: string; level: string; duration: string; fees: string; entryRequirements: string; universityId: string; } export default function DemoPage() { const [universities, setUniversities] = useState([]); const [content, setContent] = useState([]); const [programs, setPrograms] = useState([]); const [selectedUniversity, setSelectedUniversity] = useState(''); const [loading, setLoading] = useState(true); useEffect(() => { fetchData(); }, []); const fetchData = async () => { try { const [unisRes, contentRes, programsRes] = await Promise.all([ fetch('/api/universities'), fetch('/api/content'), fetch('/api/programs') ]); const unisData = await unisRes.json(); const contentData = await contentRes.json(); const programsData = await programsRes.json(); setUniversities(unisData.data); setContent(contentData.data); setPrograms(programsData.data); setSelectedUniversity(unisData.data[0]?.id || ''); } catch (error) { console.error('Error fetching data:', error); } finally { setLoading(false); } }; const selectedUni = universities.find(u => u.id === selectedUniversity); const universityContent = content.filter(c => c.universityId === selectedUniversity); const universityPrograms = programs.filter(p => p.universityId === selectedUniversity); if (loading) { return (

Loading demo data...

); } return (
{/* Header */}

🎓 White-Label University Portal Demo

Multi-Tenant Architecture with Real Database Data

{/* University Selector */}

🏫 Select University (Multi-Tenant Demo)

{universities.map((uni) => (
setSelectedUniversity(uni.id)} className={`p-4 rounded-lg border-2 cursor-pointer transition-all ${ selectedUniversity === uni.id ? 'border-blue-500 bg-blue-50' : 'border-gray-200 hover:border-blue-300' }`} >

{uni.name}

Domain: {uni.domain}

Subdomain: {uni.subdomain}

Active
))}
{selectedUni && ( <> {/* University Info */}

🎯 {selectedUni.name} - Configuration

Branding

Primary Color: {selectedUni.branding.primaryColor}

Tagline: {selectedUni.branding.tagline}

Theme: {selectedUni.branding.theme}

Contact

Email: {selectedUni.contact.email}

Phone: {selectedUni.contact.phone}

Address: {selectedUni.contact.address}

{/* Content */}

📝 Content Management ({universityContent.length} items)

{universityContent.map((item) => (

{item.title}

{item.contentType}

{item.content.substring(0, 100)}...

{item.isPublished ? '✅ Published' : '⏳ Draft'} Arabic: {item.titleAr ? '✅' : '❌'}
))}
{/* Programs */}

🎓 Academic Programs ({universityPrograms.length} programs)

{universityPrograms.map((program) => (

{program.title}

{program.level}

{program.duration}

Fees: {program.fees}

Arabic: {program.titleAr ? '✅' : '❌'}

))}
{/* AI Configuration */}

🤖 AI Configuration

AI Settings

Provider: {selectedUni.ai.provider}

Model: {selectedUni.ai.model}

Languages: {selectedUni.ai.personality.language.join(', ')}

University Context

Location: {selectedUni.ai.universityContext.location}

Specializations: {selectedUni.ai.universityContext.specializations.slice(0, 2).join(', ')}...

Research Areas: {selectedUni.ai.universityContext.researchAreas.slice(0, 2).join(', ')}...

)} {/* Demo Instructions */}

🚀 How This Multi-Tenant System Works

1. Data Isolation

Each university has its own data - content, programs, and configuration are completely separated.

2. Dynamic Branding

Colors, logos, contact info, and AI personality are customized per university.

3. Multi-Language Support

All content supports both English and Arabic with RTL layout.

4. AI Customization

Each university has its own AI context, specializations, and knowledge base.

5. Domain Management

Each university can have custom domains and subdomains with SSL certificates.

{/* Navigation */}
); }