// Portfolio content — executive tone, museum-catalogue framing.
const PROJECTS = [
  {
    id: 'frontier-ai',
    num: 'I',
    title: 'Frontier AI',
    subtitle: 'A voice-first showcase of frontier speech models, built for leadership demos.',
    status: 'active',
    statusLabel: 'On View',
    acquired: 'Feb 2026',
    retired: null,
    tagline: 'A voice AI proof of concept — volume I',
    situation: 'Leadership and directors across the enterprise were asking whether in-house voice AI was feasible.',
    action: 'Built Frontier AI — a narrated, theatrical demo of five specialist voice agents (concierge, cybersecurity, intake nurse, lab results, radiology) running on Gemini Live, GPT-Realtime, and Inworld. Each specialist hands off to the next as the conversation evolves, while the system annotates artifacts shared over screen share in real time.',
    result: 'A single five-minute walkthrough gives executives a tangible read on where voice AI is today.',
    accent: '#8b5cf6',
    mock: 'MockFrontier',
    shot: 'assets/fig-frontier.png',
    liveUrl: 'https://frontier-next.lokithor.org',
    embeddable: true,
  },
  {
    id: 'violet-itsm',
    num: 'II',
    title: 'Violet',
    subtitle: 'An LLM-native service desk built inside the NYULH HIPAA boundary.',
    status: 'active',
    statusLabel: 'On View',
    acquired: 'Apr 2026',
    retired: null,
    tagline: 'The institution owns the layer that handles the institution\u2019s tickets',
    situation: 'Desktop Support runs on tooling that treats the ticket queue as a lane for humans, not a lane for machines. Every ticket is an interrupt; every repeatable resolution costs a person\u2019s time.',
    action: 'Built Violet \u2014 an agentic ITSM surface designed around UltraViolet as the default resolver. Three surfaces ship in v1: the end-user portal where most tickets never reach a human, the tech console where agents hand off edge cases with full context, and an ops dashboard that reports coverage, resolution accuracy, and cost-per-ticket in the same view.',
    result: 'Early prototype: 91.2% coverage on pilot queues, 99.3% verified-correct resolution, median 87-second auto-resolution, $0.018 agent cost per ticket. Humans are now the reviewed exception, not the default.',
    accent: '#57068C',
    shot: 'assets/shot-violet.png',
    liveUrl: 'https://violet.lokithor.org',
    embeddable: true,
  },
  {
    id: 'secrets-manager',
    num: 'III',
    title: 'Secrets Manager',
    subtitle: 'A vault and guardrail plugin that stops credentials from leaking into AI tools.',
    status: 'decommissioned',
    statusLabel: 'Decommissioned',
    acquired: 'Oct 2025',
    retired: 'Jan 2026',
    tagline: 'Paper & Ink · a credential vault for the AI era',
    situation: 'Engineers were pasting API keys, credentials, and regulated identifiers directly into AI chat windows and terminals, sending sensitive data to external providers and persisting it in shell history.',
    action: 'Built a harness-agnostic Secrets Manager plugin compatible with Claude Code, OpenCode, and other major agents. The plugin uses hooks and regex to detect API keys, credit card numbers, and social security numbers at the moment they are pasted, and redirects them into an encrypted vault that unlocks with a PIN after six hours or on restart.',
    result: 'Demonstrated that sensitive material can be kept out of provider logs and shell history without interrupting engineer workflow.',
    accent: '#d97757',
    mock: 'MockSecrets',
    shot: 'assets/fig-secrets.png',
    liveUrl: 'assets/secrets-manager-preview.html',
    embeddable: true,
  },
  {
    id: 'ultraviolet-code',
    num: 'IV',
    title: 'UltraViolet Code',
    subtitle: 'A branded enterprise installer that gives any engineer frontier coding agents in seconds.',
    status: 'decommissioned',
    statusLabel: 'Suspended',
    acquired: 'Nov 2025',
    retired: 'Mar 2026',
    tagline: 'Enterprise installer · NYU Langone Health',
    situation: 'Interest in Claude Code is high, but individual licences at the scale of thousands of users were prohibitively expensive.',
    action: 'Built a step-by-step desktop installer that takes an UltraViolet API key and provisions a full coding-agent suite — Claude Code, OpenCode, and the OpenCode desktop client — against the HIPAA-compliant internal gateway. The installer handles model selection, credential storage, and update configuration.',
    result: 'Harnesses like Claude Code can be used with UV Gateway without needing to purchase licenses. We can combine this with a smart model router to save up to 90% in token costs.',
    accent: '#b8965a',
    mock: 'MockUVCode',
  },
  {
    id: 'lockout-investigator',
    num: 'V',
    title: 'Lockout Investigator',
    subtitle: 'AI-assisted root-cause analysis for account lockouts.',
    status: 'decommissioned',
    statusLabel: 'Decommissioned',
    acquired: 'Sep 2025',
    retired: 'Feb 2026',
    tagline: 'AI-powered lockout analysis and resolution',
    situation: 'Enterprise Tools Engineering asked whether AI could be applied to account-unlock investigations, which routinely took one to two hours of manual work per incident.',
    action: 'Built a web application that wraps multiple read-only engineering tools inside an MCP (Model Context Protocol) server, letting UltraViolet reason across authentication events, device enrollment records, and access-point telemetry to produce a summary, root cause, and confidence rating in a single pass.',
    result: 'Reduced a one-to-two hour investigation to under a minute.',
    accent: '#6d28d9',
    mock: 'MockLockout',
    shot: 'assets/fig-lockout.png',
  },
  {
    id: 'multiple-mcp',
    num: 'VI',
    title: 'Multiple MCP',
    subtitle: 'Read-only engineering toolchain exposed to AI through a single protocol.',
    status: 'decommissioned',
    statusLabel: 'Decommissioned',
    acquired: 'Dec 2025',
    retired: 'Apr 2026',
    tagline: 'Engineering context, made legible to the model',
    situation: 'End User Engineering wanted UltraViolet to help resolve account issues, but the relevant diagnostic tools were scattered across separate internal consoles and scripts.',
    action: 'Consolidated a curated set of read-only engineering tools behind a single Model Context Protocol server, so UltraViolet could query each consistently, compose their outputs, and return an integrated diagnosis.',
    result: 'Engineering teams reported resolving issues they previously triaged in 60–90 minutes in under five.',
    accent: '#0f766e',
  },
  {
    id: 'radiology-bench',
    num: 'VII',
    title: 'Radiology Bench',
    subtitle: 'Parallel benchmark of frontier vision models against radiology cases.',
    status: 'decommissioned',
    statusLabel: 'Decommissioned',
    acquired: 'Jan 2026',
    retired: 'Mar 2026',
    tagline: 'Four models, one chest X-ray, running in parallel',
    situation: 'Clinical and research stakeholders wanted a read on how well current frontier vision-and-reasoning models could interpret radiology imagery.',
    action: 'Built a benchmarking surface that fans a single case — X-rays plus ground-truth findings — out to Gemini, Claude, GPT, and MedGemma in parallel, and scores each response against expected keywords.',
    result: 'Across the tested cases, frontier models averaged under 50% against clinician ground truth — useful as a floor, and the catalyst for pivoting toward a retrieval-and-embeddings approach grounded in our own imaging corpus.',
    accent: '#b45309',
    mock: 'MockRadiology',
    shot: 'assets/fig-radiology.png',
  },
  {
    id: 'uv-inventory',
    num: 'VIII',
    title: 'UV Inventory Manager',
    subtitle: 'A conversational front end over fragmented asset spreadsheets.',
    status: 'decommissioned',
    statusLabel: 'Suspended',
    acquired: 'Oct 2025',
    retired: 'Feb 2026',
    tagline: 'One chatbot for every inventory',
    situation: 'Teams tracked physical and software assets across dozens of non-standard Excel files.',
    action: 'Built an ingestion pipeline that normalises arbitrary spreadsheets into a single SQL store, and a UV-powered chatbot on top that.',
    result: 'Lets any user search, add, and update inventory records through natural language.',
    accent: '#7c3aed',
  },
  {
    id: 'uv-dashboards',
    num: 'IX',
    title: 'UV-Powered Dashboards',
    subtitle: 'Static BI dashboards, made interrogable by natural language.',
    status: 'decommissioned',
    statusLabel: 'Decommissioned',
    acquired: 'Nov 2025',
    retired: 'Mar 2026',
    tagline: 'Ask the dashboard what it means',
    situation: 'Operational dashboards presented the numbers but required each reader to interpret them independently, with no path from chart to explanation.',
    action: 'Rebuilt a service-ticket dashboard against live SQL, with an AI button on each panel that hands the underlying data to UltraViolet for narrative analysis — trends, anomalies, comparisons — on demand.',
    result: 'Surfaced patterns and outliers that had been sitting in the data unnoticed, and proved the pattern of "clickable explanation" as a reusable dashboard primitive.',
    accent: '#581c87',
    mock: 'MockDashboard',
    shot: 'assets/fig-dashboard.png',
  },
];

window.PROJECTS = PROJECTS;
