diff --git a/src/App.tsx b/src/App.tsx index 42ec96c..da8db4e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2894,7 +2894,7 @@ function PortalsPage() { return (
-
+
{/* Admin Portal */} + + {/* AI Assistance Portal - Phase 3 */} + +
+
+ +
+

AI Assistance Portal

+

+ AI-powered request matching and insights +

+
+ +
+
+ + Real-time AI request processing +
+
+ + Smart resource matching & allocation +
+
+ + Predictive analytics & insights +
+
+ + + Access AI Portal + +
{/* Access Information */} diff --git a/src/ai/ProcessingPipeline.ts b/src/ai/ProcessingPipeline.ts index d36e4cc..ca8c44f 100644 --- a/src/ai/ProcessingPipeline.ts +++ b/src/ai/ProcessingPipeline.ts @@ -29,7 +29,7 @@ class MockQueue { return job } - process(jobType: string, concurrency: number, processor: (job: { id: string; data: T }) => Promise): void { + process(jobType: string, _concurrency: number, processor: (job: { id: string; data: T }) => Promise): void { this.processors.set(jobType, processor) } @@ -66,17 +66,17 @@ class NotificationService { }) } - async notifyStudent(studentId: string, assignment: any): Promise { + async notifyStudent(studentId: string, _assignment: any): Promise { console.log(`📧 Notifying student ${studentId} about assignment`) // In production: send email, SMS, or push notification } - async notifyVolunteer(volunteerId: string, assignment: any): Promise { + async notifyVolunteer(volunteerId: string, _assignment: any): Promise { console.log(`📧 Notifying volunteer ${volunteerId} about new assignment`) // In production: send volunteer notification } - async notifyCoordinators(assignment: any): Promise { + async notifyCoordinators(_assignment: any): Promise { console.log(`📧 Notifying coordinators about new assignment`) // In production: alert coordination team } @@ -86,7 +86,7 @@ class NotificationService { // In production: trigger donor engagement campaign } - async notifyReviewer(reviewer: any, reviewTask: any, aiInsights: any): Promise { + async notifyReviewer(reviewer: any, _reviewTask: any, aiInsights: any): Promise { console.log(`👥 Notifying reviewer ${reviewer.id} about review task with AI confidence: ${aiInsights.aiConfidence}`) // In production: send detailed review notification with AI recommendations } @@ -303,7 +303,7 @@ export class RealTimeProcessingPipeline { } } - private async selectOptimalReviewer(request: StudentRequest, matches: MatchResult[]) { + private async selectOptimalReviewer(request: StudentRequest, _matches: MatchResult[]) { // Mock reviewer selection - in production, this would use actual staff data const reviewers = [ { id: 'rev1', name: 'Sarah Martinez', specialties: ['clothing', 'emergency-housing'], workload: 5 }, @@ -366,7 +366,7 @@ export class RealTimeProcessingPipeline { } } - private async updateDashboard(requestId: string, matches: MatchResult[]): Promise { + private async updateDashboard(requestId: string, _matches: MatchResult[]): Promise { console.log(`📊 Updating dashboard for request ${requestId}`) // In production: update real-time analytics dashboard } @@ -387,7 +387,7 @@ export class RealTimeProcessingPipeline { await this.routeForHumanReview(request, []) } - private async trackDecision(request: StudentRequest, match: MatchResult, decision: string): Promise { + private async trackDecision(request: StudentRequest, _match: MatchResult, decision: string): Promise { console.log(`📈 Tracking decision: ${decision} for request ${request.id}`) // In production: log decision for ML model training } diff --git a/src/ai/StudentAssistanceAI.ts b/src/ai/StudentAssistanceAI.ts index 6c28c3d..f13fb0e 100644 --- a/src/ai/StudentAssistanceAI.ts +++ b/src/ai/StudentAssistanceAI.ts @@ -531,7 +531,7 @@ export class StudentAssistanceAI { return candidates.map(candidate => this.calculateRuleBasedScore(candidate, analysis, request)) } - private calculateRuleBasedScore(candidate: any, analysis: RequestAnalysis, request: StudentRequest): MatchResult { + private calculateRuleBasedScore(candidate: any, analysis: RequestAnalysis, _request: StudentRequest): MatchResult { let score = 0.5 // Base score // Category match bonus @@ -581,7 +581,7 @@ export class StudentAssistanceAI { estimatedCost: candidate.avgCost, fulfillmentTimeline: this.estimateTimeline(analysis.urgencyScore, analysis.complexityEstimate), reasoningFactors: this.generateReasoningFactors(candidate, analysis), - riskFactors: this.identifyRiskFactors(candidate, analysis, request) + riskFactors: this.identifyRiskFactors(candidate, analysis) } } diff --git a/src/components/AIAssistancePortal.tsx b/src/components/AIAssistancePortal.tsx index 57a07da..2553a3b 100644 --- a/src/components/AIAssistancePortal.tsx +++ b/src/components/AIAssistancePortal.tsx @@ -465,7 +465,7 @@ function ConfidenceIndicator({ confidence }: { confidence: number }) { } function AIPerformanceMetrics() { - const [metrics, setMetrics] = useState({ + const [metrics] = useState({ accuracyRate: 0.87, accuracyTrend: 2.3, avgProcessingTime: 1.8, diff --git a/src/index.css b/src/index.css index 1e6d23b..bc27e28 100644 --- a/src/index.css +++ b/src/index.css @@ -49,6 +49,26 @@ @apply text-sm font-medium text-neutral-600 transition hover:text-primary-600 dark:text-neutral-300 dark:hover:text-primary-400; } + /* Form Components */ + .input-field { + @apply w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-sm text-gray-900 placeholder-gray-500 transition focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100 dark:placeholder-gray-400 dark:focus:border-primary-400; + } + + /* Text Utilities */ + .line-clamp-2 { + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + } + + .line-clamp-3 { + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + } + .input { @apply w-full rounded-xl border border-white/30 bg-white/70 px-3 py-2 text-sm backdrop-blur transition focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-500/20 dark:border-white/10 dark:bg-white/10 dark:focus:border-primary-400; }