✨ Major Features Added: - AI Chat with conversation memory and university-specific knowledge base - Multi-tenant university support with white-label capabilities - Professional admin interface for knowledge base management - Advanced database schema with Prisma ORM - Comprehensive documentation and guides - Modern Next.js 15 + React 19 architecture - Bilingual support (English/Arabic) - Role-based access control - Real-time chat interface with loading states 🔧 Technical Improvements: - Fixed all linter errors and TypeScript issues - Cleaned up codebase and removed legacy files - Added comprehensive .gitignore - Updated README with detailed setup instructions - Optimized database schema and migrations - Enhanced error handling and user experience 📚 Documentation: - AI Conversation Memory Guide - AI Enhancement Summary - Developer Guide - User Guide - Complete setup and deployment instructions 🚀 Ready for GitHub deployment and production use!
10 KiB
Branch Management System Guide
Overview
The White-Label University Portal now supports both standalone university deployment and multi-branch university management. This system allows universities to:
- Standalone Mode: Deploy as a single university with full independence
- Multi-Branch Mode: Manage multiple campuses, centers, and branches under one parent university
Architecture
Database Schema
model University {
id String @id @default(uuid())
slug String @unique
name String
shortName String?
domain String?
subdomain String?
// Branch Management
isMultiBranch Boolean @default(false)
parentUniversityId String?
branchType BranchType?
// Configuration
branding Json
contact Json
features Json
ai Json
status UniversityStatus @default(SETUP)
// Relationships
parentUniversity University? @relation("UniversityBranches", fields: [parentUniversityId], references: [id])
branches University[] @relation("UniversityBranches")
}
enum BranchType {
MAIN
CAMPUS
CENTER
BRANCH
EXTENSION
PARTNER
}
Branch Types
- MAIN: Primary campus/university (can have branches)
- CAMPUS: Physical campus location
- CENTER: Specialized center or institute
- BRANCH: Regional or satellite branch
- EXTENSION: Extension program or location
- PARTNER: Partner institution or collaborative program
Implementation
1. University Provider
The enhanced UniversityProvider now includes branch management capabilities:
interface UniversityContextType {
university: University | null;
branches: University[];
parentUniversity: University | null;
loading: boolean;
error: string | null;
refreshUniversity: () => Promise<void>;
updateUniversity: (updates: Partial<University>) => Promise<void>;
switchBranch: (branchId: string) => Promise<void>;
isBranch: boolean;
isMainCampus: boolean;
canManageBranches: boolean;
}
2. Branch Management Hooks
// Main hook for university context
const { university, loading, error } = useUniversity();
// Branch management specific hook
const { branches, parentUniversity, isBranch, switchBranch } = useBranchManagement();
// Feature flags
const hasBranchManagement = useFeatureEnabled('branchManagement');
3. API Endpoints
Get University Branches
GET /api/universities/{slug}/branches
Create New Branch
POST /api/universities/{slug}/branches
Content-Type: application/json
{
"name": "Dubai Campus",
"shortName": "UTAS Dubai",
"branchSlug": "utas-dubai",
"branchType": "CAMPUS",
"domain": "utas-dubai.edu.ae",
"subdomain": "dubai"
}
Usage Scenarios
Scenario 1: Standalone University
A single university wants to deploy their portal independently:
// University configuration
{
name: "University of Technology",
slug: "utech",
isMultiBranch: false,
branchType: null,
parentUniversityId: null
}
Features Available:
- Full university portal functionality
- Independent branding and content
- No branch management interface
- Single domain/subdomain
Scenario 2: Multi-Branch University
A university with multiple campuses wants centralized management:
// Parent University
{
name: "University of Global Education",
slug: "uge",
isMultiBranch: true,
branchType: "MAIN",
parentUniversityId: null
}
// Branch Campus
{
name: "UGE Dubai Campus",
slug: "uge-dubai",
isMultiBranch: false,
branchType: "CAMPUS",
parentUniversityId: "uge-parent-id"
}
Features Available:
- Branch management dashboard
- Shared content and branding options
- Independent branch configurations
- Branch switching interface
Scenario 3: University Network
Multiple universities want to share a platform:
// Each university is independent
{
name: "University A",
slug: "university-a",
isMultiBranch: false,
branchType: null,
parentUniversityId: null
}
{
name: "University B",
slug: "university-b",
isMultiBranch: false,
branchType: null,
parentUniversityId: null
}
Components
1. Branch Selector
The BranchSelector component provides branch switching functionality:
import { BranchSelector } from '@/components/BranchManagement/BranchSelector';
// In your component
<BranchSelector className="ml-4" />
Features:
- Dropdown with available branches
- Visual indicators for branch types
- Quick branch switching
- Manage branches link (for admin users)
2. Main Navigation
The enhanced MainNavigation component adapts to branch context:
import { MainNavigation } from '@/components/Navigation/MainNavigation';
// Automatically shows branch context
<MainNavigation />
Features:
- Shows parent university name for branches
- Displays current branch name
- Includes branch selector for multi-branch universities
- Responsive mobile navigation
3. Branch Management Page
Admin interface for managing branches:
// Access via /admin/branches
<BranchesPage />
Features:
- List all branches
- Create new branches
- Edit branch configurations
- Delete branches
- Branch status management
Configuration
Feature Flags
Control branch management features per university:
features: {
branchManagement: true, // Enable branch management
sharedContent: true, // Share content between branches
independentBranding: false, // Allow independent branding per branch
}
Branding Inheritance
Branches can inherit branding from parent university:
// When creating a branch
branding: {
primaryColor: parentUniversity.branding.primaryColor,
secondaryColor: parentUniversity.branding.secondaryColor,
logo: parentUniversity.branding.logo,
favicon: parentUniversity.branding.favicon,
theme: 'modern'
}
Content Sharing
Configure content sharing between branches:
// Shared content settings
features: {
sharedContent: true,
sharedPrograms: true,
sharedKnowledgeBase: false,
independentNews: true
}
Deployment Options
Option 1: Single University Deployment
# Deploy as standalone university
npm run build
npm run start
Use Case: Single university with one campus
Option 2: Multi-Branch University Deployment
# Deploy with branch management
npm run build
npm run start
Use Case: University with multiple campuses
Option 3: Multi-University Platform
# Deploy as platform for multiple universities
npm run build
npm run start
Use Case: SaaS platform serving multiple universities
Migration Guide
From Single University to Multi-Branch
-
Update Database Schema
npx prisma migrate dev --name add_branch_management -
Update University Configuration
// Set existing university as main campus await prisma.university.update({ where: { slug: 'existing-university' }, data: { isMultiBranch: true, branchType: 'MAIN' } }); -
Create Branches
// Create new branches await prisma.university.create({ data: { name: 'New Campus', slug: 'new-campus', parentUniversityId: 'existing-university-id', branchType: 'CAMPUS', isMultiBranch: false } });
From Multi-Branch to Standalone
-
Remove Branch Relationships
// Update branches to be independent await prisma.university.updateMany({ where: { parentUniversityId: 'parent-id' }, data: { parentUniversityId: null, isMultiBranch: false, branchType: null } }); -
Update Parent University
await prisma.university.update({ where: { id: 'parent-id' }, data: { isMultiBranch: false, branchType: null } });
Best Practices
1. Naming Conventions
- Slugs: Use consistent naming (e.g.,
utas-main,utas-dubai,utas-singapore) - Domains: Follow pattern (e.g.,
utas.edu.om,dubai.utas.edu.om) - Branch Types: Use appropriate types for clear organization
2. Content Strategy
- Shared Content: Use for policies, general information
- Branch-Specific Content: Use for local events, campus-specific information
- Branding: Inherit from parent but allow customization
3. User Management
- Admin Users: Can manage all branches
- Branch Users: Limited to their specific branch
- Content Permissions: Configure based on sharing requirements
4. Performance Considerations
- Caching: Cache branch-specific data separately
- Database Queries: Use proper indexing for branch relationships
- CDN: Configure branch-specific asset delivery
Troubleshooting
Common Issues
-
Branch Not Showing
- Check
isMultiBranchflag on parent university - Verify
parentUniversityIdrelationship - Ensure branch status is 'ACTIVE'
- Check
-
Branch Switching Not Working
- Check cookie settings
- Verify API endpoint permissions
- Ensure proper university context
-
Content Not Sharing
- Check
sharedContentfeature flag - Verify content ownership settings
- Review content isolation rules
- Check
Debug Commands
# Check database relationships
npx prisma studio
# Verify API endpoints
curl http://localhost:3000/api/universities/{slug}/branches
# Test branch switching
curl -X POST http://localhost:3000/api/universities/{branchId}
Future Enhancements
Planned Features
-
Advanced Branch Analytics
- Branch-specific usage statistics
- Cross-branch comparison reports
- Performance metrics per branch
-
Branch Templates
- Pre-configured branch setups
- Quick branch creation wizards
- Standardized configurations
-
Branch Collaboration
- Inter-branch content sharing
- Collaborative programs
- Shared student services
-
Multi-Language Branch Support
- Branch-specific language settings
- Localized content per branch
- Regional language preferences
This branch management system provides the flexibility to support both simple standalone universities and complex multi-branch institutions while maintaining the white-label capabilities of the platform.