diff --git a/app/agents/[id]/page.tsx b/app/agents/[id]/page.tsx index 9d89136..46aa967 100644 --- a/app/agents/[id]/page.tsx +++ b/app/agents/[id]/page.tsx @@ -1,32 +1,15 @@ -import { getEntityById, getRelatedEntities } from '@/lib/data'; +import { getEntityById, getRelatedEntities, getEntitiesByType } from '@/lib/data'; import { calculateOverallScore } from '@/framework/schema/types'; import { ScoreBadge, ScoreBar } from '@/components/score-badge'; import { TrustVectorChart } from '@/components/trust-vector-chart'; import { Badge } from '@/components/ui/badge'; import { formatDate } from '@/lib/utils'; import { notFound } from 'next/navigation'; +import { ExportPDFButton } from '@/components/export-pdf-button'; export function generateStaticParams() { - const agents = [ - // Enterprise (5) - 'amazon-lex', 'azure-bot-service', 'google-dialogflow', 'ibm-watson-assistant', 'salesforce-einstein-bots', - - // Cloud Providers (3) - 'openai-assistants-api', 'amazon-bedrock-agents', 'google-agent-builder', - - // Open-Source (8) - 'rasa', 'haystack', 'langflow', 'flowise', 'superagi', 'langgraph-agent', 'llamaindex-agent', 'crewai', - - // Microsoft (2) - 'autogen', 'semantic-kernel-agent', - - // Workflow/Automation (4) - 'n8n-ai-agent', 'make-ai', 'zapier-ai', 'activepieces', - - // Specialized (8) - 'agentgpt', 'e2b-agents', 'pydantic-ai', 'swarm', 'adala', 'memgpt', 'autogpt', 'babyagi', - ]; - return agents.map((id) => ({ id })); + const agents = getEntitiesByType('agent'); + return agents.map((agent) => ({ id: agent.id })); } export default function AgentDetailPage({ params }: { params: { id: string } }) { @@ -65,60 +48,67 @@ export default function AgentDetailPage({ params }: { params: { id: string } }) ]; return ( -
+
{/* Breadcrumb */} -
- +
+ Home - - + + Agents - - {entity.name} + + {entity.name}
{/* Hero Section */} -
-
-
-

{entity.name}

-

{entity.provider}

-
-
- -

Overall Trust Score

-
-
+
+ {/* Scanline effect */} +
-

{entity.description}

+
+
+
+
┌─ AGENT IDENTIFICATION ─────────────────────┐
+

{entity.name}

+

[{entity.provider.toUpperCase()}]

+
+
+ +

Overall Trust Score

+ +
+
-
- {entity.tags?.map((tag) => ( - - {tag} - - ))} -
+

{entity.description}

-
-
- Version: {entity.version} +
+ {entity.tags?.map((tag) => ( + + #{tag.toUpperCase()} + + ))}
-
- Last Evaluated: {formatDate(entity.last_evaluated)} + +
+
+ Version: {entity.version} +
+
+ Last Evaluated: {formatDate(entity.last_evaluated)} +
+ {entity.website && ( + + Official Website → + + )}
- {entity.website && ( - - Official Website → - - )}
@@ -126,30 +116,31 @@ export default function AgentDetailPage({ params }: { params: { id: string } })
{/* Left: Trust Vector Visualization */}
-
-

Trust Vector

+
+
├─ TRUST VECTOR ANALYSIS ────────────────────
+

Trust Vector

{/* Dimension Details */} {dimensions.map((dimension) => ( -
+
-

{dimension.name}

+

{dimension.name}

{dimension.data.notes && ( -

{dimension.data.notes}

+

{dimension.data.notes}

)}
{Object.entries(dimension.data.criteria).map(([key, criterion]) => (
-
+
-
+
{key.replace(/_/g, ' ')}
{criterion.score !== undefined && ( @@ -160,7 +151,7 @@ export default function AgentDetailPage({ params }: { params: { id: string } }) /> )} {criterion.value !== undefined && ( -
+
Value: {criterion.value}
)} @@ -173,16 +164,16 @@ export default function AgentDetailPage({ params }: { params: { id: string } })
-
+
-
Methodology
-
+
Methodology
+
{criterion.methodology}
-
Evidence
+
Evidence
{criterion.evidence.map((evidence, idx) => (
@@ -190,14 +181,14 @@ export default function AgentDetailPage({ params }: { params: { id: string } }) href={evidence.url} target="_blank" rel="noopener noreferrer" - className="text-primary hover:underline font-medium" + className="text-cyan-400 hover:text-cyan-300 hover:underline font-medium" > {evidence.source} -
+
{evidence.value}
-
+
Date: {evidence.date}
@@ -205,14 +196,14 @@ export default function AgentDetailPage({ params }: { params: { id: string } })
-
+
Confidence: {criterion.confidence} @@ -221,7 +212,7 @@ export default function AgentDetailPage({ params }: { params: { id: string } })
{criterion.notes && ( -
+
Note: {criterion.notes}
)} @@ -236,26 +227,28 @@ export default function AgentDetailPage({ params }: { params: { id: string } }) {/* Right Sidebar */}
{/* Strengths */} -
-

✨ Strengths

+
+
├─ STRENGTHS ─────────
+

Strengths

    {entity.strengths.map((strength, idx) => (
  • - - {strength} + + + {strength}
  • ))}
{/* Limitations */} -
-

⚠️ Limitations

+
+
├─ LIMITATIONS ───────
+

Limitations

    {entity.limitations.map((limitation, idx) => (
  • - - {limitation} + ! + {limitation}
  • ))}
@@ -264,20 +257,21 @@ export default function AgentDetailPage({ params }: { params: { id: string } }) {/* Metadata */} {entity.metadata && ( -
-

📊 Metadata

+
+
├─ METADATA ──────────
+

Metadata

{Object.entries(entity.metadata).map(([key, value]) => { if (typeof value === 'object' && value !== null) { return (
-
+
{key.replace(/_/g, ' ')}:
{Object.entries(value).map(([subKey, subValue]) => ( -
- {subKey.replace(/_/g, ' ')}:{' '} +
+ {subKey.replace(/_/g, ' ')}:{' '} {String(subValue)}
))} @@ -286,8 +280,8 @@ export default function AgentDetailPage({ params }: { params: { id: string } }) ); } return ( -
- {key.replace(/_/g, ' ')}:{' '} +
+ {key.replace(/_/g, ' ')}:{' '} {String(value)}
); @@ -300,16 +294,17 @@ export default function AgentDetailPage({ params }: { params: { id: string } }) {/* Use Case Ratings */} {entity.use_case_ratings && Object.keys(entity.use_case_ratings).length > 0 && ( -
-

Use Case Ratings

+
+
├─ USE CASE ANALYSIS ─────────────────────────
+

Use Case Ratings

{Object.entries(entity.use_case_ratings).map(([key, rating]) => ( -
+
-

{key.replace(/-/g, ' ')}

+

{key.replace(/-/g, ' ')}

-

{rating.notes}

+

{rating.notes}

))}
@@ -318,20 +313,21 @@ export default function AgentDetailPage({ params }: { params: { id: string } }) {/* Related Entities */} {relatedEntities.length > 0 && ( -
-

Similar Agents

+
+
├─ SIMILAR ENTITIES ──────────────────────────
+

Similar Agents

diff --git a/app/contribute/page.tsx b/app/contribute/page.tsx new file mode 100644 index 0000000..8696fe8 --- /dev/null +++ b/app/contribute/page.tsx @@ -0,0 +1,386 @@ +import { GitBranch, FileJson, CheckCircle, AlertTriangle, BookOpen, Code, Users, ExternalLink, Database, Bot, Brain } from 'lucide-react'; +import Link from 'next/link'; + +export default function ContributePage() { + return ( +
+ {/* Hero Section */} +
+
+ + Community-Driven +
+ +

+ How to Contribute +

+ +

+ TrustVector is an open-source project that relies on community contributions to evaluate AI systems. + Help us build the most comprehensive and transparent AI trust database. +

+
+ + {/* What You Can Contribute */} +
+

What You Can Contribute

+ +
+
+
+ +
+

AI Models

+

+ Add evaluations for new LLMs, multimodal models, and specialized AI systems from any provider. +

+
+ +
+
+ +
+

AI Agents

+

+ Evaluate agent frameworks like CrewAI, AutoGPT, LangGraph, and enterprise agent platforms. +

+
+ +
+
+ +
+

MCP Servers

+

+ Add trust reports for Model Context Protocol servers that extend AI capabilities. +

+
+
+
+ + {/* Quick Start */} +
+

Quick Start Guide

+ +
+
+
+
+ 1 +
+
+

Fork the Repository

+

+ Start by forking the TrustVector repository to your GitHub account. +

+ + git clone https://github.com/YOUR_USERNAME/trust-vector.git + +
+
+
+ +
+
+
+ 2 +
+
+

Choose What to Evaluate

+

+ Create a new JSON file in the appropriate directory: +

+
+
+ + data/models/ + - For AI models +
+
+ + data/agents/ + - For AI agents +
+
+ + data/mcps/ + - For MCP servers +
+
+
+
+
+ +
+
+
+ 3 +
+
+

Follow the Schema

+

+ Use existing files as templates. Every evaluation must include: +

+
    +
  • Five trust dimensions with scored criteria
  • +
  • Evidence with sources, URLs, and dates
  • +
  • Confidence levels (high, medium, low)
  • +
  • Use case ratings for different scenarios
  • +
  • Strengths and limitations
  • +
+
+
+
+ +
+
+
+ 4 +
+
+

Submit a Pull Request

+

+ Open a PR with a clear description of what you've evaluated and why. +

+ + git checkout -b add-evaluation-[name] && git push origin HEAD + +
+
+
+
+
+ + {/* Data Schema */} +
+

Data Schema Overview

+ +
+
+
+ + example-evaluation.json +
+
+
+            {`{
+  "id": "unique-identifier",
+  "type": "model" | "agent" | "mcp",
+  "name": "Display Name",
+  "provider": "Provider Name",
+  "version": "1.0.0",
+  "last_evaluated": "2025-01-14",
+  "description": "Brief description...",
+  "trust_vector": {
+    "performance_reliability": {
+      "overall_score": 85,
+      "criteria": {
+        "criterion_name": {
+          "score": 85,
+          "confidence": "high" | "medium" | "low",
+          "evidence": [{
+            "source": "Source Name",
+            "url": "https://...",
+            "date": "2025-01-14",
+            "value": "Key finding..."
+          }]
+        }
+      }
+    },
+    "security": { ... },
+    "privacy_compliance": { ... },
+    "trust_transparency": { ... },
+    "operational_excellence": { ... }
+  },
+  "use_case_ratings": {
+    "code-generation": { "overall": 90, "notes": "..." }
+  },
+  "strengths": ["..."],
+  "limitations": ["..."]
+}`}
+          
+
+
+ + {/* Evidence Guidelines */} +
+

Evidence Guidelines

+ +
+
+
+ +

Accepted Sources

+
+
    +
  • + + Official documentation and technical papers +
  • +
  • + + Peer-reviewed research and benchmarks +
  • +
  • + + Security audits and compliance certifications +
  • +
  • + + Official GitHub repositories +
  • +
  • + + Reputable security research publications +
  • +
+
+ +
+
+ +

Use With Caution

+
+
    +
  • + ! + Marketing materials (may be biased) +
  • +
  • + ! + Unverified community reports +
  • +
  • + ! + Outdated documentation (>6 months) +
  • +
  • + ! + Self-reported benchmarks without validation +
  • +
  • + ! + Anonymous or unattributed sources +
  • +
+
+
+
+ + {/* Confidence Levels */} +
+

Confidence Levels

+ +
+
+
+ + High + +
+

Multiple authoritative sources

+

+ Official documentation, peer-reviewed research, recent data (within 3 months) +

+
+
+ +
+ + Medium + +
+

Some authoritative sources

+

+ Partial documentation, community feedback, data within 6 months +

+
+
+ +
+ + Low + +
+

Limited sources available

+

+ Older data, inferred from general practices, or single-source information +

+
+
+
+
+
+ + {/* Needed Evaluations */} +
+

Currently Needed

+ +
+
+

+ + MCP Servers +

+
    +
  • • Supabase MCP Server
  • +
  • • GitLab MCP Server
  • +
  • • Perplexity MCP Server
  • +
  • • Tavily MCP Server
  • +
  • • Exa MCP Server
  • +
  • • Context7 MCP Server
  • +
  • • Google Maps MCP Server
  • +
  • • ClickHouse MCP Server
  • +
+
+ +
+

+ + AI Agents & Platforms +

+
    +
  • • Kore.ai Enterprise Agents
  • +
  • • Glean AI Platform
  • +
  • • Sierra Customer Service
  • +
  • • Moveworks Enterprise Assistant
  • +
  • • Decagon Support AI
  • +
  • • Aisera Service Automation
  • +
  • • Cognigy Contact Center AI
  • +
  • • Relevance AI Agents
  • +
+
+
+
+ + {/* CTA */} +
+
+ +

Ready to Contribute?

+

+ Join our community of contributors helping build transparency in AI systems. +

+
+ + + View on GitHub + + + + Read Methodology + +
+
+
+
+ ); +} diff --git a/app/globals.css b/app/globals.css index 2e8f927..d4c2f08 100644 --- a/app/globals.css +++ b/app/globals.css @@ -633,3 +633,97 @@ pointer-events: none; opacity: 0.05; } + +/* PDF Export Mode - Applied when exporting */ +.pdf-export-mode, +.pdf-export-mode body { + background: #0a0a0a !important; + background-image: none !important; +} + +.pdf-export-mode body::before, +.pdf-export-mode body::after { + display: none !important; +} + +.pdf-export-mode .absolute.pointer-events-none { + display: none !important; +} + +.pdf-export-mode .matrix-bg, +.pdf-export-mode .cyber-grid, +.pdf-export-mode #matrix-canvas { + display: none !important; +} + +.pdf-export-mode header, +.pdf-export-mode footer { + display: none !important; +} + +.pdf-export-mode main { + background: #0a0a0a !important; +} + +.pdf-export-mode * { + animation: none !important; + transition: none !important; +} + +/* Force single column layout in PDF export mode */ +.pdf-export-mode .grid.lg\:grid-cols-3 { + display: block !important; +} + +.pdf-export-mode .lg\:col-span-2 { + width: 100% !important; + margin-bottom: 24px !important; +} + +.pdf-export-mode .space-y-6 > * { + margin-bottom: 24px !important; +} + +/* Print styles */ +@media print { + body { + background: #0a0a0a !important; + background-image: none !important; + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + } + + body::before, + body::after { + display: none !important; + } + + .absolute.pointer-events-none { + display: none !important; + } + + * { + animation: none !important; + transition: none !important; + } + + /* Force single column layout */ + .grid { + display: block !important; + } + + .lg\:grid-cols-3, + .md\:grid-cols-2, + .md\:grid-cols-3 { + display: block !important; + } + + .lg\:col-span-2 { + width: 100% !important; + } + + /* Hide export button */ + [data-export-button] { + display: none !important; + } +} diff --git a/app/layout.tsx b/app/layout.tsx index 4732238..e203129 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -5,7 +5,7 @@ import { Logo } from '@/components/logo'; export const metadata: Metadata = { title: 'TrustVector - AI Assurance Framework', description: - 'Open-source framework for evaluating 98 AI systems (models, MCPs, and agents) across 5 trust dimensions: security, privacy, performance, trust, and operational excellence.', + 'Open-source framework for evaluating 106 AI systems (models, MCPs, and agents) across 5 trust dimensions: security, privacy, performance, trust, and operational excellence.', keywords: [ 'AI', 'LLM', @@ -28,14 +28,14 @@ export const metadata: Metadata = { }, openGraph: { title: 'TrustVector - AI Assurance Framework', - description: 'Evidence-based evaluations of 98 AI systems across 5 trust dimensions', + description: 'Evidence-based evaluations of 106 AI systems across 5 trust dimensions', type: 'website', siteName: 'TrustVector', }, twitter: { card: 'summary_large_image', title: 'TrustVector - AI Assurance Framework', - description: 'Evidence-based evaluations of 98 AI systems across 5 trust dimensions', + description: 'Evidence-based evaluations of 106 AI systems across 5 trust dimensions', }, }; @@ -70,7 +70,7 @@ export default function RootLayout({ SYSTEM ACTIVE | - 98 AI ENTITIES MONITORED + 106 AI ENTITIES MONITORED | 5 TRUST VECTORS
@@ -122,6 +122,13 @@ export default function RootLayout({ # Methodology + + + + Contribute + {/* GitHub button - command line style */} ({ id })); + const mcps = getEntitiesByType('mcp'); + return mcps.map((mcp) => ({ id: mcp.id })); } export default function MCPDetailPage({ params }: { params: { id: string } }) { @@ -66,60 +48,67 @@ export default function MCPDetailPage({ params }: { params: { id: string } }) { ]; return ( -
+
{/* Breadcrumb */} -
- +
+ Home - - + + MCPs - - {entity.name} + + {entity.name}
{/* Hero Section */} -
-
-
-

{entity.name}

-

{entity.provider}

-
-
- -

Overall Trust Score

-
-
+
+ {/* Scanline effect */} +
-

{entity.description}

+
+
+
+
┌─ MCP IDENTIFICATION ─────────────────────┐
+

{entity.name}

+

[{entity.provider.toUpperCase()}]

+
+
+ +

Overall Trust Score

+ +
+
-
- {entity.tags?.map((tag) => ( - - {tag} - - ))} -
+

{entity.description}

-
-
- Version: {entity.version} +
+ {entity.tags?.map((tag) => ( + + #{tag.toUpperCase()} + + ))}
-
- Last Evaluated: {formatDate(entity.last_evaluated)} + +
+
+ Version: {entity.version} +
+
+ Last Evaluated: {formatDate(entity.last_evaluated)} +
+ {entity.website && ( + + Official Website → + + )}
- {entity.website && ( - - Official Website → - - )}
@@ -127,30 +116,31 @@ export default function MCPDetailPage({ params }: { params: { id: string } }) {
{/* Left: Trust Vector Visualization */}
-
-

Trust Vector

+
+
├─ TRUST VECTOR ANALYSIS ────────────────────
+

Trust Vector

{/* Dimension Details */} {dimensions.map((dimension) => ( -
+
-

{dimension.name}

+

{dimension.name}

{dimension.data.notes && ( -

{dimension.data.notes}

+

{dimension.data.notes}

)}
{Object.entries(dimension.data.criteria).map(([key, criterion]) => (
-
+
-
+
{key.replace(/_/g, ' ')}
{criterion.score !== undefined && ( @@ -161,7 +151,7 @@ export default function MCPDetailPage({ params }: { params: { id: string } }) { /> )} {criterion.value !== undefined && ( -
+
Value: {criterion.value}
)} @@ -174,16 +164,16 @@ export default function MCPDetailPage({ params }: { params: { id: string } }) {
-
+
-
Methodology
-
+
Methodology
+
{criterion.methodology}
-
Evidence
+
Evidence
{criterion.evidence.map((evidence, idx) => (
@@ -191,14 +181,14 @@ export default function MCPDetailPage({ params }: { params: { id: string } }) { href={evidence.url} target="_blank" rel="noopener noreferrer" - className="text-primary hover:underline font-medium" + className="text-cyan-400 hover:text-cyan-300 hover:underline font-medium" > {evidence.source} -
+
{evidence.value}
-
+
Date: {evidence.date}
@@ -206,14 +196,14 @@ export default function MCPDetailPage({ params }: { params: { id: string } }) {
-
+
Confidence: {criterion.confidence} @@ -222,7 +212,7 @@ export default function MCPDetailPage({ params }: { params: { id: string } }) {
{criterion.notes && ( -
+
Note: {criterion.notes}
)} @@ -237,26 +227,28 @@ export default function MCPDetailPage({ params }: { params: { id: string } }) { {/* Right Sidebar */}
{/* Strengths */} -
-

✨ Strengths

+
+
├─ STRENGTHS ─────────
+

Strengths

    {entity.strengths.map((strength, idx) => (
  • - - {strength} + + + {strength}
  • ))}
{/* Limitations */} -
-

⚠️ Limitations

+
+
├─ LIMITATIONS ───────
+

Limitations

    {entity.limitations.map((limitation, idx) => (
  • - - {limitation} + ! + {limitation}
  • ))}
@@ -265,20 +257,21 @@ export default function MCPDetailPage({ params }: { params: { id: string } }) { {/* Metadata */} {entity.metadata && ( -
-

📊 Metadata

+
+
├─ METADATA ──────────
+

Metadata

{Object.entries(entity.metadata).map(([key, value]) => { if (typeof value === 'object' && value !== null) { return (
-
+
{key.replace(/_/g, ' ')}:
{Object.entries(value).map(([subKey, subValue]) => ( -
- {subKey.replace(/_/g, ' ')}:{' '} +
+ {subKey.replace(/_/g, ' ')}:{' '} {String(subValue)}
))} @@ -287,8 +280,8 @@ export default function MCPDetailPage({ params }: { params: { id: string } }) { ); } return ( -
- {key.replace(/_/g, ' ')}:{' '} +
+ {key.replace(/_/g, ' ')}:{' '} {String(value)}
); @@ -301,16 +294,17 @@ export default function MCPDetailPage({ params }: { params: { id: string } }) { {/* Use Case Ratings */} {entity.use_case_ratings && Object.keys(entity.use_case_ratings).length > 0 && ( -
-

Use Case Ratings

+
+
├─ USE CASE ANALYSIS ─────────────────────────
+

Use Case Ratings

{Object.entries(entity.use_case_ratings).map(([key, rating]) => ( -
+
-

{key.replace(/-/g, ' ')}

+

{key.replace(/-/g, ' ')}

-

{rating.notes}

+

{rating.notes}

))}
@@ -319,20 +313,21 @@ export default function MCPDetailPage({ params }: { params: { id: string } }) { {/* Related Entities */} {relatedEntities.length > 0 && ( -
-

Similar MCPs

+
+
├─ SIMILAR ENTITIES ──────────────────────────
+

Similar MCPs

diff --git a/app/models/[id]/page.tsx b/app/models/[id]/page.tsx index d612b86..876f405 100644 --- a/app/models/[id]/page.tsx +++ b/app/models/[id]/page.tsx @@ -1,38 +1,15 @@ -import { getEntityById, getRelatedEntities } from '@/lib/data'; +import { getEntityById, getRelatedEntities, getEntitiesByType } from '@/lib/data'; import { calculateOverallScore } from '@/framework/schema/types'; import { ScoreBadge, ScoreBar } from '@/components/score-badge'; import { TrustVectorChart } from '@/components/trust-vector-chart'; import { Badge } from '@/components/ui/badge'; import { formatDate } from '@/lib/utils'; import { notFound } from 'next/navigation'; +import { ExportPDFButton } from '@/components/export-pdf-button'; export function generateStaticParams() { - const models = [ - // Anthropic (8) - 'claude-sonnet-4-5', 'claude-4-sonnet', 'claude-4-opus', 'claude-opus-4-1', - 'claude-3-7-sonnet-r', 'claude-3-7-sonnet', 'claude-haiku-4-5', 'claude-3-5-haiku', - - // OpenAI (14) - 'gpt-5', 'gpt-4-5', 'gpt-4-1', 'gpt-4-1-mini', 'gpt-4-1-nano', - 'gpt-4o', 'gpt-4o-mini', 'openai-o1', 'openai-o1-mini', 'openai-o3', - 'openai-o3-mini', 'openai-o4-mini', 'gpt-oss-20b', 'gpt-oss-120b', - - // Google (4) - 'gemini-2-5-pro', 'gemini-2-5-flash', 'gemini-2-0-flash', 'gemma-3-27b', - - // Meta (5) - 'llama-4-maverick', 'llama-4-behemoth', 'llama-4-scout', 'llama-3-1-405b', 'llama-3-3-70b', - - // xAI (2) - 'grok-4', 'grok-3-beta', - - // DeepSeek (2) - 'deepseek-r1', 'deepseek-v3-0324', - - // Other (3) - 'nemotron-ultra-253b', 'qwen2-5-vl-32b', 'nova-pro', - ]; - return models.map((id) => ({ id })); + const models = getEntitiesByType('model'); + return models.map((model) => ({ id: model.id })); } export default function ModelDetailPage({ params }: { params: { id: string } }) { @@ -71,60 +48,67 @@ export default function ModelDetailPage({ params }: { params: { id: string } }) ]; return ( -
+
{/* Breadcrumb */} -
- +
+ Home - - + + Models - - {entity.name} + + {entity.name}
{/* Hero Section */} -
-
-
-

{entity.name}

-

{entity.provider}

-
-
- -

Overall Trust Score

-
-
+
+ {/* Scanline effect */} +
-

{entity.description}

+
+
+
+
┌─ MODEL IDENTIFICATION ─────────────────────┐
+

{entity.name}

+

[{entity.provider.toUpperCase()}]

+
+
+ +

Overall Trust Score

+ +
+
-
- {entity.tags?.map((tag) => ( - - {tag} - - ))} -
+

{entity.description}

-
-
- Version: {entity.version} +
+ {entity.tags?.map((tag) => ( + + #{tag.toUpperCase()} + + ))}
-
- Last Evaluated: {formatDate(entity.last_evaluated)} + +
+
+ Version: {entity.version} +
+
+ Last Evaluated: {formatDate(entity.last_evaluated)} +
+ {entity.website && ( + + Official Website → + + )}
- {entity.website && ( - - Official Website → - - )}
@@ -132,30 +116,31 @@ export default function ModelDetailPage({ params }: { params: { id: string } })
{/* Left: Trust Vector Visualization */}
-
-

Trust Vector

+
+
├─ TRUST VECTOR ANALYSIS ────────────────────
+

Trust Vector

{/* Dimension Details */} {dimensions.map((dimension) => ( -
+
-

{dimension.name}

+

{dimension.name}

{dimension.data.notes && ( -

{dimension.data.notes}

+

{dimension.data.notes}

)}
{Object.entries(dimension.data.criteria).map(([key, criterion]) => (
-
+
-
+
{key.replace(/_/g, ' ')}
{criterion.score !== undefined && ( @@ -166,7 +151,7 @@ export default function ModelDetailPage({ params }: { params: { id: string } }) /> )} {criterion.value !== undefined && ( -
+
Value: {criterion.value}
)} @@ -179,16 +164,16 @@ export default function ModelDetailPage({ params }: { params: { id: string } })
-
+
-
Methodology
-
+
Methodology
+
{criterion.methodology}
-
Evidence
+
Evidence
{criterion.evidence.map((evidence, idx) => (
@@ -196,14 +181,14 @@ export default function ModelDetailPage({ params }: { params: { id: string } }) href={evidence.url} target="_blank" rel="noopener noreferrer" - className="text-primary hover:underline font-medium" + className="text-cyan-400 hover:text-cyan-300 hover:underline font-medium" > {evidence.source} -
+
{evidence.value}
-
+
Date: {evidence.date}
@@ -211,14 +196,14 @@ export default function ModelDetailPage({ params }: { params: { id: string } })
-
+
Confidence: {criterion.confidence} @@ -227,7 +212,7 @@ export default function ModelDetailPage({ params }: { params: { id: string } })
{criterion.notes && ( -
+
Note: {criterion.notes}
)} @@ -242,26 +227,28 @@ export default function ModelDetailPage({ params }: { params: { id: string } }) {/* Right Sidebar */}
{/* Strengths */} -
-

✨ Strengths

+
+
├─ STRENGTHS ─────────
+

Strengths

    {entity.strengths.map((strength, idx) => (
  • - - {strength} + + + {strength}
  • ))}
{/* Limitations */} -
-

⚠️ Limitations

+
+
├─ LIMITATIONS ───────
+

Limitations

    {entity.limitations.map((limitation, idx) => (
  • - - {limitation} + ! + {limitation}
  • ))}
@@ -270,20 +257,21 @@ export default function ModelDetailPage({ params }: { params: { id: string } }) {/* Metadata */} {entity.metadata && ( -
-

📊 Metadata

+
+
├─ METADATA ──────────
+

Metadata

{Object.entries(entity.metadata).map(([key, value]) => { if (typeof value === 'object' && value !== null) { return (
-
+
{key.replace(/_/g, ' ')}:
{Object.entries(value).map(([subKey, subValue]) => ( -
- {subKey.replace(/_/g, ' ')}:{' '} +
+ {subKey.replace(/_/g, ' ')}:{' '} {String(subValue)}
))} @@ -292,8 +280,8 @@ export default function ModelDetailPage({ params }: { params: { id: string } }) ); } return ( -
- {key.replace(/_/g, ' ')}:{' '} +
+ {key.replace(/_/g, ' ')}:{' '} {String(value)}
); @@ -306,16 +294,17 @@ export default function ModelDetailPage({ params }: { params: { id: string } }) {/* Use Case Ratings */} {entity.use_case_ratings && Object.keys(entity.use_case_ratings).length > 0 && ( -
-

Use Case Ratings

+
+
├─ USE CASE ANALYSIS ─────────────────────────
+

Use Case Ratings

{Object.entries(entity.use_case_ratings).map(([key, rating]) => ( -
+
-

{key.replace(/-/g, ' ')}

+

{key.replace(/-/g, ' ')}

-

{rating.notes}

+

{rating.notes}

))}
@@ -324,20 +313,21 @@ export default function ModelDetailPage({ params }: { params: { id: string } }) {/* Related Entities */} {relatedEntities.length > 0 && ( -
-

Similar Models

+
+
├─ SIMILAR ENTITIES ──────────────────────────
+

Similar Models

diff --git a/app/page.tsx b/app/page.tsx index fe0e246..91618d2 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -87,7 +87,7 @@ export default function HomePage() { {/* Description - More Readable */}

- Comprehensive trust evaluations of 93 AI systems across{' '} + Comprehensive trust evaluations of {allEntities.length} AI systems across{' '} 5 security dimensions — covering models, MCPs, and agents with evidence-backed analysis.

@@ -112,7 +112,7 @@ export default function HomePage() { Explore Evaluations )} - {/* CTA Section */} - {/* Custom Styles */} diff --git a/components/entity-card.tsx b/components/entity-card.tsx index 6c075eb..6692077 100644 --- a/components/entity-card.tsx +++ b/components/entity-card.tsx @@ -70,27 +70,28 @@ export function EntityCard({ entity }: EntityCardProps) { {/* Outer glow effect on hover - terminal green */} -
+